@sachin9822/reports-lib 0.0.130 → 0.0.131
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/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +2 -2
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +2 -2
- package/fesm2015/sachin9822-reports-lib.mjs +4 -4
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
- package/fesm2020/sachin9822-reports-lib.mjs +4 -4
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
- package/package.json +1 -1
package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs
CHANGED
@@ -878,9 +878,9 @@ export class BranchActivitySendReportComponent {
|
|
878
878
|
}
|
879
879
|
}
|
880
880
|
BranchActivitySendReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivitySendReportComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ReportService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
881
|
-
BranchActivitySendReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BranchActivitySendReportComponent, selector: "lib-branch-activity-send-report", ngImport: i0, template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.meta-td{padding:0!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i6.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i6.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
|
881
|
+
BranchActivitySendReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BranchActivitySendReportComponent, selector: "lib-branch-activity-send-report", ngImport: i0, template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.meta-td{padding:0!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i6.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i6.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
|
882
882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivitySendReportComponent, decorators: [{
|
883
883
|
type: Component,
|
884
|
-
args: [{ selector: 'lib-branch-activity-send-report', template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.meta-td{padding:0!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"] }]
|
884
|
+
args: [{ selector: 'lib-branch-activity-send-report', template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.meta-td{padding:0!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"] }]
|
885
885
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ReportService }, { type: i0.NgZone }]; } });
|
886
886
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVELE1BQU0sZUFBZSxDQUFDO0FBQy9GLGtGQUFrRjtBQUNsRixPQUFPLEVBQUUsU0FBUyxFQUE0RCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHNGQUFzRixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVB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QU07SUFDTix1REFBdUQ7SUFDdkQsNkNBQTZDO0lBQzdDLE9BQU87SUFDUCxJQUFJO0lBRUosZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ3JELEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7OzhIQTE4QlUsaUNBQWlDO2tIQUFqQyxpQ0FBaUMsdUVDeEI5Qyw2bWlCQTRWVTsyRkRwVUcsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vIGltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnJhbmNoQWN0aXZpdHlSZXBvcnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJhbmNoLWFjdGl2aXR5LXJlcG9ydC9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIEdyaWRPcHRpb25zLCBHcmlkUmVhZHlFdmVudCwgUm93R3JvdXBpbmdEaXNwbGF5VHlwZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgdGhlbWVBbHBpbmUgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvdGhlbWluZyc7XHJcblxyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVwb3J0L2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC1sb2FkaW5nLXN0YXRlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGRhdGFNYXA6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmaWx0ZXJlZERhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBwcm94eURhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgY291bnRyaWVzOiBhbnk7XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZnJvbURhdGU6IGFueTtcclxuICB0b0RhdGU6IGFueTtcclxuICBjbGllbnRzOiBhbnkgPSBbXTtcclxuICBjbGllbnRzRGF0YTphbnkgPSBbXTtcclxuICBjbGllbnRCcmFuY2hlczogYW55ID0gW107XHJcbiAgc2hvd1JlcG9ydDogYm9vbGVhbjtcclxuICByYW5nZXM6IGFueVtdID0gWzEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDAsICdBbGwnXTtcclxuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDE1O1xyXG4gIHBhZ2luYXRpb25BcnJheTogYW55W107XHJcbiAgc2hvd1JhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBZ2VudFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSAnZXhjZWwnO1xyXG4gIGdyaWRBUGk7XHJcbiAgZ3JpZENvbHVtbkFwaTtcclxuICB1c2VyOiBzdHJpbmcgPSBcImthdXNoaWsua3Vsc2FuZ2VAeHByZXNzbW9uZXkudGVjaFwiO1xyXG4gIHJlcG9ydERhdGU6IHN0cmluZztcclxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XHJcbiAgYnVmZmVyOiBhbnk7XHJcbiAgbXlTdGF0dXM6IEZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gIHN0YXR1cyA9IFsnQWxsJ107XHJcbiAgZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgc3lzVXNlcklkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBsb2dvQmFzZTY0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgbWVzc2FnZTogc3RyaW5nID0gJ05vIERhdGEgRm91bmQnO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xyXG4gIGV4cG9ydEZvcm1hdHMgPSBbe2Zvcm1hdE5hbWU6XCJFeGNlbFwiLGNvZGU6J2V4Y2VsJ30se2Zvcm1hdE5hbWU6XCJQREZcIixjb2RlOidwZGYnfSx7Zm9ybWF0TmFtZTpcIkNTVlwiLGNvZGU6J2Nzdid9XVxyXG4gIC8vIGZsYWdzXHJcbiAgc2hvd1N0YXR1c0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0NsaWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93Q3VycmVuY3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UHJvZHVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dTZW5kQ291bnRyeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZWNlaXZlQ291bnRyeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dCcmFuY2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNhYmxlVG9EYXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93RXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93TWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5vRGF0YUZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpZW50U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhY3RpdmVCcmFuY2g6IG51bWJlcjtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmPEJyYW5jaEFjdGl2aXR5UmVwb3J0PltdID0gW1xyXG4gICAgeyBmaWVsZDogJ2J1c2luZXNzRGF0ZVRpbWUnLCBoZWFkZXJOYW1lOiAnQnVzaW5lc3MgRGF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctbGVmdC1hbGlnbmVkLWhlYWRlcicsIG1pbldpZHRoOiA3MCwgd2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGVUaW1lJyB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZVRpbWUnLCBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gRGF0ZScsIGZsZXg6IDIsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlIH0sXHJcbiAgICB7IGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmxleDogMS44LCB3aWR0aDogMTMwLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwtdHJhbnNhY3Rpb24nLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcclxuICAgIHsgZmllbGQ6ICdwcm9kdWN0JywgaGVhZGVyTmFtZTogJ1Byb2R1Y3QnLCBmbGV4OiAwLjUsIG1pbldpZHRoOiA1MCwgd2lkdGg6IDYwLCB0b29sdGlwRmllbGQ6ICdwcm9kdWN0JyB9LFxyXG4gICAgeyBmaWVsZDogJ3NlbmRBZ2VudEJyYW5jaENvZGUnLCBoZWFkZXJOYW1lOiAnU2VuZCBCcmFuY2hDb2RlJywgZmxleDogMSwgd2lkdGg6IDEyMCwgdG9vbHRpcEZpZWxkOiAnc2VuZEFnZW50QnJhbmNoQ29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQ2xpZW50Q29kZScsIGZsZXg6IDEsIG1pbldpZHRoOiA3MCwgd2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheW91dENDY29kZScsIGhlYWRlck5hbWU6ICdSZWNlaXZlQ2N5IENvZGUnLCBmbGV4OiAxLCB3aWR0aDogMTEwLCB0b29sdGlwRmllbGQ6ICdwYXlvdXRDQ2NvZGUnIH0sXHJcbiAgICB7IGZpZWxkOiAncGF5b3V0QW1vdW50JywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQW1vdW50JywgZmxleDogMSwgbWF4V2lkdGg6IDEzMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3BheW91dEFtb3VudCcgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlpbkNDY29kZScsIGhlYWRlck5hbWU6ICdTZW5kQ2N5IENvZGUnLCBmbGV4OiAxLCBtYXhXaWR0aDogOTAsIHRvb2x0aXBGaWVsZDogJ3BheWluQ0Njb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheWluQW1vdW50JywgaGVhZGVyTmFtZTogJ1NlbmQgQW1vdW50JywgZmxleDogMSwgbWF4V2lkdGg6IDEyMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3BheWluQW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCcsIGhlYWRlck5hbWU6ICdTZXJ2aWNlIEZlZScsIGZsZXg6IDEsIG1heFdpZHRoOiAxMjAsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkNvbW1pc3Npb25BbW91bnQnIH0sXHJcbiAgICB7IGZpZWxkOiAndGF4JywgaGVhZGVyTmFtZTogJ1RheCcsIGZsZXg6IDEsIHdpZHRoOiA3MCwgbWF4V2lkdGg6IDEwMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3RheCcgfSxcclxuICAgIHsgZmllbGQ6ICd0b3RhbFBheWluQW1vdW50JywgaGVhZGVyTmFtZTogJ1RvdGFsIFNlbmQgQW1vdW50JywgZmxleDogMSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3RvdGFsUGF5aW5BbW91bnQnIH0sXHJcbiAgICB7IGZpZWxkOiAnc3RhdHVzJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZsZXg6IDEsIHRvb2x0aXBGaWVsZDogJ3N0YXR1cycgfVxyXG4gIF07XHJcblxyXG5cclxuICBkZWZhdWx0Q29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgbWlud2lkdGg6IDQwLFxyXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVhZGVySGVpZ2h0OiB0cnVlLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgd3JhcFRleHQ6IHRydWVcclxuICB9O1xyXG4gIHJvd0RhdGE6IEJyYW5jaEFjdGl2aXR5UmVwb3J0W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgcmVwb3J0U2VydmljZTogUmVwb3J0U2VydmljZSwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIHJlcG9ydFRoZW1lID0gdGhlbWVBbHBpbmUud2l0aFBhcmFtcyh7XHJcbiAgICBoZWFkZXJGb250U2l6ZTogJzEwcHgnLFxyXG4gICAgZm9udEZhbWlseTogWydBcmlhbCcsICdzYW5zLXNlcmlmJ10sXHJcbiAgICBmb250U2l6ZTogJzlweCdcclxuICB9KTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBDaGVjayBpZiBVc2VyIGlzIGZhbGNvbiB1c2VyIG9yIGZvc3NpbFVzZXJcclxuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpKSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN5c1VzZXJJZCA9IHRoaXMuc3lzVXNlcklkLnJlcGxhY2UoL15bXCInXSguKilbXCInXSQvLCAnJDEnKTtcclxuICAgIHRoaXMudXNlciA9IHRoaXMuc3lzVXNlcklkO1xyXG4gICAgY29uc29sZS5sb2coXCJTeXN0ZW0gVXNlciBJZCA6IFwiICsgdGhpcy5zeXNVc2VySWQpO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldENvbXBhbnlDb25maWcoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucGFyYW1zID0gZGF0YTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5wYXJhbXMpXHJcbiAgICB9KVxyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgcGFyYW1zOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGFyYW1zKCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBheUluQWdlbnRzKHRoaXMuc3lzVXNlcklkKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pOyBcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoeyBwYXJhbXMsIGNsaWVudHMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHMgPSBbLi4uY2xpZW50c107XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHNEYXRhID0gWy4uLmNsaWVudHNdO1xyXG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpICYmIHRoaXMuY2xpZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q2xpZW50KHRoaXMuY2xpZW50c1swXS5jb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuRXJyb3I7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWVudFNlbGVjdGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0NsaWVudENoYW5nZSgpO1xyXG4gICAgLy9Db252ZXJ0IExvZ28gdG8gYmFzZTY0XHJcbiAgICB0aGlzLmxvYWRJbWFnZUFzQmFzZTY0KCdzcmMvYXNzZXRzL3JlcG9ydHMtbGliL2ltYWdlcy9YTUNvcmFsLnBuZycpLnRoZW4oYmFzZTY0ID0+IHtcclxuICAgICAgdGhpcy5sb2dvQmFzZTY0ID0gYmFzZTY0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB0b0RhdGU6IFt7IHZhbHVlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGJyYW5jaDogW3sgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0aGlzLmlzQWdlbnRTZWxlY3RlZCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcmVjZWl2ZUN1cnJlbmN5OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHNlbGVjdGVkU3RhdHVzOiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgdGhpcy5zaG93U3RhdHVzRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NsaWVudHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IFwiXCI7XHJcbiAgICB0aGlzLnNob3dFcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVwb3J0ID0gZmFsc2U7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZvcm0udmFsdWUpXHJcbiAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAgIC8vIFZhbGlkYXRlIEZvcm1cclxuICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBgUGxlYXNlIGZpbGwgYWxsIHRoZSByZXF1aXJlZCBmaWVsZHNgO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBmcm9tRGF0ZSBpcyBncmVhdGVyIHRoYW4gdG9EYXRlXHJcbiAgICBpZiAobmV3IERhdGUodGhpcy5mcm9tRGF0ZSkgPiBuZXcgRGF0ZSh0aGlzLnRvRGF0ZSkpIHtcclxuICAgICAgdGhpcy5zaG93RXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGcm9tIERhdGUgJHt0aGlzLmZyb21EYXRlfSBjYW4gbm90IGJlIGdyZWF0ZXIgdGhhbiBUbyBEYXRlICR7dGhpcy50b0RhdGV9YDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGRheXMgXHJcbiAgICBjb25zdCBmcm9tID0gbmV3IERhdGUodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICBjb25zdCB0byA9IG5ldyBEYXRlKHRoaXMudG9EYXRlKTtcclxuICAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMgZXhjZWVkcyAzMSBkYXlzICgxIG1vbnRocyBhcHByb3gpXHJcbiAgICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBgRnJvbSBEYXRlICR7dGhpcy5mcm9tRGF0ZX0gYW5kIFRvIERhdGUgJHt0aGlzLnRvRGF0ZX0gc2hvdWxkIGhhdmUgZGlmZmVyZW5jZSBvZiBtYXggMSBtb250aGA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Vycm9yID0gZmFsc2U7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5tYXBGb3JtVG9Nb2RlbCgpO1xyXG4gICAgbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZWxlY3RlZFN0YXR1c1wiXS52YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKG1vZGFsKTtcclxuICAgIHRoaXMuc2hvd01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZXBvcnQobW9kYWwpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgdGhpcy5kYXRhTWFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkRGF0YSkubGVuZ3RoID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm94eURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCkuZmlsbCgxNSk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZSA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWREYXRhKS5sZW5ndGggPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dSZXBvcnQgPSB0cnVlO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kYXRhTWFwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJveHlEYXRhKSkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBPYmplY3QudmFsdWVzKGVudHJ5KVxyXG4gICAgICAgIC5zb21lKHZhbCA9PiB7XHJcbiAgICAgICAgICBsZXQgYTogc3RyaW5nID0gdmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHJldHVybiBhLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpID09IC0xID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIH0pKVxyXG5cclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGFba2V5XSA9IGZpbHRlcmVkRGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgb25BZ2VudFNlbGVjdGVkKGNvZGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1snY2xpZW50J10udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudCh0aGlzLnN5c1VzZXJJZCwgY29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmNsaWVudEJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImV6cmVtaXR1c2VybmFtZVwiKSl7XHJcbiAgICAgICAgICBjb25zdCBpbmRleD10aGlzLmNsaWVudEJyYW5jaGVzLmZpbmRJbmRleCgoYnJhbmNoKT0+YnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgaWYoaW5kZXg9PS0xKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSh0aGlzLmNsaWVudEJyYW5jaGVzWzBdLmJyYW5jaENvZGUpXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwRm9ybVRvTW9kZWwoKTogQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsIHtcclxuICAgIGNvbnN0IGRhdGEgPSBuZXcgQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcclxuICAgIGRhdGEuc3RhcnREYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydmcm9tRGF0ZSddLnZhbHVlO1xyXG4gICAgZGF0YS5lbmREYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzWyd0b0RhdGUnXS52YWx1ZTtcclxuICAgIGRhdGEuc2VuZENvdW50cnlDb2RlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydzZW5kQ291bnRyeSddLnZhbHVlO1xyXG4gICAgZGF0YS5yZWN2Q291bnRyeUNvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ3JlY2VpdmVDb3VudHJ5J10udmFsdWU7XHJcbiAgICBkYXRhLmJ1c2luZXNzUGFydG5lckNvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2NsaWVudCddLnZhbHVlO1xyXG4gICAgZGF0YS50cmFuc2FjdGlvblN0YXR1cyA9IHRoaXMuZm9ybS5jb250cm9sc1sndHJhbnNhY3Rpb25TdGF0dXMnXS52YWx1ZTtcclxuICAgIGRhdGEudHJhbnNhY3Rpb25UeXBlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydwcm9kdWN0J10udmFsdWU7XHJcbiAgICBkYXRhLmJyYW5jaENvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnZhbHVlO1xyXG4gICAgZGF0YS5wYXlvdXRDdXJyZW5jeSA9IHRoaXMuZm9ybS5jb250cm9sc1sncmVjZWl2ZUN1cnJlbmN5J10udmFsdWU7XHJcbiAgICBkYXRhLmNvbXBhbnlDb2RlID0gXCJCSFwiO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7XHJcbiAgICBwYXJhbXMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIHRoaXMuZ3JpZEFQaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5BcGkgPSBwYXJhbXMuY29sdW1uQXBpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQocGFyYW1zOiBhbnkpIHtcclxuICAgIHBhcmFtcy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZUxpbWl0KGxpbWl0OiBhbnksIGluZGV4OiBudW1iZXIsIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAobGltaXQgIT0gXCJBbGxcIikge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcnJheVtpbmRleF0gPSBsaW1pdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkFycmF5W2luZGV4XSA9IHRoaXMuZmlsdGVyZWREYXRhW2tleV0ubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93UmFuZ2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUV4cG9ydCgpIHtcclxuICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmdyaWRBUGkuZm9yRWFjaE5vZGUobm9kZSA9PiBkYXRhLnB1c2gobm9kZS5kYXRhKSlcclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkRGF0YSkubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydEV4Y2VsKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0UERGKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjc3YnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0Q1NWKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGFuIGV4cG9ydCBmb3JtYXQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KGltYWdlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgaW1nLnNyYyA9IGltYWdlUGF0aDtcclxuXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gU2NhbGUgdXAgY2FudmFzIHJlc29sdXRpb24gKDJ4IG9yIG1vcmUpXHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSAyO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogc2NhbGU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpOyAvLyBEcmF3IGltYWdlIGF0IGhpZ2hlciBxdWFsaXR5XHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApOyAvLyAxLjAgPSBoaWdoZXN0IHF1YWxpdHlcclxuICAgICAgICAgIHJlc29sdmUoYmFzZTY0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBpbWFnZTogJyArIGltYWdlUGF0aCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFBERihkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydwYXlvdXRBbW91bnQnLCAncGF5aW5BbW91bnQnLCAndG90YWxQYXlpbkFtb3VudCcsICd0YXgnLCAndHJhbnNhY3Rpb25Db21taXNzaW9uQW1vdW50J107XHJcbiAgICBkYXRhID0gT2JqZWN0LnZhbHVlcyh0aGlzLmRhdGFNYXApWzBdO1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcclxuICAgICAgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLFxyXG4gICAgICB1bml0OiAnbW0nLFxyXG4gICAgICBmb3JtYXQ6IFs0MDAsIDIxMF1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuXHJcbiAgICAvL1RpdGxlXHJcbiAgICBjb25zdCB0aXRsZSA9IGBCcmFuY2ggQWN0aXZpdHkgU2VuZGA7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBjb25zdCB0ZXh0V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLyAyLCAxNSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XHJcblxyXG4gICAgLy9BZGQgSW1hZ2VcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIDE1LCA1LCAyNSwgMjApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vSW5mbyBibG9ja1xyXG4gICAgY29uc3QgaW5mb1kgPSAzMDtcclxuICAgIGNvbnN0IGxlZnRNYXJnaW4gPSAxNTtcclxuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSA3O1xyXG4gICAgY29uc3QgaW5mb0xpbmVzID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyIEFuZCBUaW1lOicsIHRoaXMudXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCBmb3JtYXREYXRlKHRoaXMucmVwb3J0RGF0ZSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBQZXJpb2Q6JywgYCR7dGhpcy5mcm9tRGF0ZX0gLSAke3RoaXMudG9EYXRlfWBdXHJcbiAgICBdXHJcblxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIGluZm9MaW5lcy5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCB5ID0gaW5mb1kgKyBpICogbGluZUhlaWdodDtcclxuICAgICAgLy8gRHJhdyBsYWJlbCBpbiBib2xkXHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgbGVmdE1hcmdpbiwgeSk7XHJcblxyXG4gICAgICAvLyBEcmF3IHZhbHVlIGluIG5vcm1hbCBmb250IHJpZ2h0IGFmdGVyIGxhYmVsXHJcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgZG9jLnRleHQodmFsdWUsIGxlZnRNYXJnaW4gKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5maWx0ZXIoY29sID0+XHJcbiAgICAgICEoY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc3JubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc2VyaWFsJykpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFByZXBhcmUgaGVhZGVycyB3aXRoIFNyIE5vXHJcbiAgICBjb25zdCBoZWFkZXJzID0gWydTciBObycsIC4uLmZpbHRlcmVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCEpXTtcclxuXHJcbiAgICBsZXQgUm93czogYW55W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgUm93cy5wdXNoKFt7IGNvbnRlbnQ6IGtleSwgY29sU3BhbjogMTUgfV0pO1xyXG4gICAgICBjb25zdCByb3dzID0gcmVwb3J0cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUm93cy5wdXNoKFtpbmRleCArIDEsIC4uLnJvd0RhdGFdKTtcclxuICAgICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBSb3dzLnB1c2gocm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJlcGFyZSByb3dzIHdpdGggU3IgTm9cclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBkeW5hbWljIGNvbHVtbiBzdHlsZXMgZm9yIGF1dG8td2lkdGhcclxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHt9O1xyXG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiB7XHJcbiAgICAgIGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtblN0eWxlc1syXSA9IHsgY2VsbFdpZHRoOiA0MCB9O1xyXG5cclxuICAgIC8vIFJlbmRlciBUYWJsZVxyXG4gICAgZG9jLmF1dG9UYWJsZSh7XHJcbiAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcclxuICAgICAgYm9keTogUm93cyxcclxuICAgICAgc3RhcnRZOiBpbmZvWSArIGluZm9MaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgNSxcclxuICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgaGVhZFN0eWxlczoge1xyXG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxyXG4gICAgICAgIHRleHRDb2xvcjogMCxcclxuICAgICAgICBmb250U3R5bGU6ICdib2xkJyxcclxuICAgICAgICBmb250U2l6ZTogOSxcclxuICAgICAgICBoYWxpZ246ICdjZW50ZXInXHJcbiAgICAgIH0sXHJcbiAgICAgIGJkeVN0eWxlczoge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLFxyXG4gICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0eWxlczoge1xyXG4gICAgICAgIGNlbGxQYWRkaW5nOiAyLFxyXG4gICAgICAgIG92ZXJmbG93OiAnbGluZWJyZWFrJyxcclxuICAgICAgICBtaW5DZWxsSGVpZ2h0OiA2XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtblN0eWxlczogY29sdW1uU3R5bGVzXHJcbiAgICB9KTtcclxuICAgIGRvYy5zYXZlKFwiQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0LnBkZlwiKVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWwoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQnKTtcclxuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gVGl0bGUgUm93XHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5hZGRSb3coW1wiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIl0pO1xyXG4gICAgdGl0bGVSb3cuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTQgfTtcclxuICAgIHRpdGxlUm93LmhlaWdodCA9IDYwO1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3RpdGxlUm93Lm51bWJlcn06JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgdG90YWxDb2x1bW5zKX0ke3RpdGxlUm93Lm51bWJlcn1gKTtcclxuICAgIC8vQ2VudGVyIGFsaWduIHRoZSB0aXRsZVxyXG4gICAgY29uc3QgbWFzdGVyQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGBBJHt0aXRsZVJvdy5udW1iZXJ9YCk7XHJcbiAgICBtYXN0ZXJDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIC8vIEFkZCBpbWFnZSBpZiBhdmFpbGFibGVcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBQbGFjZSBpbWFnZSBhdCB0b3AtbGVmdCAoZS5nLiwgQTE6QzQpXHJcbiAgICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XHJcbiAgICAgICAgdGw6IHsgY29sOiAwLCByb3c6IDAgfSxcclxuICAgICAgICBleHQ6IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiA1MCB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL01ldGEgRGF0YVxyXG4gICAgY29uc3QgbWV0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyICcsIHRoaXMudXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCBmb3JtYXREYXRlKHRoaXMucmVwb3J0RGF0ZSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBQZXJpb2QnLCBgJHt0aGlzLmZyb21EYXRlfSAtICR7dGhpcy50b0RhdGV9YF1cclxuICAgIF1cclxuXHJcbiAgICBtZXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5hZGRSb3coW2xhYmVsLCB2YWx1ZV0pO1xyXG4gICAgICAvL0JvbGQgdGhlIGtleSBjb2x1bW5cclxuICAgICAgY29uc3QgbGFiZWxDZWxsID0gcm93LmdldENlbGwoMSk7XHJcbiAgICAgIGxhYmVsQ2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICB9KVxyXG4gICAgLy8gRm9yIEVtcHR5IFJvd1xyXG4gICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7XHJcblxyXG4gICAgLy8gQWRkIEhlYWRlciBSb3cgZm9yIERhdGEgVGFibGVcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5hZGRSb3codGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKSk7XHJcbiAgICBoZWFkZXJSb3cuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5jb2x1bW5EZWZzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpKTtcclxuICAgICAgY2VsbC5maWxsID0ge1xyXG4gICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICAgIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBoZWFkZXJSb3cuYWxpZ25tZW50ID0ge1xyXG4gICAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xyXG4gICAgfTtcclxuICAgIGhlYWRlclJvdy5ib3JkZXIgPSB7XHJcbiAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGF0YVN0YXJ0Um93ID0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlciArIDE7XHJcbiAgICBjb25zdCBicmFuY2hSb3dzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleTonLCBrZXkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnUmVwb3J0czonLCByZXBvcnRzKTtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmFkZFJvdyhbYCR7a2V5fWBdKTtcclxuICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMTApO1xyXG4gICAgICBicmFuY2hSb3dzLnB1c2gocm93Lm51bWJlcik7XHJcbiAgICAgIC8vIEFkZCBEYXRhIFJvd3NcclxuICAgICAgcmVwb3J0cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICAgIC8vIEZvcm1hdCBjdXJyZW5jeSBmaWVsZHNcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXFx0ICR7dmFsdWV9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IGRhdGFSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KHJvd0RhdGEpO1xyXG4gICAgICAgIGRhdGFSb3cuYm9yZGVyID0ge1xyXG4gICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXV0byBjb2x1bW4gd2lkdGggT05MWSBiYXNlZCBvbiBkYXRhIHJvd3NcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsQ29sdW1uczsgaSsrKSB7XHJcbiAgICAgIGxldCBtYXhMZW5ndGggPSAxMDtcclxuICAgICAgZm9yIChsZXQgcm93TnVtID0gZGF0YVN0YXJ0Um93OyByb3dOdW0gPD0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlcjsgcm93TnVtKyspIHtcclxuICAgICAgICBpZiAoYnJhbmNoUm93cy5pbmRleE9mKHggPT4geCA9PT0gcm93TnVtKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjZWxsID0gd29ya3NoZWV0LmdldFJvdyhyb3dOdW0pLmdldENlbGwoaSk7XHJcbiAgICAgICAgY29uc3QgdmFsID0gY2VsbC52YWx1ZSA/IGNlbGwudmFsdWUudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgIG1heExlbmd0aCA9IE1hdGgubWF4KG1heExlbmd0aCwgdmFsLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IG1heExlbmd0aCArIDI7XHJcbiAgICB9XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gMjA7XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gMTU7XHJcbiAgICAvLyBFeHBvcnRcclxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgICAgfSlcclxuICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCAnQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0Lnhsc3gnKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBleHBvcnRDU1YoZGF0YTogYW55W10pIHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydwYXlvdXRBbW91bnQnLCAncGF5aW5BbW91bnQnLCAndG90YWxQYXlpbkFtb3VudCcsICd0YXgnLCAndHJhbnNhY3Rpb25Db21taXNzaW9uQW1vdW50J107XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IFtcclxuICAgICAgWydSZXBvcnQgVGl0bGUnLCAnQnJhbmNoIEFjdGl2aXR5IFNlbmQnXSxcclxuICAgICAgWydSZXBvcnQgVGltZScsIGZvcm1hdERhdGUodGhpcy5yZXBvcnREYXRlLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyldXHJcbiAgICAgIC8vIFsnUmVwb3J0IFVzZXInLCB0aGlzLnVzZXJdXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkQ29scyA9IHRoaXMuY29sdW1uRGVmcy5maWx0ZXIoXHJcbiAgICAgIGNvbCA9PlxyXG4gICAgICAgICEoY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpIHx8XHJcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gWydTciBObycsIC4uLmZpbHRlcmVkQ29scy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCEpXTtcclxuXHJcbiAgICBsZXQgUm93czogYW55W11bXSA9IFtdXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgUm93cy5wdXNoKFtrZXldKTtcclxuICAgICAgcmVwb3J0cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByb3dWYWxzID0gZmlsdGVyZWRDb2xzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHYgPSByb3dbY29sLmZpZWxkIV07XHJcbiAgICAgICAgICBpZiAoY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSAmJiB2ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdiA9IHBhcnNlRmxvYXQodikudG9GaXhlZCgzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICd0cmFuc2FjdGlvbk51bWJlcicgfHwgY29sLmhlYWRlck5hbWUgPT09ICdUcmFuc2FjdGlvbiBOdW1iZXInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXFx0ICR7dn1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHYgPz8gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUm93cy5wdXNoKFtpbmRleCArIDEsIC4uLnJvd1ZhbHNdKTtcclxuICAgICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93VmFsc107XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW9hOiBhbnlbXVtdID0gW1xyXG4gICAgICAuLi5tZXRhZGF0YSxcclxuICAgICAgW10sICAgICAgLy8gYmxhbmsgcm93IGZvciBzZXBhcmF0aW9uXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIC4uLlJvd3NcclxuICAgIF07XHJcblxyXG4gICAgLy8gY29udmVydCB0byB3b3Jrc2hlZXQgJiBDU1ZcclxuICAgIGNvbnN0IHdzID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoYW9hKTtcclxuICAgIGNvbnN0IGNzdiA9IFhMU1gudXRpbHMuc2hlZXRfdG9fY3N2KHdzLCB7XHJcbiAgICAgIEZTOiAnLCcsIFJTOiAnXFxuJywgYmxhbmtyb3dzOiBmYWxzZSwgZm9yY2VRdW90ZXM6IGZhbHNlXHJcbiAgICB9IGFzIGFueSk7XHJcblxyXG4gICAgLy8gdHJpZ2dlciBkb3dubG9hZFxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XHJcbiAgICBzYXZlQXMoYmxvYiwgJ0JyYW5jaC1BY3Rpdml0eS1TZW5kLVJlcG9ydC5jc3YnKTtcclxuICB9XHJcblxyXG4gIC8vIHNob3dTdGF0dXMoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gIC8vICAgICB0aGlzLnNob3dTdGF0dXNEcm9wZG93biA9ICF0aGlzLnNob3dTdGF0dXNEcm9wZG93bjtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2VsZWN0U3RhdHVzKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLnN0YXR1cyA9IFtdO1xyXG4gIC8vICAgLy8gdGhpcy5zdGF0dXMgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZWxlY3RlZFN0YXR1c1wiXS52YWx1ZS5zcGxpdChcIixcIik7XHJcbiAgLy8gICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gIC8vICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XHJcbiAgLy8gICAgIHRoaXMubXlTdGF0dXMucHVzaChuZXcgRm9ybUNvbnRyb2wodGFyZ2V0LnZhbHVlKSk7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubXlTdGF0dXMpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgY29uc3QgaW5kZXggPSB0aGlzLm15U3RhdHVzLmNvbnRyb2xzXHJcbiAgLy8gICAgICAgLmZpbmRJbmRleChjdHJsID0+IGN0cmwudmFsdWUgPT09IHRhcmdldC52YWx1ZSk7XHJcbiAgLy8gICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAvLyAgICAgICB0aGlzLm15U3RhdHVzLnJlbW92ZUF0KGluZGV4KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5teVN0YXR1cy5jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICB0aGlzLnN0YXR1cy5wdXNoKHRoaXMubXlTdGF0dXMuY29udHJvbHNbaV0udmFsdWUpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5teVN0YXR1cyk7XHJcbiAgLy8gICB0aGlzLmZvcm0uc2V0Q29udHJvbCgndHJhbnNhY3Rpb25TdGF0dXMnLCBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2wodGFyZ2V0LnZhbHVlKV0pKTtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnNldFZhbHVlKHRoaXMuc3RhdHVzLmpvaW4oXCIsXCIpKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnZhbHVlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNlbGVjdEFsbFN0YXR1cyhldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgdGhpcy5zdGF0dXMgPSBbXTtcclxuICAvLyAgIHRoaXMuc2VsZWN0QWxsID0gIXRoaXMuc2VsZWN0QWxsO1xyXG4gIC8vICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XHJcbiAgLy8gICAgIGZvciAobGV0IHMgb2YgdGhpcy5wYXJhbXM/LnRyYW5zYWN0aW9uU3RhdHVzVHlwZXMpIHtcclxuICAvLyAgICAgICB0aGlzLm15U3RhdHVzLnB1c2gobmV3IEZvcm1Db250cm9sKHMudHJhbnNhY3Rpb25TdGF0dXMpKTtcclxuICAvLyAgICAgICB0aGlzLnN0YXR1cy5wdXNoKHMudHJhbnNhY3Rpb25TdGF0dXMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLm15U3RhdHVzLmNsZWFyKCk7XHJcbiAgLy8gICAgIHRoaXMuc3RhdHVzID0gW11cclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnNldFZhbHVlKHRoaXMuc3RhdHVzLmpvaW4oXCIsXCIpKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnZhbHVlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vQ3VycmVuY3kgRHJvcGRvd25cclxuICAvLyB0b2dnbGVDdXJyZW5jeURyb3Bkb3duKCkge1xyXG4gIC8vICAgdGhpcy5zaG93Q3VycmVuY3kgPSAhdGhpcy5zaG93Q3VycmVuY3k7XHJcbiAgLy8gfVxyXG4gIC8vIHNlbGVjdEN1cnJlbmN5KGN1cnJlbmN5Q29kZTogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ3VycmVuY3lcIl0uc2V0VmFsdWUoY3VycmVuY3lDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd0N1cnJlbmN5ID0gZmFsc2U7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRTZWxlY3RlZEN1cnJlbmN5RGlzcGxheSgpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgY3VycmVuY3kgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ3VycmVuY3lcIl0udmFsdWU7XHJcbiAgLy8gICBpZiAoY3VycmVuY3kgJiYgdGhpcy5wYXJhbXM/LmN1cnJlbmNpZXMpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmN1cnJlbmNpZXNbdGhpcy5wYXJhbXMuY3VycmVuY2llcy5maW5kSW5kZXgoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PSBjdXJyZW5jeSldLmN1cnJlbmN5O1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUN1cnJlbmN5XCJdLnNldFZhbHVlKFwiQWxsXCIpO1xyXG4gIC8vICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vUHJvZHVjdCBEcm9wZG93blxyXG4gIC8vIHRvZ2dsZVByb2R1Y3REcm9wZG93bigpIHtcclxuICAvLyAgIHRoaXMuc2hvd1Byb2R1Y3QgPSAhdGhpcy5zaG93UHJvZHVjdDtcclxuICAvLyB9XHJcbiAgLy8gc2VsZWN0UHJvZHVjdChwcm9kdWN0Q29kZTogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJwcm9kdWN0XCJdLnNldFZhbHVlKHByb2R1Y3RDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkUHJvZHVjdERpc3BsYXkoKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJwcm9kdWN0XCJdLnZhbHVlO1xyXG4gIC8vICAgaWYgKHByb2R1Y3QgJiYgdGhpcy5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc1t0aGlzLnBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlcy5maW5kSW5kZXgocCA9PiBwLnByb2R1Y3RDb2RlID09IHByb2R1Y3QpXS5uYW1lO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicHJvZHVjdFwiXS5zZXRWYWx1ZShcIkFsbFwiKTtcclxuICAvLyAgICAgcmV0dXJuIFwiQWxsXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL1NlbmRDb3VudHJ5IERyb3Bkb3duXHJcbiAgLy8gdG9nZ2xlU2VuZENvdW50cnlEcm9wZG93bigpIHtcclxuICAvLyAgIHRoaXMuc2hvd1NlbmRDb3VudHJ5ID0gIXRoaXMuc2hvd1NlbmRDb3VudHJ5O1xyXG4gIC8vIH1cclxuICAvLyBzZWxlY3RTZW5kQ291bnRyeShjb3VudHJ5Q29kZTogYW55KSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJzZW5kQ291bnRyeVwiXS5zZXRWYWx1ZShjb3VudHJ5Q29kZSk7XHJcbiAgLy8gICB0aGlzLnNob3dTZW5kQ291bnRyeSA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRTZW5kQ291bnRyeURpc3BsYXkoKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZW5kQ291bnRyeVwiXS52YWx1ZTtcclxuICAvLyAgIGlmIChjb3VudHJ5ICYmIHRoaXMucGFyYW1zPy5jb3VudHJpZXMpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmNvdW50cmllc1t0aGlzLnBhcmFtcy5jb3VudHJpZXMuZmluZEluZGV4KGMgPT4gYy5jb3VudHJ5Q29kZSA9PSBjb3VudHJ5KV0uY291bnRyeTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbmRDb3VudHJ5XCJdLnNldFZhbHVlKFwiQWxsXCIpO1xyXG4gIC8vICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vUmVjZWl2ZUNvdW50cnkgRHJvcGRvd25cclxuICAvLyB0b2dnbGVSZWNlaXZlQ291bnRyeSgpIHtcclxuICAvLyAgIHRoaXMuc2hvd1JlY2VpdmVDb3VudHJ5ID0gIXRoaXMuc2hvd1JlY2VpdmVDb3VudHJ5O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2VsZWN0UmVjZWl2ZUNvdW50cnkoY291bnRyeUNvZGU6IHN0cmluZykge1xyXG4gIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUNvdW50cnlcIl0uc2V0VmFsdWUoY291bnRyeUNvZGUpO1xyXG4gIC8vICAgdGhpcy5zaG93UmVjZWl2ZUNvdW50cnkgPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkUmVjZWl2ZUNvdW50cnlEaXNwbGF5KCk6IHN0cmluZyB7XHJcbiAgLy8gICBjb25zdCBjb3VudHJ5ID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUNvdW50cnlcIl0udmFsdWU7XHJcbiAgLy8gICBpZiAoY291bnRyeSAmJiB0aGlzLnBhcmFtcz8uY291bnRyaWVzKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnBhcmFtcy5jb3VudHJpZXNbdGhpcy5wYXJhbXMuY291bnRyaWVzLmZpbmRJbmRleChjID0+IGMuY291bnRyeUNvZGUgPT0gY291bnRyeSldLmNvdW50cnk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ291bnRyeVwiXS5zZXRWYWx1ZShcIkFsbFwiKTtcclxuICAvLyAgICAgcmV0dXJuIFwiQWxsXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL0NsaWVudHMgRHJvcGRvd25cclxuICAvLyB0b2dnbGVDbGllbnRzKCkge1xyXG4gIC8vICAgdGhpcy5zaG93Q2xpZW50cyA9ICF0aGlzLnNob3dDbGllbnRzO1xyXG4gIC8vIH1cclxuXHJcbiAgc2VsZWN0Q2xpZW50KGNsaWVudDogYW55KSB7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbXCJjbGllbnRcIl0uc2V0VmFsdWUoY2xpZW50KTtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMub25BZ2VudFNlbGVjdGVkKGNsaWVudCk7XHJcbiAgICB0aGlzLnNob3dDbGllbnRzID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsaWVudFNlbGVjdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkQ2xpZW50KCk6IHN0cmluZyB7XHJcbiAgLy8gICBsZXQgY2xpZW50ID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiY2xpZW50XCJdLnZhbHVlO1xyXG4gIC8vICAgLy8gaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Zvc3NpbHVzZXJuYW1lJykpIHtcclxuXHJcbiAgLy8gICAvLyB9IGVsc2Uge1xyXG4gIC8vICAgLy8gICBpZighY2xpZW50ICYmIHRoaXMuY2xpZW50cyl7XHJcbiAgLy8gICAvLyAgICAgdGhpcy5zZWxlY3RDbGllbnQodGhpcy5jbGllbnRzWzBdLmNvZGUpO1xyXG4gIC8vICAgLy8gICB9XHJcbiAgLy8gICAvLyB9XHJcbiAgLy8gICBpZiAoY2xpZW50KSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmNsaWVudHNbdGhpcy5jbGllbnRzLmZpbmRJbmRleChjID0+IGMuY29kZSA9PSBjbGllbnQpXS5hZ2VudDtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBcIlNlbGVjdCBDbGllbnRcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vQnJhbmNoIERyb3Bkb3duXHJcbiAgLy8gdG9nZ2xlQnJhbmNoKCkge1xyXG4gIC8vICAgdGhpcy5zaG93QnJhbmNoID0gIXRoaXMuc2hvd0JyYW5jaDtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNlbGVjdEJyYW5jaChicmFuY2hDb2RlOiBhbnkpIHtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS5zZXRWYWx1ZShicmFuY2hDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd0JyYW5jaCA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRCcmFuY2goKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IGJyYW5jaCA9IHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS52YWx1ZTtcclxuICAvLyAgIGlmIChicmFuY2ggJiYgdGhpcy5jbGllbnRCcmFuY2hlcykge1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy5jbGllbnRCcmFuY2hlc1t0aGlzLmNsaWVudEJyYW5jaGVzLmZpbmRJbmRleChiID0+IGIuYnJhbmNoQ29kZSA9PSBicmFuY2gpXS5idXNpbmVzc1BhcnRuZXJCcmFuY2g7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gXCJTZWxlY3QgQnJhbmNoXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL1N0YXR1cyBEcm9wZG93blxyXG4gIC8vIHRvZ2dsZVN0YXR1c0Ryb3Bkb3duKCkge1xyXG4gIC8vICAgdGhpcy5zaG93U3RhdHVzRHJvcGRvd24gPSAhdGhpcy5zaG93U3RhdHVzRHJvcGRvd247XHJcbiAgLy8gfVxyXG5cclxuICAvLyBjbGVhckVycm9yKCkge1xyXG4gIC8vICAgdGhpcy5zaG93RXJyb3IgPSBmYWxzZTtcclxuICAvLyB9XHJcbiAgLy8gY2xlYXJNZXNzYWdlKCkge1xyXG4gIC8vICAgdGhpcy5zaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZGF0ZUNoYW5nZSh0eXBlOiBzdHJpbmcpIHtcclxuICAvLyAgIGlmICh0eXBlID09PSBcImZyb21EYXRlXCIpIHtcclxuICAvLyAgICAgdGhpcy5kaXNhYmxlVG9EYXRlID0gdHJ1ZTtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0uZW5hYmxlKCk7XHJcbiAgLy8gICAgIC8vIHRoaXMuZm9ybS5jb250cm9sc1tcImZyb21EYXRlXCJdLnNldFZhbHVlKHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbXCJmcm9tRGF0ZVwiXS52YWx1ZSkpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKHR5cGUgPT09IFwidG9EYXRlXCIpIHtcclxuICAvLyAgICAgLy8gdGhpcy5mb3JtLmNvbnRyb2xzW1widG9EYXRlXCJdLnNldFZhbHVlKHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbXCJ0b0RhdGVcIl0udmFsdWUpKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBmb3JtYXREYXRlKHBhcmFtczogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBmb3JtYXREYXRlKG5ldyBEYXRlKHBhcmFtcy52YWx1ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZUJyYW5jaFBhZ2luYXRpb24oYnJhbmNoSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVCcmFuY2ggPSBicmFuY2hJbmRleDtcclxuICAgIHRoaXMuc2hvd1JhbmdlID0gIXRoaXMuc2hvd1JhbmdlO1xyXG4gIH1cclxuXHJcbiAgY3VycmVuY3lGb3JtYXR0ZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsIHx8IHBhcmFtcy52YWx1ZSA9PT0gJycpIHJldHVybiAnJztcclxuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQocGFyYW1zLnZhbHVlKTtcclxuICAgIGlmIChpc05hTihudW1iZXIpKSByZXR1cm4gcGFyYW1zLnZhbHVlO1xyXG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMyxcclxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vRGF0ZSBQaWNsZXJcclxuICAvLyBvbkRhdGVDaGFuZ2VGcm9tRGF0ZShldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICBjb25zdCBzZWxlY3RlZERhdGUgPSBpbnB1dC52YWx1ZTtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcImZyb21EYXRlXCJdLnNldFZhbHVlKGZvcm1hdERhdGUobmV3IERhdGUoc2VsZWN0ZWREYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkRhdGVDaGFuZ2VUb0RhdGUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJ0b0RhdGVcIl0uc2V0VmFsdWUoZm9ybWF0RGF0ZShuZXcgRGF0ZShzZWxlY3RlZERhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG9uRW50ZXJLZXkoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBrZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAvLyAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgLy8gICBpZiAoa2V5Ym9hcmRFdmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gIC8vICAgICBrZXlib2FyZEV2ZW50LnRhcmdldC5ibHVyKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBmcm9tRGF0ZUNoYW5nZSgpIHtcclxuICAvLyAgIGNvbnN0IG1zUGVyRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcclxuICAvLyAgIGNvbnN0IGZkID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgLy8gICBjb25zdCB0ZCA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAvLyAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShmZCk7XHJcbiAgLy8gICBjb25zdCB0byA9IG5ldyBEYXRlKHRkKTtcclxuICAvLyAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgLy8gICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgLy8gICAgIC8vIFNldCB0b0RhdGUgdG8gZnJvbURhdGUgKyAzMSBkYXlzXHJcbiAgLy8gICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShmcm9tLmdldFRpbWUoKSArIDMxICogbXNQZXJEYXkpO1xyXG4gIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3RvRGF0ZSddPy5wYXRjaFZhbHVlKGQpO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vIHRvRGF0ZUNoYW5nZSgpIHtcclxuICAvLyAgIGNvbnN0IG1zUGVyRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcclxuICAvLyAgIGNvbnN0IGZkID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgLy8gICBjb25zdCB0ZCA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAvLyAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShmZCk7XHJcbiAgLy8gICBjb25zdCB0byA9IG5ldyBEYXRlKHRkKTtcclxuICAvLyAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgLy8gICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgLy8gICAgIC8vIFNldCB0b0RhdGUgdG8gZnJvbURhdGUgKyAzMSBkYXlzXHJcbiAgLy8gICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShmcm9tLmdldFRpbWUoKSArIDMxICogbXNQZXJEYXkpXHJcbiAgLy8gICAgIHRoaXMuZm9ybS5jb250cm9sc1snZnJvbURhdGUnXT8ucGF0Y2hWYWx1ZShkKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICB0aGlzLmZvcm0uZ2V0KCdmcm9tRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGZyb21EYXRlU3RyID0+IHtcclxuICAgIGNvbnN0IHRvRGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCd0b0RhdGUnKTtcclxuICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgaWYgKCFmcm9tRGF0ZVN0ciB8fCAhdG9EYXRlU3RyKSByZXR1cm47XHJcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlU3RyKTtcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiBcclxuICAgIGNvbnN0IG1heFRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcclxuICAgIG1heFRvRGF0ZT8uc2V0RGF0ZShmcm9tRGF0ZS5nZXREYXRlKCkgKyAzMSk7XHJcbiAgICBpZiAodG9EYXRlID4gbWF4VG9EYXRlKSB7XHJcbiAgICAgIHRvRGF0ZUNvbnRyb2w/LnBhdGNoVmFsdWUobWF4VG9EYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdKTtcclxuICAgIH1cclxuICB9KTtcclxuIFxyXG4gIHRoaXMuZm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHRvRGF0ZVN0ciA9PiB7XHJcbiAgICBjb25zdCBmcm9tRGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdmcm9tRGF0ZScpO1xyXG4gICAgY29uc3QgZnJvbURhdGVTdHIgPSBmcm9tRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgaWYgKCF0b0RhdGVTdHIgfHwgIWZyb21EYXRlU3RyKSByZXR1cm47XHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0b0RhdGVTdHIpO1xyXG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiBcclxuICAgIGNvbnN0IG1pbkZyb21EYXRlID0gbmV3IERhdGUodG9EYXRlKTtcclxuICAgIG1pbkZyb21EYXRlPy5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgLSAzMSk7XHJcbiAgICBpZiAoZnJvbURhdGUgPCBtaW5Gcm9tRGF0ZSkge1xyXG4gICAgICBmcm9tRGF0ZUNvbnRyb2w/LnBhdGNoVmFsdWUobWluRnJvbURhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5wcml2YXRlIHN1YnNjcmliZVRvQ2xpZW50Q2hhbmdlKCk6IHZvaWQge1xyXG4gIHRoaXMuZm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICBpZih2YWwgPT09IG51bGwpe1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuLy8gc2VhcmNoQ2xpZW50KGV2ZW50OkV2ZW50KXtcclxuLy8gICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuLy8gICBsZXQgc2VhcmNoVGV4dCA9IHRhcmdldC52YWx1ZS50cmltKCk7XHJcbi8vICAgaWYoc2VhcmNoVGV4dC5sZW5ndGg9PTApe1xyXG4vLyAgICAgdGhpcy5jbGllbnRzID0gWy4uLnRoaXMuY2xpZW50c0RhdGFdO1xyXG4vLyAgIH1cclxuLy8gICB0aGlzLmNsaWVudHMgPSB0aGlzLmNsaWVudHNEYXRhLmZpbHRlcigoY2xpZW50KT0+e1xyXG4vLyAgICAgICBjbGllbnQ/LmFnZW50Py5pbmNsdWRlcyhzZWFyY2hUZXh0KTtcclxuLy8gICB9KVxyXG4vLyB9XHJcblxyXG5vbkNsaWVudFNlbGVjdGVkKCl7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsKT0+e1xyXG4gICAgICB2YWwgPSB0aGlzLmZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIHRoaXMub25BZ2VudFNlbGVjdGVkKHZhbCk7XHJcbiAgICB9KVxyXG4gICAgICBcclxuICB9XHJcblxyXG59XHJcblxyXG4iLCI8c2VjdGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiQnJlYWRjcnVtYlwiPlxyXG4gICAgPGgxPlJlcG9ydHM8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJCcmVhZENydW1iQXJyb3dcIj48L3NwYW4+XHJcbiAgICA8aDIgY2xhc3M9XCJCcmVhZENydW1iQWN0aXZlXCI+QnJhbmNoIEFjdGl2aXR5IFNlbmQ8L2gyPlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cInJlcXVlc3QtcGFyYW1zXCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuICAgIDx0YWJsZT5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAzNiU7Ym9yZGVyLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgcm93LWNsc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cImNsaWVudFwiPkNsaWVudDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsaWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY2xpZW50c1wiIGJpbmRMYWJlbD1cImFnZW50XCIgYmluZFZhbHVlPVwiY29kZVwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cInt7IGl0ZW0uYWdlbnQgfX1cIiBjbGFzcz1cIm5nLW9wdGlvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uYWdlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1vcHRpb24gKm5nRm9yPVwibGV0IGNsaWVudCBvZiBjbGllbnRzXCIgW3ZhbHVlXT1cImNsaWVudC5jb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjbGllbnQuYWdlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCI+RnJvbTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiBEYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGlucHV0Ym94XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgI2Zyb21EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgbmFtZT1cImZyb21EYXRlXCIgaWQ9XCJmcm9tRGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cImZyb21EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgaWQ9XCJmcm9tZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZnJvbURhdGVcIj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWRhdGFcIj5UbzxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiBEYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGlucHV0Ym94XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCBpZD1cInRvZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICN0b0RhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBuYW1lPVwidG9EYXRlXCIgaWQ9XCJ0b0RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0b0RhdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ1dHRvbiBjYWxcIiAoY2xpY2spPVwidG9EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1yZXBvcnRcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cImJyYW5jaFwiPkJyYW5jaDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsaWVudEJyYW5jaGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImNsaWVudEJyYW5jaGVzXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCIgYmluZFZhbHVlPVwiYnJhbmNoQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmNoXCIgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cInt7IGl0ZW0uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmJ1c2luZXNzUGFydG5lckJyYW5jaCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiPiBTZW5kPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+IENvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicGFyYW1zLmNvdW50cmllc1wiIGJpbmRMYWJlbD1cImNvdW50cnlcIiBiaW5kVmFsdWU9XCJjb3VudHJ5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VuZENvdW50cnlcIiBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5jb3VudHJ5IH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmNvdW50cnkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cInNlbmRDb3VudHJ5XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBwYXJhbXMuY291bnRyaWVzXCIgW3ZhbHVlXT1cImNvdW50cnkuY291bnRyeUNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNvdW50cnkuY291bnRyeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cInJlY2VpdmVDb3VudHJ5XCI+IFJlY2VpdmU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgQ291bnRyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMuY291bnRyaWVzXCIgYmluZExhYmVsPVwiY291bnRyeVwiIGJpbmRWYWx1ZT1cImNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ291bnRyeVwiIHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9XCJ7eyBpdGVtLmNvdW50cnkgfX1cIiBjbGFzcz1cIm5nLW9wdGlvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY291bnRyeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjZWl2ZUNvdW50cnlcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIHBhcmFtcy5jb3VudHJpZXNcIiBbdmFsdWVdPVwiY291bnRyeS5jb3VudHJ5Q29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY291bnRyeS5jb3VudHJ5IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwidHJhbnNhY3Rpb25TdGF0dXNcIj5UcmFuc2FjdGlvbiBTdGF0dXMgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicGFyYW1zLnRyYW5zYWN0aW9uU3RhdHVzVHlwZXNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kTGFiZWw9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIGJpbmRWYWx1ZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBpdGVtc1wiIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpdGVtJC5zZWxlY3RlZFwiIC8+IHt7IGl0ZW0udHJhbnNhY3Rpb25TdGF0dXMgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwicHJvZHVjdFwiPlByb2R1Y3Q8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMudHJhbnNhY3Rpb25Qcm9kdWN0VHlwZXNcIiBiaW5kTGFiZWw9XCJuYW1lXCIgYmluZFZhbHVlPVwicHJvZHVjdENvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdFwiIHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5uYW1lIH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc1wiIFt2YWx1ZV09XCJwcm9kdWN0LnByb2R1Y3RDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwicmVjZWl2ZUN1cnJlbmN5XCI+UmVjZWl2ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICBDdXJyZW5jeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMuY3VycmVuY2llc1wiIGJpbmRMYWJlbD1cImN1cnJlbmN5XCIgYmluZFZhbHVlPVwiY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ3VycmVuY3lcIiBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5jdXJyZW5jeSB9fVwiIGNsYXNzPVwibmctb3B0aW9uLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjZWl2ZUN1cnJlbmN5XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiAqbmdGb3I9XCJsZXQgY3VycmVuY3kgb2YgcGFyYW1zLmN1cnJlbmNpZXNcIiBbdmFsdWVdPVwiY3VycmVuY3kuY3VycmVuY3lDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW5jeS5jdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZm9ybT5cclxuPC9zZWN0aW9uPlxyXG5cclxuXHJcblxyXG48YXBwLWxvYWRlciBjbGFzcz1cIlwiICpuZ0lmPVwibG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtdC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNob3dFcnJvclwiPlxyXG4gIDxzcGFuPnt7IGVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cclxuPC9kaXY+XHJcblxyXG48c2VjdGlvbiAqbmdJZj1cInNob3dSZXBvcnRcIiBjbGFzcz1cIm15LTJcIj5cclxuICA8ZGl2IGNsYXNzPVwidGl0bGUgbWItM1wiPlxyXG4gICAgQnJhbmNoIEFjdGl2aXR5IFNlbmRcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMiBmbGV4LWNvbnRhaW5lclwiPlxyXG4gICAgPHRib2R5PlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGFibCBtZXRhLXRkXCI+UmVwb3J0IFVzZXI6PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJweC0zIG1ldGEtdGRcIj48c3BhbiBjbGFzcz1cImluZm9cIj57e3VzZXJ9fTwvc3Bhbj48L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGFibCBtZXRhLXRkXCI+UmVwb3J0IFRpbWU6PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJweC0zIG1ldGEtdGRcIj48c3BhbiBjbGFzcz1cImluZm9cIj57eyByZXBvcnREYXRlIH19PC9zcGFuPjwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEluZm8gTWVzc2FnZSAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICpuZ0lmPVwic2hvd01lc3NhZ2VcIj5cclxuICAgIDxzcGFuPjxzdHJvbmc+TWVzc2FnZTo8L3N0cm9uZz4ge3sgbWVzc2FnZSB9fTwvc3Bhbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImNsZWFyTWVzc2FnZSgpXCI+PC9idXR0b24+XHJcbjwvZGl2PiAtLT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFkZGVkLWZ1bmN0aW9uc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaEJveFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBuYW1lPVwic2VhcmNoVGV4dFwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2goKVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIHNlYXJjaC1idG5cIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxyXG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9TZWFyY2guc3ZnXCIgYWx0PVwiU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtaWNvblwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1vcHRpb25zXCI+XHJcbiAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGNsYXNzPVwiZXhwb3J0LXNlbGVjdG9yXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEV4cG9ydE9wdGlvblwiXHJcbiAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxuZy1vcHRpb24gKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBleHBvcnRGb3JtYXRzXCIgW3ZhbHVlXT1cImZvcm1hdC5jb2RlXCI+XHJcbiAgICAgICAgICB7eyBmb3JtYXQuZm9ybWF0TmFtZSB9fVxyXG4gICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwib3B0LWNsc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFeHBvcnRPcHRpb25cIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhjZWxcIiBzZWxlY3RlZD5FeGNlbDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJwZGZcIj5QREY8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3N2XCI+Q1NWPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVwb3J0XCIgKGNsaWNrKT1cImhhbmRsZUV4cG9ydCgpXCI+RXhwb3J0PC9idXR0b24+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ib3hcIj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIiBbYWN0aXZlSWRzXT1cIidwYW5lbC0wJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERhdGEgfCBrZXl2YWx1ZTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bmdiLXBhbmVsICpuZ0lmPVwiaXRlbS52YWx1ZS5sZW5ndGggPiAwXCIgW2lkXT1cIidwYW5lbC0nICsgaVwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZSBzdHlsZT1cImhlaWdodDogMTAlO1wiPlxyXG4gICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuMjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAycHggMDtjb2xvcjogIzBjNjNlNDtcIj57e1xyXG4gICAgICAgICAgICBpdGVtLmtleVxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIG15R3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAzNzBweDtcIlxyXG4gICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cIml0ZW0udmFsdWVcIiBbcm93SGVpZ2h0XT1cIjIwXCJcclxuICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCIyMlwiIFtncmlkT3B0aW9uc109XCJ7XHJcbiAgICAgICAgICAgICAgc3VwcHJlc3NIb3Jpem9udGFsU2Nyb2xsOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHNjcm9sbGJhcldpZHRoOiAwXHJcbiAgICAgICAgICAgIH1cIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCIgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxyXG4gICAgICAgICAgICAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGduXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tbW9iaWxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24gbmd4LXJhbmdlLWRyb3Bkb3duXCIgW2NsYXNzLm5neC1hY3RpdmVdPVwic2hvd1JhbmdlICYmIGFjdGl2ZUJyYW5jaCA9PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyYW5nZXMuaW5kZXhPZihwYWdpbmF0aW9uQXJyYXlbaV0pICE9IC0xOyBlbHNlIHNob3dBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdpbmF0aW9uQXJyYXlbaV0gfX0gJm5ic3A7ICZuYnNwOzxpIGNsYXNzPVwibmd4LWljb24gbmd4LWljb24tYXJyb3ctZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAmbmJzcDsgJm5ic3A7PGkgY2xhc3M9XCJuZ3gtaWNvbiBuZ3gtaWNvbi1hcnJvdy1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWxhYmVsXCI+RW50cmllcyBwZXIgcGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZ3gtbWVudVwiICpuZ0lmPVwic2hvd1JhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuZ3gtYy1oYW5kIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAqbmdGb3I9XCJsZXQgbGltaXQgb2YgcmFuZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUxpbWl0KGxpbWl0LGksaXRlbS5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxpbWl0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8L25nYi1wYW5lbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmdiLWFjY29yZGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJub0RhdGFGb3VuZFwiPlxyXG4gICAgTm8gRGF0YSBGb3VuZFxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|