Blame view

esm5/lib/upload-attachment/upload-attachment.component.js 58.9 KB
75f29219   Anan Sangthongtum   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { AppConfigService } from '../app-config/app-config.service';
import { Http } from '@angular/http';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { NgForm } from '@angular/forms';
import { HttpClient, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import QrCode from 'qrcode-reader';
import * as _ from 'lodash';
var UploadAttachmentComponent = /** @class */ (function () {
    function UploadAttachmentComponent(appConfigService, request, common, http, _http) {
        var _this = this;
        this.appConfigService = appConfigService;
        this.request = request;
        this.common = common;
        this.http = http;
        this._http = _http;
        this.upLoadType = [
            { title: "File", type: 1 },
            // {title:"Scan",type:2},
            { title: "Link", type: 3 },
            { title: "QR Code", type: 4 }
        ];
        this.systemId = '0';
        this.RelatedAgency = 'SOC';
        this.RecordId = '0';
        this.Subject = '-';
        this.TypeId = '0';
        this.onlyImage = false;
        this.uploaded = new EventEmitter();
        // @ViewChild('myModal') myModal;
        this.fileList = [];
        this.fileNameLink = '';
        this.fileNameLinkError = '';
        this.QrCodeFileName = '';
        this.fileNameQr = '';
        this.fileNameLinkQr = '';
        this.fileNameQrError = '';
        this.filter = {};
        this.uploadHeaders = {
            "Authorization": "Basic " + btoa("APPSOC:123456")
        };
        this.isLoading = false;
        this.isDisabled = false;
        this.createAuthorizationHeader = function (headers) {
        };
        this.beforeUpload = function (file, _fileList) {
            return new Observable(function (observer) {
                /** @type {?} */
                var whitelist = [
                    'application/pdf',
                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                    'application/vnd.ms-excel',
                    'application/vnd.msexcel',
                    'application/csv',
                    'text/csv',
                    'application/msword',
                    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    'application/vnd.ms-powerpoint',
                    'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
                    'application/vnd.openxmlformats-officedocument.presentationml.presentation',
                    'text/plain',
                    'text/comma-separated-values',
                    'text/anytext',
                    'image/png',
                    'image/jpeg',
                    'image/gif',
                    'image/bmp'
                ];
                /** @type {?} */
                var isWhitelist = (file && whitelist.indexOf(file.type) > -1);
                if (!isWhitelist) {
                    setTimeout(function () {
                        _this.fileList = [{
                                uid: '999',
                                name: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                status: 'error',
                                response: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                url: null
                            }];
                    }, 50);
                    observer.complete();
                    return;
                }
                /** @type {?} */
                var isLt30M = /** @type {?} */ ((file.size)) / 1024 / 1024 < 30;
                if (!isLt30M) {
                    _this.fileList = [{
                            uid: '999',
                            name: 'File must smaller than 30MB!',
                            status: 'error',
                            response: 'File must smaller than 30MB!',
                            url: null
                        }];
                    observer.complete();
                    return;
                }
                observer.next(isWhitelist && isLt30M);
                observer.complete();
            });
        };
        this.customReq = function (item) {
            /** @type {?} */
            var formData = new FormData();
            // tslint:disable-next-line:no-any
            formData.append('FileData', /** @type {?} */ (item.file));
            formData.append('SystemId', '' + _this.systemId);
            formData.append('RelatedAgency', _this.RelatedAgency);
            formData.append('RecordId', _this.RecordId);
            formData.append('Subject', _this.Subject);
            formData.append('TypeId', _this.TypeId);
            /** @type {?} */
            var headers = new HttpHeaders();
            headers = headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            /** @type {?} */
            var req = new HttpRequest('POST', item.action, formData, {
                reportProgress: true,
                headers: headers
            });
            // req.headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            return _this.http.request(req).subscribe(function (event) {
                if (event.type === HttpEventType.UploadProgress) {
                    if (event.total > 0) {
                        (/** @type {?} */ (event)).percent = event.loaded / event.total * 100;
                    }
                    // console.log("onProgress", event , this.fileList);
                    item.onProgress(event, item.file);
                }
                else if (event instanceof HttpResponse) {
                    // console.log("event.body", event.body , this.fileList);
                    if (_this.fileList && _this.fileList.length > 1) {
                        _this.fileList = [_this.fileList[_this.fileList.length - 1]];
                    }
                    // let res = JSON.parse(event.body);
                    // this.isDisabled = true;
                    // let res = JSON.parse(event.body);
                    // this.isDisabled = true;
                    _this.isDisabled = false;
                    _this.uploaded.emit(event.body);
                    item.onSuccess(event.body, item.file, event);
                }
            }, function (err) {
                console.log(err);
                item.onError(err, item.file);
            });
        };
        this.config = appConfigService.getConfig();
        this.url = _.get(this.config, 'apiServers.alfresco.url') || "https://portal-uat.soc.go.th/api/mfec/Alfresco";
        this.uploadUrl = _.get(this.config, 'apiServers.alfresco.uploadUrl') || 'https://portal-uat.soc.go.th/microservice-api/gen-processed-file/upload-link-server';
        // || "http://127.0.0.1:5500/microservice-api/gen-processed-file/upload-link-server";
    }
    /**
     * @return {?}
     */
    UploadAttachmentComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        var _this = this;
        console.log('form', this.form);
        this.qr = new QrCode();
        this.qr.callback = function (err, result) {
            console.log('callback');
            _this.fileNameQrError = '';
            /** @type {?} */
            var span = document.querySelector('span') || document.createElement('span');
            if (result) {
                console.log(result.result);
                if (result.result) {
                    _this.fileNameLinkQr = result.result;
                    _this.uploadLinkQr();
                }
                // span.textContent = 'view console';
            }
            else {
                // span.textContent = 'Error! See error message in console!';
                console.error(err);
                _this.fileNameQrError = _this.QrCodeFileName;
                _this.QrCodeFileName = '';
            }
            // preview.appendChild(span);
        };
    };
    /**
     * @return {?}
     */
    UploadAttachmentComponent.prototype.uploadLinkQr = /**
     * @return {?}
     */
    function () {
        var _this = this;
        this.isLoading = true;
        this.fileNameQrError = '';
        this._http.post(this.uploadUrl, {
            SystemId: '' + this.systemId,
            RelatedAgency: this.RelatedAgency,
            RecordId: this.RecordId,
            Subject: this.Subject,
            TypeId: this.TypeId,
            link: this.fileNameLinkQr
        }).map(function (res) {
            return res.json();
        })
            .toPromise().then(function (res) {
            console.log(res);
            _this.isLoading = false;
            if (res.resultCode === 20000 && res.data && res.data.file) {
                _this.fileNameLinkQr = '';
                // this.isDisabled = true;
                // this.isDisabled = true;
                _this.isDisabled = false;
                console.log('res.data', res.data.file);
                _this.fileNameQr = res.data.file.fileName;
                _this.uploaded.emit(res.data.file);
                _this.fileNameLink = '';
                _this.fileNameLinkError = '';
            }
            else {
                _this.fileNameQrError = _this.fileNameLinkQr;
            }
        }).catch(function (err) {
            _this.uploaded.emit({});
            _this.isLoading = false;
            _this.fileNameQrError = _this.fileNameLinkQr;
            console.log(err);
        });
    };
    /**
     * @return {?}
     */
    UploadAttachmentComponent.prototype.btnUpload = /**
     * @return {?}
     */
    function () {
        var _this = this;
        this.isLoading = true;
        this.fileNameLinkError = '';
        this._http.post(this.uploadUrl, {
            SystemId: '' + this.systemId,
            RelatedAgency: this.RelatedAgency,
            RecordId: this.RecordId,
            Subject: this.Subject,
            TypeId: this.TypeId,
            link: this.filter.link
        }).map(function (res) {
            return res.json();
        })
            .toPromise().then(function (res) {
            console.log(res);
            _this.isLoading = false;
            if (res.resultCode === 20000 && res.data && res.data.file) {
                _this.filter = {};
                // this.isDisabled = true;
                // this.isDisabled = true;
                _this.isDisabled = false;
                console.log('res.data', res.data.file);
                _this.fileNameLink = res.data.file.fileName;
                _this.uploaded.emit(res.data.file);
                _this.QrCodeFileName = '';
                _this.fileNameQr = '';
                _this.fileNameLinkQr = '';
                _this.fileNameQrError = '';
            }
            else {
                _this.fileNameLinkError = _this.filter.link;
            }
        }).catch(function (err) {
            _this.uploaded.emit({});
            _this.isLoading = false;
            _this.fileNameLinkError = _this.filter.link;
            console.log(err);
        });
    };
    /**
     * @return {?}
     */
    UploadAttachmentComponent.prototype.onQrCodeChange = /**
     * @return {?}
     */
    function () {
        /** @type {?} */
        var fullPath = document.getElementById('file-upload')['value'];
        if (fullPath) {
            /** @type {?} */
            var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
            /** @type {?} */
            var filename = fullPath.substring(startIndex);
            if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
                filename = filename.substring(1);
            }
            this.QrCodeFileName = filename;
        }
        else {
            this.QrCodeFileName = '';
        }
        this.fileNameLinkQr = '';
        /** @type {?} */
        var upload = document.getElementById('file-upload');
        /** @type {?} */
        var preview = document.getElementById('preview');
        /** @type {?} */
        var files_ = document.getElementById('file-upload')['files'];
        // console.log('files_',files_)
        if (files_) {
            var _loop_1 = function () {
                file = files_[i];
                imageType = /^image\//;
                if (!imageType.test(file.type)) {
                    this_1.QrCodeFileName = '';
                    this_1.fileNameQrError = 'File type not valid';
                    console.log('File type not valid');
                }
                else {
                    // Read file
                    reader = new FileReader();
                    /** @type {?} */
                    var self_1 = this_1;
                    reader.addEventListener('load', function () {
                        /** @type {?} */
                        var img = document.querySelector('img') || document.createElement('img');
                        img.src = this.result;
                        // preview.appendChild(img);
                        // Analyse code
                        // preview.appendChild(img);
                        // Analyse code
                        self_1.qr.decode(this.result);
                    }.bind(reader), false);
                    reader.readAsDataURL(file);
                }
            };
            var this_1 = this, file, imageType, reader;
            for (var i = 0; i < files_.length; i++) {
                _loop_1();
            }
        }
        // console.log("onQrCodeChange",jsqrcode)
    };
    /**
     * @param {?} file
     * @return {?}
     */
    UploadAttachmentComponent.prototype.onUploaded = /**
     * @param {?} file
     * @return {?}
     */
    function (file) {
        console.log("file", file);
        /** @type {?} */
        var res = JSON.parse(file.request.response);
        this.uploaded.emit(res);
    };
    /**
     * @param {?} e
     * @return {?}
     */
    UploadAttachmentComponent.prototype.onSelected = /**
     * @param {?} e
     * @return {?}
     */
    function (e) {
        console.log("e", e);
        console.log('form', this.form);
        this.form.ngSubmit.emit();
    };
    /**
     * @param {?} data
     * @return {?}
     */
    UploadAttachmentComponent.prototype.onChange = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        data.fileList = [data.file];
        // console.log("onChange",data);
        if (data.fileList === 0) {
            this.isDisabled = false;
        }
    };
    /**
     * @return {?}
     */
    UploadAttachmentComponent.prototype.clearValue = /**
     * @return {?}
     */
    function () {
        this.isDisabled = false;
        console.log("clearValue");
        this.fileList = [];
        this.fileNameLink = '';
        this.fileNameLinkError = '';
        this.QrCodeFileName = '';
        this.fileNameQr = '';
        this.fileNameLinkQr = '';
        this.fileNameQrError = '';
    };
    UploadAttachmentComponent.decorators = [
        { type: Component, args: [{
                    selector: 'upload-attachment',
                    template: "<!--<p-tabView>-->\n    <!--<p-tabPanel header=\"File\">-->\n        <!--<dx-file-uploader selectButtonText=\"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E1F\u0E25\u0E4C\" labelText=\"\" accept=\"*\" uploadMode=\"useForm\" uploadMethod=\"POST\"-->\n                          <!--multiple=\"true\" uploadMode=\"instantly\" labelText=\"\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48\" uploadUrl=\"https://filemanager-dot-smartrms-api.appspot.com/api/http/upload\"-->\n        <!--&gt;-->\n        <!--</dx-file-uploader>-->\n    <!--</p-tabPanel>-->\n    <!--<p-tabPanel header=\"Link\">-->\n        <!--Content 2-->\n    <!--</p-tabPanel>-->\n    <!--<p-tabPanel header=\"QR Code\">-->\n        <!--Content 3-->\n    <!--</p-tabPanel>-->\n<!--</p-tabView>-->\n<!-- [disabled]=\"isDisabled\" -->\n<dx-tab-panel\n        #tabPanel\n        [items]=\"upLoadType\"\n        [selectedIndex]=\"0\"\n        [loop]=\"false\"\n        [animationEnabled]=\"false\"\n        [swipeEnabled]=\"false\"\n        itemTemplate=\"itemTemplate\"\n>\n    <!--<div *dxTemplate=\"let type of upLoadType\">-->\n        <!--<span>{{type.name.toUpperCase()}}</span>-->\n    <!--</div>-->\n    <div *dxTemplate=\"let item of 'itemTemplate'\">\n        <div class=\"tabpanel-item\">\n            <div *ngIf=\"item.type === 1\">\n                <div class=\"col-sm-12\" style=\"text-align: center\">\n                    <br>\n                    <!--<form #f=\"ngForm\" action=\"https://203.154.32.126:2585/api/mfec/Alfresco\" method=\"post\" enctype=\"multipart/form-data\">-->\n                        <!--<input type=\"hidden\" name=\"SystemId\" [value]=\"11\">-->\n                        <!--<input type=\"hidden\" name=\"RelatedAgency\" [value]=\"11\">-->\n                        <!--<input type=\"hidden\" name=\"RecordId\" [value]=\"11\">-->\n                        <!--<input type=\"hidden\" name=\"Subject\" [value]=\"11\">-->\n                        <!--<input type=\"hidden\" name=\"TypeId\" [value]=\"11\">-->\n                        <!--<dx-file-uploader [uploadHeaders]=\"uploadHeaders\" selectButtonText=\"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E1F\u0E25\u0E4C\" labelText=\"\" accept=\"*\" uploadMode=\"useForm\" (onValueChanged)=\"onSelected($event)\"-->\n                                          <!--labelText=\"\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48\">-->\n                        <!--</dx-file-uploader>-->\n                        <!--<input type=\"submit\">-->\n                    <!--</form>-->\n                    <nz-upload *ngIf=\"!onlyImage\" nzType=\"drag\"\n                        [nzAction]=\"url\"\n                        [nzCustomRequest]=\"customReq\"\n                        [nzMultiple]=\"false\"\n                        [(nzFileList)]=\"fileList\"\n                        (nzChange)=\"onChange($event)\"\n                        [nzShowButton]=\"fileList.length === 0\"\n                        [nzBeforeUpload]=\"beforeUpload\">\n                    <!--<nz-upload nzType=\"drag\"-->\n                               <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n                               <!--&gt;-->\n                        <a nz-button>\n                            <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n                        </a>\n                    </nz-upload>\n                    <nz-upload *ngIf=\"onlyImage\" nzType=\"drag\"\n                           [nzAction]=\"url\"\n                           [nzCustomRequest]=\"customReq\"\n                           [nzMultiple]=\"false\"\n                           nzFileType=\"image/png,image/jpeg,image/gif,image/bmp\"\n                           [(nzFileList)]=\"fileList\"\n                           (nzChange)=\"onChange($event)\"\n                           [nzBeforeUpload]=\"beforeUpload\">\n                        <!--<nz-upload nzType=\"drag\"-->\n                        <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n                        <!--&gt;-->\n                        <a nz-button>\n                            <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n                        </a>\n                    </nz-upload>\n                    <br>\n                </div>\n            </div>\n            <div *ngIf=\"item.type === 2\">\n                <div class=\"col-sm-10\" style=\"text-align: center\">\n                    <br>\n                    <br>\n                </div>\n            </div>\n            <div *ngIf=\"item.type === 3\">\n                <div class=\"col-sm-12\" style=\"text-align: center\">\n                  <div class=\"row\" *ngIf=\"!uploadUrl\" >\n                    <br>\n                    <br>\n                  </div>\n                    <div class=\"row\" *ngIf=\"uploadUrl\" style=\"height: 100px;\">\n                      <div class=\"col-sm-12\" style=\"padding: 50px;\">\n                        <div class=\"input-group\">\n                        <input type=\"text\" class=\"form-control m-input\" placeholder=\"\" [(ngModel)]=\"filter.link\">\n                        <span class=\"input-group-btn add-bt\">\n                          <button type=\"button\" class=\"btn btn-success btn-md\"  (click)=\"btnUpload()\" style=\"margin: 0px 0px;\" [disabled]=\"isLoading\">\n                              Upload\n                          </button>\n                        </span>\n                      </div>\n\n                      <div class=\"ant-upload-list-item ant-upload-list-item-done\" *ngIf=\"fileNameLink\">\n                      <div class=\"ant-upload-list-item-info\">\n                          <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n                          <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameLink}}</span>\n                          <!-- <i  type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close ng-star-inserted\" ></i> -->\n                        </div>\n                      </div>\n                      <div class=\"ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-error\" *ngIf=\"fileNameLinkError\">\n                      <div class=\"ant-upload-list-item-info\">\n                          <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n                          <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameLinkError}}</span>\n                          <i  type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close\" (click)=\"fileNameLinkError = ''\" ></i>\n                        </div>\n                      </div>\n\n\n                  </div>\n                  </div>\n                </div>\n            </div>\n            <div *ngIf=\"item.type === 4\">\n              <div class=\"col-sm-12\" style=\"text-align: center\">\n                <div class=\"row\" *ngIf=\"!uploadUrl\" >\n                  <br>\n                  <br>\n                </div>\n\n                  <div class=\"row\" *ngIf=\"uploadUrl\" style=\"height: 100px;\">\n                    <div class=\"col-sm-12\" style=\"padding: 50px;\">\n                      <div id=\"preview\"></div>\n                      <div class=\"input-group\">\n                            <label for=\"file-upload\" class=\"custom-file-upload\"\n                            style=\"background-color: #2b3a4a !important;display: inline-block;color: #f5f9e2 !important;padding: 7px 14px;cursor: pointer;\">\n                                 Upload\n                            </label>\n                            <!-- -->\n                            <span style=\"padding: 10px;\"> <i  *ngIf=\"isLoading\" class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\" ></i> {{QrCodeFileName}}</span>\n                            <input id=\"file-upload\" type=\"file\" style=\" display: none;\" (change)=\"onQrCodeChange()\" accept=\"image/*\"/>\n                      </div>\n\n                      <div class=\"ant-upload-list-item ant-upload-list-item-done\" *ngIf=\"fileNameQr\">\n                      <div class=\"ant-upload-list-item-info\">\n                          <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n                          <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameQr}}</span>\n                          <!-- <i  type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close ng-star-inserted\" ></i> -->\n                        </div>\n                      </div>\n                      <div class=\"ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-error\" *ngIf=\"fileNameQrError\">\n                      <div class=\"ant-upload-list-item-info\">\n                          <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n                          <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameQrError}}</span>\n                          <i  type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close\" (click)=\"fileNameQrError = ''\" ></i>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</dx-tab-panel>\n"
                }] }
    ];
    /** @nocollapse */
    UploadAttachmentComponent.ctorParameters = function () { return [
        { type: AppConfigService },
        { type: Request },
        { type: Common },
        { type: HttpClient },
        { type: Http }
    ]; };
    UploadAttachmentComponent.propDecorators = {
        form: [{ type: ViewChild, args: ['f',] }],
        upLoadType: [{ type: Input }],
        systemId: [{ type: Input }],
        RelatedAgency: [{ type: Input }],
        RecordId: [{ type: Input }],
        Subject: [{ type: Input }],
        TypeId: [{ type: Input }],
        onlyImage: [{ type: Input }],
        uploaded: [{ type: Output }]
    };
    return UploadAttachmentComponent;
}());
export { UploadAttachmentComponent };
if (false) {
    /** @type {?} */
    UploadAttachmentComponent.prototype.form;
    /** @type {?} */
    UploadAttachmentComponent.prototype.upLoadType;
    /** @type {?} */
    UploadAttachmentComponent.prototype.systemId;
    /** @type {?} */
    UploadAttachmentComponent.prototype.RelatedAgency;
    /** @type {?} */
    UploadAttachmentComponent.prototype.RecordId;
    /** @type {?} */
    UploadAttachmentComponent.prototype.Subject;
    /** @type {?} */
    UploadAttachmentComponent.prototype.TypeId;
    /** @type {?} */
    UploadAttachmentComponent.prototype.onlyImage;
    /** @type {?} */
    UploadAttachmentComponent.prototype.uploaded;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileList;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileNameLink;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileNameLinkError;
    /** @type {?} */
    UploadAttachmentComponent.prototype.QrCodeFileName;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileNameQr;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileNameLinkQr;
    /** @type {?} */
    UploadAttachmentComponent.prototype.fileNameQrError;
    /** @type {?} */
    UploadAttachmentComponent.prototype.filter;
    /** @type {?} */
    UploadAttachmentComponent.prototype.uploadHeaders;
    /** @type {?} */
    UploadAttachmentComponent.prototype.config;
    /** @type {?} */
    UploadAttachmentComponent.prototype.url;
    /** @type {?} */
    UploadAttachmentComponent.prototype.uploadUrl;
    /** @type {?} */
    UploadAttachmentComponent.prototype.qr;
    /** @type {?} */
    UploadAttachmentComponent.prototype.isLoading;
    /** @type {?} */
    UploadAttachmentComponent.prototype.isDisabled;
    /** @type {?} */
    UploadAttachmentComponent.prototype.createAuthorizationHeader;
    /** @type {?} */
    UploadAttachmentComponent.prototype.beforeUpload;
    /** @type {?} */
    UploadAttachmentComponent.prototype.customReq;
    /** @type {?} */
    UploadAttachmentComponent.prototype.appConfigService;
    /** @type {?} */
    UploadAttachmentComponent.prototype.request;
    /** @type {?} */
    UploadAttachmentComponent.prototype.common;
    /** @type {?} */
    UploadAttachmentComponent.prototype.http;
    /** @type {?} */
    UploadAttachmentComponent.prototype._http;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vc29jLWFwcC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL3VwbG9hZC1hdHRhY2htZW50L3VwbG9hZC1hdHRhY2htZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxJQUFJLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxVQUFVLEVBQWEsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFtQixNQUFNLHNCQUFzQixDQUFDO0FBRXBJLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBR25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDOztJQXdDeEIsbUNBQW9CLGdCQUFrQyxFQUFVLE9BQWdCLEVBQVMsTUFBYyxFQUFVLElBQWdCLEVBQVMsS0FBVztRQUFySixpQkFLQztRQUxtQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBTTswQkFoQzFIO1lBQ3ZCLEVBQUMs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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBSTVCLElBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDM0I7S0FDSjs7OztJQUVNLDhDQUFVOzs7O1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1FBRXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDOzs7Z0JBaFZqQyxTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IseXpTQUFpRDtpQkFDcEQ7Ozs7Z0JBakJPLGdCQUFnQjtnQkFFaEIsT0FBTztnQkFDUCxNQUFNO2dCQUdOLFVBQVU7Z0JBTFYsSUFBSTs7O3VCQWtCUCxTQUFTLFNBQUMsR0FBRzs2QkFDYixLQUFLOzJCQUtMLEtBQUs7Z0NBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSzs0QkFDTCxLQUFLOzJCQUNMLE1BQU07O29DQWhDWDs7U0FtQmEseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwcENvbmZpZ1NlcnZpY2V9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7SHR0cCwgSGVhZGVycywgUmVzcG9uc2UsIFVSTFNlYXJjaFBhcmFtcywgUmVxdWVzdE9wdGlvbnN9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xuaW1wb3J0IHtSZXF1ZXN0fSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9ufSBmcm9tICcuLi9fc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VXBsb2FkWEhSQXJnc30gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UsSHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzL1J4JztcbmltcG9ydCB7T2JzZXJ2YWJsZSx0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCBRckNvZGUgZnJvbSAncXJjb2RlLXJlYWRlcic7Ly9saWJzL3FyY29kZVxuLy8gaW1wb3J0IHsgTnpNZXNzYWdlU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbWVzc2FnZSc7XG5pbXBvcnQgeyBVcGxvYWRGaWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC91cGxvYWQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwbG9hZC1hdHRhY2htZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRBdHRhY2htZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdmJykgZm9ybTogTmdGb3JtO1xuICAgIEBJbnB1dCgpIHVwTG9hZFR5cGU6IGFueSA9IFtcbiAgICAgICAge3RpdGxlOiBcIkZpbGVcIiwgdHlwZTogMX0sXG4gICAgICAgIC8vIHt0aXRsZTpcIlNjYW5cIix0eXBlOjJ9LFxuICAgICAgICB7dGl0bGU6IFwiTGlua1wiLCB0eXBlOiAzfSxcbiAgICAgICAge3RpdGxlOiBcIlFSIENvZGVcIiwgdHlwZTogNH1dO1xuICAgIEBJbnB1dCgpIHN5c3RlbUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgUmVsYXRlZEFnZW5jeTogYW55ID0gJ1NPQyc7XG4gICAgQElucHV0KCkgUmVjb3JkSWQ6IGFueSA9ICcwJztcbiAgICBASW5wdXQoKSBTdWJqZWN0OiBhbnkgPSAnLSc7XG4gICAgQElucHV0KCkgVHlwZUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgb25seUltYWdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIHVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIEBWaWV3Q2hpbGQoJ215TW9kYWwnKSBteU1vZGFsO1xuICAgIGZpbGVMaXN0OiBhbnkgPSBbXTtcbiAgICBmaWxlTmFtZUxpbmsgPSAnJztcbiAgICBmaWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgIFFyQ29kZUZpbGVOYW1lID0gJydcbiAgICBmaWxlTmFtZVFyID0gJyc7XG4gICAgZmlsZU5hbWVMaW5rUXIgPSAnJztcbiAgICBmaWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICBmaWx0ZXI6IGFueSA9IHt9XG4gICAgdXBsb2FkSGVhZGVyczogYW55ID0ge1xuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCYXNpYyBcIiArIGJ0b2EoXCJBUFBTT0M6MTIzNDU2XCIpXG4gICAgfTtcbiAgICAvLyB2YWx1ZTphbnkgPSBbXTtcbiAgICBjb25maWc7XG4gICAgdXJsO1xuICAgIHVwbG9hZFVybDtcbiAgICBxcjtcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCwgcHVibGljIGNvbW1vbjogQ29tbW9uLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBfaHR0cDogSHR0cCwpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLnVybCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnYXBpU2VydmVycy5hbGZyZXNjby51cmwnKSB8fCBcImh0dHBzOi8vcG9ydGFsLXVhdC5zb2MuZ28udGgvYXBpL21mZWMvQWxmcmVzY29cIjtcbiAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2FwaVNlcnZlcnMuYWxmcmVzY28udXBsb2FkVXJsJykgfHwgJ2h0dHBzOi8vcG9ydGFsLXVhdC5zb2MuZ28udGgvbWljcm9zZXJ2aWNlLWFwaS9nZW4tcHJvY2Vzc2VkLWZpbGUvdXBsb2FkLWxpbmstc2VydmVyJ1xuICAgICAgICAvLyB8fCBcImh0dHA6Ly8xMjcuMC4wLjE6NTUwMC9taWNyb3NlcnZpY2UtYXBpL2dlbi1wcm9jZXNzZWQtZmlsZS91cGxvYWQtbGluay1zZXJ2ZXJcIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Zvcm0nLCB0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLnFyID0gbmV3IFFyQ29kZSgpO1xuICAgICAgICB0aGlzLnFyLmNhbGxiYWNrID0gKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2FsbGJhY2snKVxuICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3BhbicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQucmVzdWx0KVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rUXIgPSByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZExpbmtRcigpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc3Bhbi50ZXh0Q29udGVudCA9ICd2aWV3IGNvbnNvbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3Bhbi50ZXh0Q29udGVudCA9ICdFcnJvciEgU2VlIGVycm9yIG1lc3NhZ2UgaW4gY29uc29sZSEnO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVRckVycm9yID0gdGhpcy5RckNvZGVGaWxlTmFtZVxuICAgICAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHByZXZpZXcuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWRMaW5rUXIoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5faHR0cC5wb3N0KHRoaXMudXBsb2FkVXJsLCB7XG4gICAgICAgICAgICBTeXN0ZW1JZDogJycgKyB0aGlzLnN5c3RlbUlkLFxuICAgICAgICAgICAgUmVsYXRlZEFnZW5jeTogdGhpcy5SZWxhdGVkQWdlbmN5LFxuICAgICAgICAgICAgUmVjb3JkSWQ6IHRoaXMuUmVjb3JkSWQsXG4gICAgICAgICAgICBTdWJqZWN0OiB0aGlzLlN1YmplY3QsXG4gICAgICAgICAgICBUeXBlSWQ6IHRoaXMuVHlwZUlkLFxuICAgICAgICAgICAgbGluazogdGhpcy5maWxlTmFtZUxpbmtRclxuICAgICAgICB9KS5tYXAoKHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcylcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHRDb2RlID09PSAyMDAwMCAmJiByZXMuZGF0YSAmJiByZXMuZGF0YS5maWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtRciA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Jlcy5kYXRhJywgcmVzLmRhdGEuZmlsZSlcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSByZXMuZGF0YS5maWxlLmZpbGVOYW1lXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHJlcy5kYXRhLmZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXJFcnJvciA9IHRoaXMuZmlsZU5hbWVMaW5rUXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHt9KTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVRckVycm9yID0gdGhpcy5maWxlTmFtZUxpbmtRclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGJ0blVwbG9hZCgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGVOYW1lTGlua0Vycm9yID0gJyc7XG4gICAgICAgIHRoaXMuX2h0dHAucG9zdCh0aGlzLnVwbG9hZFVybCwge1xuICAgICAgICAgICAgU3lzdGVtSWQ6ICcnICsgdGhpcy5zeXN0ZW1JZCxcbiAgICAgICAgICAgIFJlbGF0ZWRBZ2VuY3k6IHRoaXMuUmVsYXRlZEFnZW5jeSxcbiAgICAgICAgICAgIFJlY29yZElkOiB0aGlzLlJlY29yZElkLFxuICAgICAgICAgICAgU3ViamVjdDogdGhpcy5TdWJqZWN0LFxuICAgICAgICAgICAgVHlwZUlkOiB0aGlzLlR5cGVJZCxcbiAgICAgICAgICAgIGxpbms6IHRoaXMuZmlsdGVyLmxpbmtcbiAgICAgICAgfSkubWFwKChyZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmIChyZXMucmVzdWx0Q29kZSA9PT0gMjAwMDAgJiYgcmVzLmRhdGEgJiYgcmVzLmRhdGEuZmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVzLmRhdGEnLCByZXMuZGF0YS5maWxlKVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rID0gcmVzLmRhdGEuZmlsZS5maWxlTmFtZVxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWQuZW1pdChyZXMuZGF0YS5maWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gJydcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lTGlua1FyID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9IHRoaXMuZmlsdGVyLmxpbmtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHt9KTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rRXJyb3IgPSB0aGlzLmZpbHRlci5saW5rXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBvblFyQ29kZUNoYW5nZSgpIHtcbiAgICAgICAgbGV0IGZ1bGxQYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJylbJ3ZhbHVlJ107XG4gICAgICAgIGlmIChmdWxsUGF0aCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSAoZnVsbFBhdGguaW5kZXhPZignXFxcXCcpID49IDAgPyBmdWxsUGF0aC5sYXN0SW5kZXhPZignXFxcXCcpIDogZnVsbFBhdGgubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBmdWxsUGF0aC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpZiAoZmlsZW5hbWUuaW5kZXhPZignXFxcXCcpID09PSAwIHx8IGZpbGVuYW1lLmluZGV4T2YoJy8nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gZmlsZW5hbWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rUXIgPSAnJztcblxuICAgICAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJyk7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXcnKTtcblxuICAgICAgICBsZXQgZmlsZXNfID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJylbJ2ZpbGVzJ107XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlc18nLGZpbGVzXylcbiAgICAgICAgaWYgKGZpbGVzXylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXNfLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBmaWxlc19baV07XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlVHlwZSA9IC9eaW1hZ2VcXC8vO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbWFnZVR5cGUudGVzdChmaWxlLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnRmlsZSB0eXBlIG5vdCB2YWxpZCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaWxlIHR5cGUgbm90IHZhbGlkJylcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIC8vIFJlYWQgZmlsZVxuICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IGFzIHByZXZpZXcgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHRoaXMucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpZXcuYXBwZW5kQ2hpbGQoaW1nKTtcblxuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuYWx5c2UgY29kZVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucXIuZGVjb2RlKHRoaXMucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH0uYmluZChyZWFkZXIpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJvblFyQ29kZUNoYW5nZVwiLGpzcXJjb2RlKVxuICAgIH1cblxuXG4gICAgb25VcGxvYWRlZChmaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZmlsZVwiLCBmaWxlKTtcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UoZmlsZS5yZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHJlcyk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZVwiLCBlKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2Zvcm0nLCB0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmZvcm0ubmdTdWJtaXQuZW1pdCgpO1xuICAgIH1cblxuICAgIGNyZWF0ZUF1dGhvcml6YXRpb25IZWFkZXIgPSAoaGVhZGVyczogSHR0cEhlYWRlcnMpID0+IHtcbiAgICB9XG5cbiAgICBiZWZvcmVVcGxvYWQgPSAoZmlsZTphbnksIF9maWxlTGlzdDphbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IHdoaXRlbGlzdCA9IFtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgJ3RleHQvY3N2JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICd0ZXh0L2NvbW1hLXNlcGFyYXRlZC12YWx1ZXMnLFxuICAgICAgICAgICAgICAndGV4dC9hbnl0ZXh0JyxcbiAgICAgICAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgICAgJ2ltYWdlL2dpZicsXG4gICAgICAgICAgICAgICdpbWFnZS9ibXAnXG5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaXNXaGl0ZWxpc3QgPSAoZmlsZSAmJiB3aGl0ZWxpc3QuaW5kZXhPZihmaWxlLnR5cGUpID4gLTEpXG4gICAgICAgICAgaWYoIWlzV2hpdGVsaXN0KXtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgICAgIHVpZDogJzk5OScsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+C4quC4suC4oeC4suC4o+C4luC4reC4seC4nuC5guC4q+C4peC4lOC5hOC4lOC5ieC5gOC4ieC4nuC4suC4sOC5hOC4n+C4peC5jCAgcGRmICwgcG5nICAsIGpwZWcgICxnaWYgLCB0ZXh0ICwgd29yZCAsIGV4Y2VsICwgcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAn4Liq4Liy4Lih4Liy4Lij4LiW4Lit4Lix4Lie4LmC4Lir4Lil4LiU4LmE4LiU4LmJ4LmA4LiJ4Lie4Liy4Liw4LmE4Lif4Lil4LmMICBwZGYgLCBwbmcgICwganBlZyAgLGdpZiAsIHRleHQgLCB3b3JkICwgZXhjZWwgLCBwb3dlcnBvaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNMdDMwTSA9IGZpbGUuc2l6ZSEgLyAxMDI0IC8gMTAyNCA8IDMwO1xuICAgICAgICAgIGlmICghaXNMdDMwTSkge1xuICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgdWlkOiAnOTk5JyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdGaWxlIG11c3Qgc21hbGxlciB0aGFuIDMwTUIhJyxcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAnRmlsZSBtdXN0IHNtYWxsZXIgdGhhbiAzME1CIScsXG4gICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGlzV2hpdGVsaXN0ICYmIGlzTHQzME0pO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgIGN1c3RvbVJlcSA9IChpdGVtOiBVcGxvYWRYSFJBcmdzKSA9PiB7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ0ZpbGVEYXRhJywgaXRlbS5maWxlIGFzIGFueSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3lzdGVtSWQnLCAnJyArIHRoaXMuc3lzdGVtSWQpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlbGF0ZWRBZ2VuY3knLCB0aGlzLlJlbGF0ZWRBZ2VuY3kpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlY29yZElkJywgdGhpcy5SZWNvcmRJZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3ViamVjdCcsIHRoaXMuU3ViamVjdCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnVHlwZUlkJywgdGhpcy5UeXBlSWQpO1xuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EoJ0FQUFNPQzoxMjM0NTYnKSk7XG4gICAgICAgIGxldCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCBpdGVtLmFjdGlvbiwgZm9ybURhdGEsIHtcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKCdBUFBTT0M6MTIzNDU2JykpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDx7fT4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQudG90YWwgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQgYXMgYW55KS5wZXJjZW50ID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJvblByb2dyZXNzXCIsIGV2ZW50ICwgdGhpcy5maWxlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25Qcm9ncmVzcyhldmVudCwgaXRlbS5maWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXZlbnQuYm9keVwiLCBldmVudC5ib2R5ICwgdGhpcy5maWxlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUxpc3QgJiYgdGhpcy5maWxlTGlzdC5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW3RoaXMuZmlsZUxpc3RbdGhpcy5maWxlTGlzdC5sZW5ndGgtMV1dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHJlcyA9IEpTT04ucGFyc2UoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkLmVtaXQoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25TdWNjZXNzKGV2ZW50LmJvZHksIGl0ZW0uZmlsZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcblxuICAgICAgICAgICAgICAgIGl0ZW0ub25FcnJvcihlcnIsIGl0ZW0uZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShkYXRhKSB7XG4gICAgICAgIGRhdGEuZmlsZUxpc3QgPSBbZGF0YS5maWxlXTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm9uQ2hhbmdlXCIsZGF0YSk7XG5cbiAgICAgICAgaWYoZGF0YS5maWxlTGlzdCA9PT0gMCl7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJjbGVhclZhbHVlXCIpXG4gICAgICAgIHRoaXMuZmlsZUxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmsgPSAnJztcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gJydcblxuICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSAnJztcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtRciA9ICcnO1xuICAgICAgICB0aGlzLmZpbGVOYW1lUXJFcnJvciA9ICcnO1xuICAgIH1cbn1cbiJdfQ==