@bpost/bp-address-auto-complete-by-component 1.1.1 → 1.1.5

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.
Files changed (173) hide show
  1. package/bpost-bp-address-auto-complete-by-component.d.ts +1 -11
  2. package/esm2020/bpost-bp-address-auto-complete-by-component.mjs +5 -0
  3. package/esm2020/lib/box-number/box-number.component.mjs +873 -0
  4. package/esm2020/lib/enum/address-level.enum.mjs +8 -0
  5. package/esm2020/lib/enum/index.mjs +7 -0
  6. package/esm2020/lib/enum/input-name.enum.mjs +8 -0
  7. package/esm2020/lib/enum/source-type.enum.mjs +5 -0
  8. package/esm2020/lib/enum/suggestion-level-type.enum.mjs +8 -0
  9. package/esm2020/lib/enum/validation-message-option-type.enum.mjs +6 -0
  10. package/esm2020/lib/enum/validation-message-type.enum.mjs +7 -0
  11. package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +1383 -0
  12. package/esm2020/lib/lib-address-autocomplete-by-component.module.mjs +65 -0
  13. package/esm2020/lib/lib-address-autocomplete-by-component.service.mjs +14 -0
  14. package/esm2020/lib/locality/locality.component.mjs +747 -0
  15. package/{esm2015/lib/model/Locality.js → esm2020/lib/model/Box.mjs} +2 -2
  16. package/esm2020/lib/model/Locality.mjs +30 -0
  17. package/esm2020/lib/model/Street.mjs +30 -0
  18. package/esm2020/lib/model/query-parameters.model.mjs +21 -0
  19. package/esm2020/lib/services/adress.service.mjs +64 -0
  20. package/esm2020/lib/services/http.service.mjs +57 -0
  21. package/esm2020/lib/services/locale.service.mjs +37 -0
  22. package/esm2020/lib/services/nis9.service.mjs +26 -0
  23. package/esm2020/lib/services/unicode.service.mjs +376 -0
  24. package/esm2020/lib/street/street.component.mjs +735 -0
  25. package/esm2020/lib/street-number/street-number.component.mjs +967 -0
  26. package/esm2020/lib/utils/constants.mjs +2 -0
  27. package/esm2020/lib/utils/domhandler.mjs +47 -0
  28. package/esm2020/lib/utils/highlight-suggestion.pipe.mjs +62 -0
  29. package/{esm5/lib/utils/prefill-data.js → esm2020/lib/utils/prefill-data.mjs} +5 -7
  30. package/esm2020/lib/utils/prefilled-parameters.mjs +23 -0
  31. package/esm2020/lib/utils/preflll.event.mjs +7 -0
  32. package/esm2020/lib/utils/visible-suggestion.directive.mjs +39 -0
  33. package/esm2020/public-api.mjs +9 -0
  34. package/fesm2015/{bpost-bp-address-auto-complete-by-component.js → bpost-bp-address-auto-complete-by-component.mjs} +1141 -808
  35. package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -0
  36. package/{fesm5/bpost-bp-address-auto-complete-by-component.js → fesm2020/bpost-bp-address-auto-complete-by-component.mjs} +2073 -1945
  37. package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -0
  38. package/lib/box-number/box-number.component.d.ts +11 -2
  39. package/lib/enum/index.d.ts +3 -0
  40. package/lib/enum/suggestion-level-type.enum.d.ts +5 -0
  41. package/lib/lib-address-autocomplete-by-component.component.d.ts +9 -0
  42. package/lib/lib-address-autocomplete-by-component.module.d.ts +15 -0
  43. package/lib/lib-address-autocomplete-by-component.service.d.ts +3 -0
  44. package/lib/locality/locality.component.d.ts +3 -0
  45. package/lib/services/adress.service.d.ts +3 -0
  46. package/lib/services/http.service.d.ts +5 -0
  47. package/lib/services/locale.service.d.ts +3 -0
  48. package/lib/services/nis9.service.d.ts +3 -0
  49. package/lib/services/unicode.service.d.ts +3 -0
  50. package/lib/street/street.component.d.ts +3 -0
  51. package/lib/street-number/street-number.component.d.ts +9 -1
  52. package/lib/utils/constants.d.ts +1 -0
  53. package/lib/utils/highlight-suggestion.pipe.d.ts +3 -0
  54. package/lib/utils/visible-suggestion.directive.d.ts +3 -0
  55. package/package.json +23 -13
  56. package/VERSION.md +0 -159
  57. package/address-complete-2020-04-15_23-29-54.png +0 -0
  58. package/address-incomplete-2020-04-15_23-28-40.png +0 -0
  59. package/bpost-bp-address-auto-complete-by-component.metadata.json +0 -1
  60. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js +0 -5689
  61. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js.map +0 -1
  62. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js +0 -16
  63. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js.map +0 -1
  64. package/esm2015/bpost-bp-address-auto-complete-by-component.js +0 -16
  65. package/esm2015/lib/box-number/box-number.component.js +0 -811
  66. package/esm2015/lib/enum/address-level.enum.js +0 -8
  67. package/esm2015/lib/enum/index.js +0 -4
  68. package/esm2015/lib/enum/input-name.enum.js +0 -8
  69. package/esm2015/lib/enum/source-type.enum.js +0 -5
  70. package/esm2015/lib/enum/validation-message-option-type.enum.js +0 -6
  71. package/esm2015/lib/enum/validation-message-type.enum.js +0 -7
  72. package/esm2015/lib/lib-address-autocomplete-by-component.component.js +0 -1167
  73. package/esm2015/lib/lib-address-autocomplete-by-component.module.js +0 -42
  74. package/esm2015/lib/lib-address-autocomplete-by-component.service.js +0 -14
  75. package/esm2015/lib/locality/locality.component.js +0 -769
  76. package/esm2015/lib/model/Box.js +0 -30
  77. package/esm2015/lib/model/Street.js +0 -30
  78. package/esm2015/lib/model/query-parameters.model.js +0 -21
  79. package/esm2015/lib/services/adress.service.js +0 -68
  80. package/esm2015/lib/services/http.service.js +0 -53
  81. package/esm2015/lib/services/locale.service.js +0 -39
  82. package/esm2015/lib/services/nis9.service.js +0 -30
  83. package/esm2015/lib/services/unicode.service.js +0 -376
  84. package/esm2015/lib/street/street.component.js +0 -749
  85. package/esm2015/lib/street-number/street-number.component.js +0 -900
  86. package/esm2015/lib/utils/domhandler.js +0 -47
  87. package/esm2015/lib/utils/highlight-suggestion.pipe.js +0 -63
  88. package/esm2015/lib/utils/prefill-data.js +0 -24
  89. package/esm2015/lib/utils/prefilled-parameters.js +0 -23
  90. package/esm2015/lib/utils/preflll.event.js +0 -7
  91. package/esm2015/lib/utils/visible-suggestion.directive.js +0 -42
  92. package/esm2015/public-api.js +0 -9
  93. package/esm5/bpost-bp-address-auto-complete-by-component.js +0 -16
  94. package/esm5/lib/box-number/box-number.component.js +0 -831
  95. package/esm5/lib/enum/address-level.enum.js +0 -8
  96. package/esm5/lib/enum/index.js +0 -4
  97. package/esm5/lib/enum/input-name.enum.js +0 -8
  98. package/esm5/lib/enum/source-type.enum.js +0 -5
  99. package/esm5/lib/enum/validation-message-option-type.enum.js +0 -6
  100. package/esm5/lib/enum/validation-message-type.enum.js +0 -7
  101. package/esm5/lib/lib-address-autocomplete-by-component.component.js +0 -1183
  102. package/esm5/lib/lib-address-autocomplete-by-component.module.js +0 -45
  103. package/esm5/lib/lib-address-autocomplete-by-component.service.js +0 -16
  104. package/esm5/lib/locality/locality.component.js +0 -825
  105. package/esm5/lib/model/Box.js +0 -35
  106. package/esm5/lib/model/Locality.js +0 -35
  107. package/esm5/lib/model/Street.js +0 -35
  108. package/esm5/lib/model/query-parameters.model.js +0 -23
  109. package/esm5/lib/services/adress.service.js +0 -72
  110. package/esm5/lib/services/http.service.js +0 -55
  111. package/esm5/lib/services/locale.service.js +0 -40
  112. package/esm5/lib/services/nis9.service.js +0 -31
  113. package/esm5/lib/services/unicode.service.js +0 -379
  114. package/esm5/lib/street/street.component.js +0 -794
  115. package/esm5/lib/street-number/street-number.component.js +0 -920
  116. package/esm5/lib/utils/domhandler.js +0 -51
  117. package/esm5/lib/utils/highlight-suggestion.pipe.js +0 -75
  118. package/esm5/lib/utils/prefilled-parameters.js +0 -25
  119. package/esm5/lib/utils/preflll.event.js +0 -9
  120. package/esm5/lib/utils/visible-suggestion.directive.js +0 -43
  121. package/esm5/public-api.js +0 -9
  122. package/fesm2015/bpost-bp-address-auto-complete-by-component.js.map +0 -1
  123. package/fesm5/bpost-bp-address-auto-complete-by-component.js.map +0 -1
  124. package/install-and-start-demo.bat +0 -11
  125. package/resources/assets/aacwidget/i18n/de.json +0 -62
  126. package/resources/assets/aacwidget/i18n/en.json +0 -62
  127. package/resources/assets/aacwidget/i18n/fr.json +0 -62
  128. package/resources/assets/aacwidget/i18n/nl.json +0 -62
  129. package/resources/assets/aacwidget/scss/aacwidget-custom.scss +0 -81
  130. package/resources/assets/aacwidget/scss/aacwidget-default.scss +0 -424
  131. package/tutorial/aacwidget-tutorial/.editorconfig +0 -16
  132. package/tutorial/aacwidget-tutorial/angular.json +0 -128
  133. package/tutorial/aacwidget-tutorial/browserslist +0 -13
  134. package/tutorial/aacwidget-tutorial/e2e/protractor.conf.js +0 -32
  135. package/tutorial/aacwidget-tutorial/e2e/src/app.e2e-spec.ts +0 -23
  136. package/tutorial/aacwidget-tutorial/e2e/src/app.po.ts +0 -11
  137. package/tutorial/aacwidget-tutorial/e2e/tsconfig.json +0 -13
  138. package/tutorial/aacwidget-tutorial/karma.conf.js +0 -32
  139. package/tutorial/aacwidget-tutorial/package-lock.json +0 -13314
  140. package/tutorial/aacwidget-tutorial/package.json +0 -49
  141. package/tutorial/aacwidget-tutorial/src/app/app-routing.module.ts +0 -18
  142. package/tutorial/aacwidget-tutorial/src/app/app.component.html +0 -6
  143. package/tutorial/aacwidget-tutorial/src/app/app.component.scss +0 -0
  144. package/tutorial/aacwidget-tutorial/src/app/app.component.spec.ts +0 -35
  145. package/tutorial/aacwidget-tutorial/src/app/app.component.ts +0 -28
  146. package/tutorial/aacwidget-tutorial/src/app/app.module.ts +0 -47
  147. package/tutorial/aacwidget-tutorial/src/app/widget-full/widget-full.component.html +0 -57
  148. package/tutorial/aacwidget-tutorial/src/app/widget-full/widget-full.component.scss +0 -0
  149. package/tutorial/aacwidget-tutorial/src/app/widget-full/widget-full.component.ts +0 -160
  150. package/tutorial/aacwidget-tutorial/src/app/widget-simple/widget-simple.component.html +0 -20
  151. package/tutorial/aacwidget-tutorial/src/app/widget-simple/widget-simple.component.scss +0 -0
  152. package/tutorial/aacwidget-tutorial/src/app/widget-simple/widget-simple.component.spec.ts +0 -25
  153. package/tutorial/aacwidget-tutorial/src/app/widget-simple/widget-simple.component.ts +0 -49
  154. package/tutorial/aacwidget-tutorial/src/assets/.gitkeep +0 -0
  155. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/i18n/de.json +0 -62
  156. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/i18n/en.json +0 -62
  157. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/i18n/fr.json +0 -62
  158. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/i18n/nl.json +0 -62
  159. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/scss/aacwidget-custom.scss +0 -81
  160. package/tutorial/aacwidget-tutorial/src/assets/aacwidget/scss/aacwidget-default.scss +0 -424
  161. package/tutorial/aacwidget-tutorial/src/environments/environment.prod.ts +0 -3
  162. package/tutorial/aacwidget-tutorial/src/environments/environment.ts +0 -16
  163. package/tutorial/aacwidget-tutorial/src/favicon.ico +0 -0
  164. package/tutorial/aacwidget-tutorial/src/index.html +0 -45
  165. package/tutorial/aacwidget-tutorial/src/main.ts +0 -12
  166. package/tutorial/aacwidget-tutorial/src/polyfills.ts +0 -63
  167. package/tutorial/aacwidget-tutorial/src/styles.scss +0 -4
  168. package/tutorial/aacwidget-tutorial/src/test.ts +0 -25
  169. package/tutorial/aacwidget-tutorial/tsconfig.app.json +0 -15
  170. package/tutorial/aacwidget-tutorial/tsconfig.json +0 -23
  171. package/tutorial/aacwidget-tutorial/tsconfig.spec.json +0 -18
  172. package/tutorial/aacwidget-tutorial/tslint.json +0 -148
  173. package/tutorial/tutorial-videos.txt +0 -41
@@ -1,1183 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
3
- import { ValidationMessageOptionType } from './enum/validation-message-option-type.enum';
4
- import { LocalityComponent } from './locality/locality.component';
5
- import { StreetComponent } from './street/street.component';
6
- import { StreetNumberComponent } from './street-number/street-number.component';
7
- import { BoxNumberComponent } from './box-number/box-number.component';
8
- import { ADDRESSLEVEL } from './enum';
9
- import { PrefillData } from './utils/prefill-data';
10
- import { InputNameType } from './enum/input-name.enum';
11
- import { HttpService } from './services/http.service';
12
- import { Nis9Service } from './services/nis9.service';
13
- var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
14
- function LibAddressAutocompleteByComponentComponent(nis9Service, httpService) {
15
- this.nis9Service = nis9Service;
16
- this.httpService = httpService;
17
- this.selectedLanguage = null;
18
- this.baseUrl = "https://api.mailops.bpost.cloud/roa-info/externalMailingAddressProofingRest/autocomplete/";
19
- this.defaultApiKey = 'cyRkKOD73O1DOdgcDLLnsaOiDh6OyOkt3BBT5JU1';
20
- this.usedLocalityUrl = this.baseUrl + 'locality';
21
- this.usedStreetUrl = this.baseUrl + 'street';
22
- this.usedStreetNumberUrl = this.baseUrl + 'streetNumber';
23
- this.usedBoxNumberUrl = this.baseUrl + 'boxNumber';
24
- this.showDebugMessageToConsole = false;
25
- this.notInListAllowed = true;
26
- this.messageOption = 'Y';
27
- // LOCALITY
28
- this.localityUrl = this.baseUrl + 'locality';
29
- this.maxSuggestionLocality = 5;
30
- this.visibleSuggestionLocalityCount = 5;
31
- // localityParams: PrefilledParameters;
32
- this.localityPrefillData = null;
33
- // STREET
34
- this.streetUrl = this.baseUrl + 'street';
35
- this.maxSuggestionStreet = 5;
36
- this.visibleSuggestionStreetCount = 5;
37
- // streetParams: PrefilledParameters;
38
- this.streetPrefillData = null;
39
- // STREET NUMBER
40
- // tslint:disable-next-line:max-line-length
41
- this.streetNumberUrl = this.baseUrl + 'streetNumber';
42
- this.maxSuggestionStreetNb = 5;
43
- this.visibleSuggestionStreetNbCount = 5;
44
- // streetNumberParams: PrefilledParameters;
45
- this.streetNumberPrefillData = null;
46
- // BOX NUMBER
47
- this.boxNumberUrl = this.baseUrl + 'boxNumber';
48
- this.maxSuggestionBoxNb = 5;
49
- this.visibleSuggestionBoxNbCount = 5;
50
- // boxParams: PrefilledParameters;
51
- this.boxNumberPrefillData = null;
52
- this.emittedAddress = null;
53
- this.validationMessage = { messageType: null, translatedMessage: '' };
54
- this.addressCompleteEventEmitter = new EventEmitter();
55
- this.validationMessageEventEmitter = new EventEmitter();
56
- this.clearInputEventEmitter = new EventEmitter();
57
- this.processingPrefillData = false;
58
- // Pass the API key as a property of the library !
59
- this.apiKey = this.defaultApiKey;
60
- // set the widget as readonly and add NIS9 query parameter
61
- this.isReadonly = false;
62
- this.nis9InResponse = false;
63
- // https://bgs.bpost.be/set-selection-circle?lng=4.360537572541948&lat=50.84063582806037&radius=0.001
64
- this.nis9ServiceURL = '';
65
- this.isComponentReady = false;
66
- }
67
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "inputLang", {
68
- // @ts-ignore
69
- set: function (val) {
70
- this.setLanguage(val);
71
- },
72
- enumerable: true,
73
- configurable: true
74
- });
75
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "clearInput", {
76
- // @ts-ignore
77
- set: function (focus) {
78
- this.onClearInput(focus);
79
- },
80
- enumerable: true,
81
- configurable: true
82
- });
83
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "validationMessageOption", {
84
- // @ts-ignore
85
- set: function (option) {
86
- this.setValidationMessageOptionFromInput(option);
87
- },
88
- enumerable: true,
89
- configurable: true
90
- });
91
- LibAddressAutocompleteByComponentComponent.prototype.ngOnInit = function () {
92
- //console.warn('lib - ngOnInit');
93
- this.nis9Service.setNis9ServiceURL(this.nis9ServiceURL);
94
- var apiKey = this.isValidData(this.apiKey) ? this.apiKey : this.defaultApiKey;
95
- this.httpService.setApiKey(apiKey);
96
- if (this.isValidData(this.localityUrl))
97
- this.usedLocalityUrl = this.localityUrl;
98
- if (this.isValidData(this.streetUrl))
99
- this.usedStreetUrl = this.streetUrl;
100
- if (this.isValidData(this.streetNumberUrl))
101
- this.usedStreetNumberUrl = this.streetNumberUrl;
102
- if (this.isValidData(this.boxNumberUrl))
103
- this.usedBoxNumberUrl = this.boxNumberUrl;
104
- if (this.addressParams) {
105
- this.prefillData = this.addressParams;
106
- }
107
- this.isComponentReady = true;
108
- };
109
- LibAddressAutocompleteByComponentComponent.prototype.isValidData = function (str) {
110
- return str !== undefined && str !== null && str.length > 0;
111
- };
112
- LibAddressAutocompleteByComponentComponent.prototype.ngOnDestroy = function () {
113
- if (this.subscription) {
114
- this.subscription.unsubscribe();
115
- }
116
- };
117
- LibAddressAutocompleteByComponentComponent.prototype.ngOnChanges = function (changes) {
118
- if (changes) {
119
- // code for tracing
120
- // visibleSuggestionStreetNbCount
121
- if (this.showDebugMessageToConsole) {
122
- this.displayParametersChangesToConsole(changes);
123
- }
124
- /*
125
- if (changes.hasOwnProperty('apiKey') && !changes.apiKey.firstChange) {
126
- const apiKey = this.apiKey!==null && this.apiKey!==undefined && this.apiKey.length>0
127
- ? this.apiKey
128
- : this.defaultApiKey;
129
- this.httpService.setApiKey( apiKey );
130
- }
131
-
132
- if (changes.hasOwnProperty('localityUrl') && !changes.localityUrl.firstChange) {
133
- const localityUrl = this.localityUrl!==null && this.localityUrl!==undefined && this.localityUrl.length>0
134
- ? this.localityUrl
135
- : this.baseUrl + 'locality';
136
- this.usedLocalityUrl=localityUrl;
137
- console.log('ngOnChanges - localityUrl: ', localityUrl);
138
- }
139
- if (changes.hasOwnProperty('streetUrl') && !changes.streetUrl.firstChange) {
140
- const streetUrl = this.streetUrl!==null && this.streetUrl!==undefined && this.streetUrl.length>0
141
- ? this.streetUrl
142
- : this.baseUrl + 'street';
143
- this.streetUrl=streetUrl;
144
- }
145
- if (changes.hasOwnProperty('streetNumberUrl') && !changes.streetNumberUrl.firstChange) {
146
- const streetNumberUrl = this.streetNumberUrl!==null && this.streetNumberUrl!==undefined && this.streetNumberUrl.length>0
147
- ? this.streetNumberUrl
148
- : this.baseUrl + 'streetNumber';
149
- this.streetNumberUrl=streetNumberUrl;
150
- }
151
- if (changes.hasOwnProperty('boxNumberUrl') && !changes.boxNumberUrl.firstChange) {
152
- const boxNumberUrl = this.boxNumberUrl!==null && this.boxNumberUrl!==undefined && this.boxNumberUrl.length>0
153
- ? this.boxNumberUrl
154
- : this.baseUrl + 'boxNumber';
155
- this.boxNumberUrl=boxNumberUrl;
156
- }
157
- */
158
- if (changes.hasOwnProperty('addressParams') && !changes.addressParams.firstChange) {
159
- // if (changes.hasOwnProperty('addressParams')) {
160
- this.processingPrefillData = true;
161
- this.enterPrefillMode();
162
- this.selectedAddress = null;
163
- this.notifyAddressComplete();
164
- this.clearWidget();
165
- /*
166
- if (this.localityPrefillData !== null && this.localityPrefillData !== undefined) {
167
- // this.onClearInputEventEmitter(InputNameType.LOCALITY);
168
- this.clearWidget();
169
- }
170
- */
171
- this.boxNumberPrefillData = null;
172
- this.streetNumberPrefillData = null;
173
- this.streetPrefillData = null;
174
- if (this.showDebugMessageToConsole) {
175
- console.log('lib::widget detected prefilling', this.addressParams);
176
- }
177
- this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.LOCALITY;
178
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
179
- this.localityPrefillData = new PrefillData(this.addressParams);
180
- // Object.assign(this.localityPrefillData, this.addressParams);
181
- if (this.showDebugMessageToConsole) {
182
- console.log('lib::checking locality match... ', this.localityPrefillData);
183
- }
184
- }
185
- }
186
- };
187
- LibAddressAutocompleteByComponentComponent.prototype.displayParametersChangesToConsole = function (changes) {
188
- // messageOption
189
- if (changes.hasOwnProperty('messageOption') && !changes.messageOption.firstChange) {
190
- var wcChanges = changes.messageOption.currentValue;
191
- console.log('lib widget9 - messageOption', wcChanges);
192
- }
193
- // maxSuggestionLocality
194
- if (changes.hasOwnProperty('maxSuggestionLocality') && !changes.maxSuggestionLocality.firstChange) {
195
- var wcChanges = changes.maxSuggestionLocality.currentValue;
196
- console.log('lib widget9 - maxSuggestionLocality', wcChanges);
197
- }
198
- // visibleSuggestionLocalityCount
199
- if (changes.hasOwnProperty('visibleSuggestionLocalityCount') && !changes.visibleSuggestionLocalityCount.firstChange) {
200
- var wcChanges = changes.visibleSuggestionLocalityCount.currentValue;
201
- console.log('lib widget9 - visibleSuggestionLocalityCount', wcChanges);
202
- }
203
- // sortCriteriaLocality
204
- if (changes.hasOwnProperty('sortCriteriaLocality') && !changes.sortCriteriaLocality.firstChange) {
205
- var wcChanges = changes.sortCriteriaLocality.currentValue;
206
- console.log('lib widget9 - sortCriteriaLocality', wcChanges);
207
- }
208
- // maxSuggestionStreet
209
- if (changes.hasOwnProperty('maxSuggestionStreet') && !changes.maxSuggestionStreet.firstChange) {
210
- var wcChanges = changes.maxSuggestionStreet.currentValue;
211
- console.log('lib widget9 - maxSuggestionStreet', wcChanges);
212
- }
213
- // visibleSuggestionStreetCount
214
- if (changes.hasOwnProperty('visibleSuggestionStreetCount') && !changes.visibleSuggestionStreetCount.firstChange) {
215
- var wcChanges = changes.visibleSuggestionStreetCount.currentValue;
216
- console.log('lib widget9 - visibleSuggestionStreetCount', wcChanges);
217
- }
218
- // sortCriteriaStreet
219
- if (changes.hasOwnProperty('sortCriteriaStreet') && !changes.sortCriteriaStreet.firstChange) {
220
- var wcChanges = changes.sortCriteriaStreet.currentValue;
221
- console.log('lib widget9 - sortCriteriaStreet', wcChanges);
222
- }
223
- // maxSuggestionStreetNb
224
- if (changes.hasOwnProperty('maxSuggestionStreetNb') && !changes.maxSuggestionStreetNb.firstChange) {
225
- var wcChanges = changes.maxSuggestionStreetNb.currentValue;
226
- console.log('lib widget9 - maxSuggestionStreetNb', wcChanges);
227
- }
228
- // visibleSuggestionStreetNbCount
229
- if (changes.hasOwnProperty('visibleSuggestionStreetNbCount') && !changes.visibleSuggestionStreetNbCount.firstChange) {
230
- var wcChanges = changes.visibleSuggestionStreetNbCount.currentValue;
231
- console.log('lib widget9 - visibleSuggestionStreetNbCount', wcChanges);
232
- }
233
- // sortCriteriaStreetNb
234
- if (changes.hasOwnProperty('sortCriteriaStreetNb') && !changes.sortCriteriaStreetNb.firstChange) {
235
- var wcChanges = changes.sortCriteriaStreetNb.currentValue;
236
- console.log('lib widget9 - sortCriteriaStreetNb', wcChanges);
237
- }
238
- // maxSuggestionBoxNb
239
- if (changes.hasOwnProperty('maxSuggestionBoxNb') && !changes.maxSuggestionBoxNb.firstChange) {
240
- var wcChanges = changes.maxSuggestionBoxNb.currentValue;
241
- console.log('lib widget9 - maxSuggestionBoxNb', wcChanges);
242
- }
243
- // visibleSuggestionBoxNbCount
244
- if (changes.hasOwnProperty('visibleSuggestionBoxNbCount') && !changes.visibleSuggestionBoxNbCount.firstChange) {
245
- var wcChanges = changes.visibleSuggestionBoxNbCount.currentValue;
246
- console.log('lib widget9 - visibleSuggestionBoxNbCount', wcChanges);
247
- }
248
- // sortCriteriaBoxNb
249
- if (changes.hasOwnProperty('sortCriteriaBoxNb') && !changes.sortCriteriaBoxNb.firstChange) {
250
- var wcChanges = changes.sortCriteriaBoxNb.currentValue;
251
- console.log('lib widget9 - sortCriteriaBoxNb', wcChanges);
252
- }
253
- };
254
- LibAddressAutocompleteByComponentComponent.prototype.clearWidget = function () {
255
- this.autocompleteBoxNb.clearWidget();
256
- this.autocompleteStreetNb.clearWidget();
257
- this.autocompleteStreet.clearWidget();
258
- this.autocompleteLocality.clearWidget();
259
- };
260
- LibAddressAutocompleteByComponentComponent.prototype.changeMinLevel = function (minLevel) {
261
- this.minLevel = minLevel;
262
- };
263
- // Called by the specific buttons in the app
264
- LibAddressAutocompleteByComponentComponent.prototype.onClearInput = function (focus) {
265
- if (this.showDebugMessageToConsole) {
266
- console.log('lib::onClearInput', focus);
267
- }
268
- /*
269
- if (focus === null || focus === undefined) {
270
- return;
271
- }*/
272
- this.quitPrefillMode();
273
- var setFocus = (focus === null || focus === undefined) ? false : focus.setFocus;
274
- switch (this.minLevel) {
275
- case 1:
276
- this.boxNumber = '';
277
- this.autocompleteBoxNb.clearInput(setFocus, false);
278
- this.clearInputEventEmitter.emit('BOX_NUMBER');
279
- break;
280
- case 2:
281
- this.boxNumber = '';
282
- this.streetNumber = '';
283
- this.autocompleteBoxNb.searchText = '';
284
- this.autocompleteBoxNb.streetNumber = '';
285
- this.autocompleteBoxNb.clearInput(setFocus, false);
286
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
287
- this.clearInputEventEmitter.emit('STREET_NUMBER');
288
- break;
289
- case 3:
290
- this.boxNumber = '';
291
- this.streetNumber = '';
292
- this.street = '';
293
- this.autocompleteBoxNb.searchText = '';
294
- this.autocompleteBoxNb.streetNumber = '';
295
- this.autocompleteBoxNb.clearInput(setFocus, false);
296
- this.autocompleteBoxNb.clearWidget();
297
- this.autocompleteStreetNb.searchText = '';
298
- this.autocompleteStreetNb.streetName = '';
299
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
300
- this.autocompleteStreet.clearInput(setFocus, false);
301
- this.clearInputEventEmitter.emit('STREET');
302
- break;
303
- default:
304
- // Box number
305
- this.boxNumber = '';
306
- if (this.autocompleteBoxNb) {
307
- this.autocompleteBoxNb.searchText = '';
308
- this.autocompleteBoxNb.streetNumber = '';
309
- this.autocompleteBoxNb.clearInput(setFocus, false);
310
- }
311
- // Street number
312
- this.streetNumber = '';
313
- if (this.autocompleteStreetNb) {
314
- this.autocompleteStreetNb.searchText = '';
315
- this.autocompleteStreetNb.streetName = '';
316
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
317
- }
318
- // Street name
319
- this.street = '';
320
- if (this.autocompleteStreet) {
321
- this.autocompleteStreet.searchText = '';
322
- this.autocompleteStreet.clearInput(setFocus, false);
323
- }
324
- // Locality
325
- this.locality = '';
326
- if (this.autocompleteLocality) {
327
- this.autocompleteLocality.searchText = '';
328
- this.autocompleteLocality.clearInput(setFocus, false);
329
- }
330
- this.clearInputEventEmitter.emit('LOCALITY');
331
- break;
332
- }
333
- };
334
- LibAddressAutocompleteByComponentComponent.prototype.getBoxPrefix = function () {
335
- var prefix = '';
336
- switch (this.selectedLanguage) {
337
- case 'fr':
338
- prefix = 'BTE';
339
- break;
340
- case 'nl':
341
- prefix = 'BUS';
342
- break;
343
- default:
344
- prefix = 'BOX';
345
- break;
346
- }
347
- return prefix;
348
- };
349
- LibAddressAutocompleteByComponentComponent.prototype.notifyAddressComplete = function () {
350
- var _this = this;
351
- // console.log('notify for address complete');
352
- if (this.showDebugMessageToConsole) {
353
- console.log('notifyAddressComplete', this.selectedAddress, 'nis9InResponse:' + this.nis9InResponse, typeof this.nis9InResponse);
354
- }
355
- if ((this.nis9InResponse === true || '' + this.nis9InResponse === 'true') && this.selectedAddress.hasOwnProperty('latitude') && this.selectedAddress.hasOwnProperty('longitude')) {
356
- var latitude = this.selectedAddress.latitude;
357
- var longitude = this.selectedAddress.longitude;
358
- if (this.showDebugMessageToConsole)
359
- console.log('calling nis9 service to get nis9 data (1):', longitude, latitude);
360
- this.nis9Service.determineNis9Data(longitude, latitude)
361
- .subscribe(function (data) {
362
- console.log('nis DATA:', data);
363
- /*
364
- nis DATA:
365
- {Status: 'success', data: Array(1)}
366
- Status: "success"
367
- data: ['25112A21-']
368
- */
369
- if (data !== undefined && data !== null && data.hasOwnProperty('Status') && data.Status === 'success') {
370
- var nis9Data = data.data;
371
- if (Array.isArray(nis9Data) && nis9Data.length === 1) {
372
- _this.selectedAddress.nis9 = nis9Data[0];
373
- }
374
- }
375
- _this.addressCompleteEventEmitter.emit(_this.selectedAddress);
376
- _this.emittedAddress = _this.selectedAddress;
377
- _this.updatePostalCodeLocality(_this.emittedAddress);
378
- });
379
- }
380
- else {
381
- if (this.showDebugMessageToConsole)
382
- console.log('NOT calling nis9 service to get nis9 data (1)');
383
- this.addressCompleteEventEmitter.emit(this.selectedAddress);
384
- this.emittedAddress = this.selectedAddress;
385
- this.updatePostalCodeLocality(this.emittedAddress);
386
- }
387
- };
388
- LibAddressAutocompleteByComponentComponent.prototype.onClearInputEventEmitter = function (event) {
389
- if (this.showDebugMessageToConsole) {
390
- console.log('lib::onClearInputEventEmitter', event);
391
- }
392
- this.quitPrefillMode();
393
- var nextAddress = this.selectedAddress; // this.emittedAddress;
394
- if (event === InputNameType.LOCALITY) {
395
- // Box number
396
- this.boxNumber = '';
397
- if (this.autocompleteBoxNb) {
398
- this.autocompleteBoxNb.searchText = '';
399
- this.autocompleteBoxNb.streetNumber = '';
400
- this.autocompleteBoxNb.clearInput(false, false);
401
- }
402
- // Street number
403
- this.streetNumber = '';
404
- if (this.autocompleteStreetNb) {
405
- this.autocompleteStreetNb.searchText = '';
406
- this.autocompleteStreetNb.streetName = '';
407
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
408
- }
409
- // Street name
410
- this.street = '';
411
- if (this.autocompleteStreet) {
412
- this.autocompleteStreet.searchText = '';
413
- this.autocompleteStreet.clearInput(false, false);
414
- }
415
- // Locality
416
- this.locality = '';
417
- if (this.autocompleteLocality) {
418
- this.autocompleteLocality.searchText = '';
419
- this.autocompleteLocality.clearInput(false, false);
420
- }
421
- nextAddress = null;
422
- }
423
- else if (event === InputNameType.STREET) {
424
- // Box number
425
- this.boxNumber = '';
426
- if (this.autocompleteBoxNb) {
427
- this.autocompleteBoxNb.searchText = '';
428
- this.autocompleteBoxNb.streetNumber = '';
429
- this.autocompleteBoxNb.clearInput(false, false);
430
- }
431
- // Street number
432
- this.streetNumber = '';
433
- if (this.autocompleteStreetNb) {
434
- this.autocompleteStreetNb.searchText = '';
435
- this.autocompleteStreetNb.streetName = '';
436
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
437
- }
438
- // Street name
439
- this.street = '';
440
- if (this.autocompleteStreet) {
441
- this.autocompleteStreet.searchText = '';
442
- this.autocompleteStreet.clearInput(false, false);
443
- }
444
- nextAddress = null;
445
- }
446
- else if (event === InputNameType.STREET_NUMBER) {
447
- // Box number
448
- this.boxNumber = '';
449
- if (this.autocompleteBoxNb) {
450
- this.autocompleteBoxNb.searchText = '';
451
- this.autocompleteBoxNb.streetNumber = '';
452
- this.autocompleteBoxNb.clearInput(false, false);
453
- }
454
- // Street number
455
- this.streetNumber = '';
456
- if (this.autocompleteStreetNb) {
457
- this.autocompleteStreetNb.searchText = '';
458
- // this.autocompleteStreetNb.streetName = '';
459
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
460
- }
461
- nextAddress = null;
462
- }
463
- else if (event === InputNameType.BOX_NUMBER) {
464
- // Box number
465
- this.boxNumber = '';
466
- if (this.autocompleteBoxNb) {
467
- this.autocompleteBoxNb.searchText = '';
468
- // this.autocompleteBoxNb.streetNumber = '';
469
- this.autocompleteBoxNb.clearInput(false, false);
470
- }
471
- // Attention: if not-in-list don't reset the address, just modify it
472
- var addressIsNotInList = nextAddress !== undefined && nextAddress !== null
473
- && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true
474
- ? true : false;
475
- /*
476
- if (addressIsNotInList)
477
- {
478
- delete nextAddress.boxNumber;
479
- nextAddress.isCompleteNotificationDone = false;
480
- if (this.streetNumberAddress !== null )
481
- {
482
- console.warn('reset box on not-in-list', this.streetNumberAddress);
483
-
484
- }
485
- }
486
- else
487
- {
488
- nextAddress = null;
489
- }
490
- */
491
- nextAddress = this.streetNumberAddress !== null ? this.streetNumberAddress : null;
492
- /*
493
- const addressIsNotInList
494
- = nextAddress !== null && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true
495
- ? true : false;
496
- */
497
- var addressIsComplete = nextAddress !== undefined && nextAddress !== null
498
- && nextAddress.hasOwnProperty('isComplete') && nextAddress.isComplete === true ? true : false;
499
- this.autocompleteStreetNb.addressIsComplete = addressIsComplete;
500
- }
501
- this.clearInputEventEmitter.emit(event);
502
- if (this.emittedAddress !== null) {
503
- if (nextAddress !== undefined && nextAddress !== null && nextAddress.hasOwnProperty('latitude') && nextAddress.hasOwnProperty('longitude')) {
504
- var latitude = nextAddress.latitude;
505
- var longitude = nextAddress.longitude;
506
- if (this.showDebugMessageToConsole)
507
- console.log('calling nis9 service to get nis9 data (2)', longitude, latitude);
508
- }
509
- else {
510
- if (this.showDebugMessageToConsole)
511
- console.log('NOT calling nis9 service to get nis9 data (2)');
512
- }
513
- this.addressCompleteEventEmitter.emit(nextAddress);
514
- this.emittedAddress = nextAddress;
515
- }
516
- // gka
517
- /*
518
- if (event === InputNameType.LOCALITY)
519
- {
520
- this.minLevel = ADDRESSLEVEL.LOCALITY;
521
- this.boxNumberPrefillData = null;
522
- this.streetNumberPrefillData = null;
523
- this.streetPrefillData = null;
524
- this.localityPrefillData = null;
525
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
526
- this.locality = '';
527
- this.postalCode = '';
528
- this.street = null;
529
- this.streetNumber = null;
530
- this.boxNumber = null;
531
- this.autocompleteBoxNb.clearInput(false, false);
532
- this.autocompleteBoxNb.streetName = '';
533
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
534
- this.autocompleteStreetNb.streetName = '';
535
- this.autocompleteStreet.clearInput(false, false);
536
- this.autocompleteStreet.locality = '';
537
- this.autocompleteLocality.clearInput(false, false);
538
- }
539
- if (event === InputNameType.STREET)
540
- {
541
- this.minLevel = ADDRESSLEVEL.STREET;
542
- this.boxNumberPrefillData = null;
543
- this.streetNumberPrefillData = null;
544
- this.streetPrefillData = null;
545
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
546
- this.street = null;
547
- this.streetNumber = null;
548
- this.boxNumber = null;
549
- this.autocompleteBoxNb.clearInput(false, false);
550
- this.autocompleteBoxNb.streetName = '';
551
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
552
- this.autocompleteStreetNb.streetName = '';
553
- this.autocompleteStreet.clearInput(false, false);
554
- // this.autocompleteLocality.clearInput(false, false);
555
- }
556
- if (event === InputNameType.STREET_NUMBER)
557
- {
558
- this.minLevel = ADDRESSLEVEL.STREET_NUMBER;
559
- this.boxNumberPrefillData = null;
560
- this.streetNumberPrefillData = null;
561
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
562
- this.streetNumber = null;
563
- this.boxNumber = null;
564
- this.autocompleteBoxNb.clearInput(false, false);
565
- this.autocompleteBoxNb.streetName = '';
566
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
567
- // this.autocompleteStreet.clearInput(false, false);
568
- // this.autocompleteLocality.clearInput(false, false);
569
- }
570
- if (event === InputNameType.BOX_NUMBER)
571
- {
572
- this.minLevel = ADDRESSLEVEL.BOX_NUMBER;
573
- this.boxNumberPrefillData = null;
574
- this.boxNumber = null;
575
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
576
- this.autocompleteBoxNb.clearInput(false, false);
577
- // this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
578
- // this.autocompleteStreet.clearInput(false, false);
579
- // this.autocompleteLocality.clearInput(false, false);
580
- }
581
- */
582
- };
583
- LibAddressAutocompleteByComponentComponent.prototype.resetLocality = function (event) {
584
- this.postalCode = '';
585
- this.locality = '';
586
- this.quitPrefillMode();
587
- this.onClearInputEventEmitter(InputNameType.STREET);
588
- this.setAddress(null, 4);
589
- };
590
- LibAddressAutocompleteByComponentComponent.prototype.resetStreet = function (event) {
591
- this.street = '';
592
- this.quitPrefillMode();
593
- this.onClearInputEventEmitter(InputNameType.STREET_NUMBER);
594
- this.autocompleteStreetNb.addressIsComplete = false;
595
- this.autocompleteStreetNb.streetName = '';
596
- this.setAddress(null, 3);
597
- };
598
- LibAddressAutocompleteByComponentComponent.prototype.resetStreetNumber = function (event, resetAddress) {
599
- if (resetAddress === void 0) { resetAddress = false; }
600
- // console.log('reset street numner!', event, resetAddress);
601
- this.streetNumber = '';
602
- this.quitPrefillMode();
603
- this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);
604
- this.autocompleteBoxNb.addressIsComplete = false;
605
- this.autocompleteBoxNb.streetNumber = '';
606
- this.setAddress(null, 2);
607
- // $$ 7 this.setAddress(null, 2); // $$ ?????
608
- /*
609
- if (resetAddress === true) {
610
- this.setAddress(/ *null* / this.selectedAddress);
611
- }*/
612
- };
613
- LibAddressAutocompleteByComponentComponent.prototype.resetBoxNumber = function (event, resetAddress) {
614
- if (resetAddress === void 0) { resetAddress = false; }
615
- // console.log('reset street numner!', event, resetAddress);
616
- this.boxNumber = '';
617
- this.quitPrefillMode();
618
- this.autocompleteBoxNb.addressIsComplete = false;
619
- this.setAddress(null, 1);
620
- // this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);
621
- // $$ 7 this.setAddress(null, 1); // $$ ?????
622
- /*
623
- if (resetAddress === true) {
624
- this.setAddress(/ *null* / this.selectedAddress);
625
- }*/
626
- };
627
- LibAddressAutocompleteByComponentComponent.prototype.enterPrefillMode = function () {
628
- if (this.showDebugMessageToConsole) {
629
- console.log('lib::enterPrefillMode()');
630
- }
631
- if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality) {
632
- this.autocompleteBoxNb.prefilling = true;
633
- this.autocompleteStreetNb.prefilling = true;
634
- this.autocompleteStreet.prefilling = true;
635
- this.autocompleteLocality.prefilling = true;
636
- this.autocompleteStreet.locality = '';
637
- this.autocompleteStreetNb.streetName = '';
638
- this.autocompleteBoxNb.streetNumber = '';
639
- }
640
- };
641
- LibAddressAutocompleteByComponentComponent.prototype.quitPrefillMode = function () {
642
- if (this.showDebugMessageToConsole) {
643
- console.log('lib::quitPrefillMode()');
644
- }
645
- if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality) {
646
- this.autocompleteBoxNb.prefilling = false;
647
- this.autocompleteStreetNb.prefilling = false;
648
- this.autocompleteStreet.prefilling = false;
649
- this.autocompleteLocality.prefilling = false;
650
- }
651
- this.processingPrefillData = false;
652
- };
653
- LibAddressAutocompleteByComponentComponent.prototype.setAddress = function (address, level) {
654
- if (this.showDebugMessageToConsole) {
655
- console.log('lib::setAddress - address part, level', address, level);
656
- }
657
- /* $$ $$
658
- if (this.selectedAddress && !address) {
659
- // console.log('reset address!');
660
- this.selectedAddress = null;
661
- this.streetAddress = null;
662
- this.streetNumberAddress = null;
663
- this.notifyAddressComplete();
664
- return;
665
- }
666
- */
667
- if (address === null || address === undefined) {
668
- var doNotify = (this.selectedAddress !== null && this.selectedAddress !== undefined) ? true : false;
669
- this.selectedAddress = null;
670
- this.autocompleteStreetNb.addressIsComplete = false;
671
- this.autocompleteBoxNb.addressIsComplete = false;
672
- if (doNotify) {
673
- this.notifyAddressComplete();
674
- }
675
- }
676
- if (address) {
677
- delete address.messages;
678
- this.selectedAddress = address;
679
- this.updateCompleteAddress();
680
- this.postalCode = address.postalCode ? address.postalCode : '';
681
- this.locality = address.localityName ? address.localityName : '';
682
- this.street = address.streetName ? address.streetName : '';
683
- // const notInList = address['not-in-list'];
684
- // const isNotInList = notInList !== null && notInList !== undefined && notInList === true;
685
- /*
686
- if (address.houseNumber) {
687
- if (!address.isComplete || isNotInList) {
688
- this.streetNumber = address.houseNumber ? address.houseNumber : '';
689
- } else {
690
- if (!address.boxNumber) {
691
- // console.log('calling reset street number !');
692
- if ( !this.processingPrefillData ) {
693
- this.resetStreetNumber(null, false);
694
- }
695
- // this.streetNumber = '';
696
- }
697
- }
698
- }
699
- */
700
- var addressIsComplete = address !== null && address !== undefined
701
- && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;
702
- var addressIsNotInList = address !== null && address !== undefined
703
- && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
704
- switch (level) {
705
- // Locality / Municipality and POstalCode
706
- case 4:
707
- this.updatePostalCodeLocality(address);
708
- /*
709
- this.autocompleteStreet.clearWidget();
710
- this.autocompleteStreetNb.searchText = '';
711
- this.autocompleteStreetNb.clearWidget();
712
- this.autocompleteStreetNb.searchText = '';
713
- this.autocompleteBoxNb.clearWidget();
714
- this.autocompleteBoxNb.searchText = '';
715
- */
716
- this.streetAddress = null;
717
- this.streetNumberAddress = null;
718
- //
719
- this.autocompleteStreet.searchText = '';
720
- this.autocompleteStreetNb.searchText = '';
721
- this.autocompleteStreetNb.streetName = '';
722
- this.autocompleteBoxNb.searchText = '';
723
- this.autocompleteBoxNb.streetNumber = '';
724
- break;
725
- // Street Name
726
- case 3:
727
- this.updatePostalCodeLocality(address);
728
- this.updateStreetName(address);
729
- this.streetAddress = address;
730
- this.streetNumberAddress = null;
731
- /*
732
- this.autocompleteStreetNb.clearWidget();
733
- this.autocompleteStreetNb.searchText = '';
734
- this.autocompleteBoxNb.clearWidget();
735
- this.autocompleteBoxNb.searchText = '';
736
- */
737
- this.autocompleteStreetNb.searchText = '';
738
- this.autocompleteBoxNb.searchText = '';
739
- this.autocompleteBoxNb.streetNumber = '';
740
- break;
741
- // STREET Number
742
- case 2:
743
- this.updatePostalCodeLocality(address);
744
- this.updateStreetName(address);
745
- this.updateStreetNumber(address); // $$
746
- this.streetAddress = address;
747
- this.streetNumberAddress = address;
748
- if (address.hasOwnProperty('isComplete') && address.isComplete === true) {
749
- this.autocompleteStreetNb.addressIsComplete = true;
750
- if (addressIsNotInList) {
751
- this.autocompleteBoxNb.streetNumber = address.houseNumber;
752
- }
753
- else {
754
- this.autocompleteBoxNb.streetNumber = '';
755
- }
756
- }
757
- else {
758
- this.autocompleteBoxNb.streetNumber = address.houseNumber;
759
- }
760
- /*
761
- this.autocompleteBoxNb.clearWidget();
762
- this.autocompleteBoxNb.searchText = '';
763
- */
764
- this.autocompleteBoxNb.searchText = '';
765
- break;
766
- // BOX Number
767
- case 1:
768
- {
769
- if (addressIsNotInList) {
770
- this.autocompleteStreetNb.addressIsComplete = false;
771
- }
772
- }
773
- break;
774
- default:
775
- break;
776
- }
777
- if (this.selectedAddress && this.selectedAddress.isComplete === undefined) {
778
- this.selectedAddress.isComplete = false;
779
- }
780
- /*
781
- if (address.isComplete === true ) {
782
- if (!this.selectedAddress.isCompleteNotificationDone) {
783
- this.selectedAddress.isCompleteNotificationDone = true;
784
- this.notifyAddressComplete();
785
- }
786
- } else {
787
- this.notifyAddressComplete();
788
- }
789
- */
790
- this.selectedAddress.isCompleteNotificationDone = true;
791
- this.notifyAddressComplete();
792
- }
793
- };
794
- LibAddressAutocompleteByComponentComponent.prototype.setLanguage = function (lang) {
795
- this.selectedLanguage = lang;
796
- };
797
- LibAddressAutocompleteByComponentComponent.prototype.setValidationMessage = function (/*message: string*/ message) {
798
- this.validationMessage = message;
799
- if (this.validationMessageOptionType === ValidationMessageOptionType.EMIT) {
800
- this.validationMessageEventEmitter.emit(message);
801
- }
802
- };
803
- LibAddressAutocompleteByComponentComponent.prototype.updatePostalCodeLocality = function (address) {
804
- if (address && address.postalCode && address.localityName) {
805
- this.postalCodeLocality = address.postalCode + ' ' + address.localityName;
806
- this.autocompleteLocality.searchText = this.postalCodeLocality;
807
- }
808
- };
809
- LibAddressAutocompleteByComponentComponent.prototype.updateStreetName = function (address) {
810
- if (address && address.streetName) {
811
- this.streetNameInput = address.streetName;
812
- }
813
- };
814
- LibAddressAutocompleteByComponentComponent.prototype.updateStreetNumber = function (address) {
815
- if (address && address.houseNumber) {
816
- this.streetNumberInput = address.houseNumber;
817
- }
818
- };
819
- LibAddressAutocompleteByComponentComponent.prototype.updateCompleteAddress = function () {
820
- var concatStr = '';
821
- concatStr += this.selectedAddress.streetName ? this.selectedAddress.streetName + " " : '';
822
- concatStr += this.selectedAddress.houseNumber ? this.selectedAddress.houseNumber + " " : '';
823
- concatStr += this.selectedAddress.boxNumber ? this.getBoxPrefix() + " " + this.selectedAddress.boxNumber + " " : '';
824
- concatStr += this.selectedAddress.postalCode ? this.selectedAddress.postalCode + " " : '';
825
- concatStr += this.selectedAddress.municipalityName ? this.selectedAddress.municipalityName + " " : '';
826
- this.completeAddress = concatStr;
827
- };
828
- LibAddressAutocompleteByComponentComponent.prototype.setValidationMessageOptionFromInput = function (option) {
829
- this.validationMessageOptionType = option.validationType;
830
- // console.log('addresse autocomplete - validation message option', this.validationMessageOptionType);
831
- };
832
- LibAddressAutocompleteByComponentComponent.prototype.onLocalityPrefillEvent = function (event) {
833
- if (this.showDebugMessageToConsole) {
834
- console.log('lib::locality prefill event received:', event);
835
- }
836
- /*
837
- if (event.perfectMatch)
838
- {
839
- this.addressParams.minLevel = / *3* / ADDRESSLEVEL.STREET;
840
- this.streetParams = this.addressParams;
841
- }
842
- */
843
- var data = event.prefillData;
844
- if (event.prefillData.prefillMunicipalityPerfectMatchFound === true) {
845
- var suggestion = data.prefillMunicipalityPerfectMatchSuggestion;
846
- var address = suggestion.address;
847
- this.updatePostalCodeLocality(address);
848
- this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.STREET;
849
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
850
- // this.localityPrefillData = new PrefillData(this.addressParams);
851
- // Object.assign(this.localityPrefillData, this.addressParams);
852
- this.prefillData = event.prefillData;
853
- this.prefillData.ts = new Date();
854
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET;
855
- // Be sure to propagate the localityName in place of the municipalityName !
856
- var suggestionAddress = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;
857
- var suggestionAddressLocalityName = suggestionAddress.localityName;
858
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
859
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
860
- // this.updatePostalCodeLocality(suggestionAddress);
861
- var streetName = this.prefillData.parameters.streetName;
862
- if (streetName === null || streetName === undefined || streetName === '') {
863
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
864
- // this.quitPrefillMode();
865
- // this.updatePostalCodeLocality(suggestionAddress);
866
- }
867
- /*
868
- const streetName = this.prefillData.parameters.streetName;
869
- if (streetName === null || streetName === undefined || streetName === '')
870
- {
871
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
872
- this.quitPrefillMode();
873
- // this.updatePostalCodeLocality(suggestionAddress);
874
- }
875
- else
876
- {
877
- if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking street match... ', this.prefillData); }
878
- this.streetPrefillData = this.prefillData;
879
- }
880
- */
881
- this.streetPrefillData = this.prefillData;
882
- }
883
- else {
884
- // const cpAndLocality = this.prefillData.parameters.postalCode + this.prefillData.parameters.municipalityName;
885
- var cpAndLocality = data.parameters.postalCode + data.parameters.municipalityName;
886
- this.autocompleteStreet.locality = '';
887
- if (cpAndLocality === null || cpAndLocality === undefined || cpAndLocality.length === 0) {
888
- this.setAddress(null, ADDRESSLEVEL.LOCALITY);
889
- }
890
- this.quitPrefillMode();
891
- }
892
- };
893
- LibAddressAutocompleteByComponentComponent.prototype.onStreetPrefillEvent = function (event) {
894
- if (this.showDebugMessageToConsole) {
895
- console.log('lib::street: prefill event received', event);
896
- }
897
- /*
898
- const data: PrefillData = event.prefillData;
899
- if (data.prefillStreetPerfectMatchFound === true )
900
- {
901
- console.log('lib::onStreetPrefillEvent: MATCH FOUND', data);
902
- this.postalCodeLocality = 'TRUC-MUCHE';
903
- this.postalCodeLocality = 'TRUC-MUCHE 2';
904
- this.autocompleteLocality.searchText = this.postalCodeLocality;
905
- }
906
- */
907
- var data = event.prefillData;
908
- if (event.prefillData.prefillStreetPerfectMatchFound === true) {
909
- // if (this.showDebugMessageToConsole) { console.log('lib::onStreetPrefillEvent: MATCH FOUND', data); }
910
- var suggestion = data.prefillStreetPerfectMatchSuggestion;
911
- var address = suggestion.address;
912
- this.updateStreetName(address);
913
- this.addressParams.minLevel = ADDRESSLEVEL.STREET_NUMBER;
914
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
915
- // this.localityPrefillData = new PrefillData(this.addressParams);
916
- // Object.assign(this.localityPrefillData, this.addressParams);
917
- this.prefillData = event.prefillData;
918
- this.prefillData.ts = new Date();
919
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET_NUMBER;
920
- var suggestionAddress = this.prefillData.prefillStreetPerfectMatchSuggestion.address;
921
- var suggestionAddressLocalityName = suggestionAddress.localityName;
922
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
923
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
924
- this.prefillData.parameters.streetName = suggestionAddress.streetName;
925
- // this.updatePostalCodeLocality(suggestionAddress);
926
- // this.updatePostalCodeLocality(suggestionAddress);
927
- var streetNumber = this.prefillData.parameters.streetNumber;
928
- if (streetNumber === null || streetNumber === undefined || streetNumber === '') {
929
- this.setAddress(address, ADDRESSLEVEL.STREET);
930
- // this.quitPrefillMode();
931
- }
932
- /*
933
- const streetNumber = this.prefillData.parameters.streetNumber;
934
- if (streetNumber === null || streetNumber === undefined || streetNumber === '')
935
- {
936
- this.setAddress(address, ADDRESSLEVEL.STREET);
937
- this.quitPrefillMode();
938
- }
939
- else
940
- {
941
- if (this.showDebugMessageToConsole) {console.log('lib::prefill: trigger checking street number match... ', this.prefillData);}
942
- this.streetNumberPrefillData = this.prefillData;
943
- }
944
- */
945
- this.streetNumberPrefillData = this.prefillData;
946
- }
947
- else {
948
- var prefillStreetName = this.prefillData.parameters.streetName;
949
- var address = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;
950
- this.autocompleteStreetNb.streetName = '';
951
- if (this.showDebugMessageToConsole) {
952
- console.error('lib::onStreetPrefillEvent - NO MATCH AT STREET LEVEL', prefillStreetName);
953
- }
954
- if (prefillStreetName === null || prefillStreetName === undefined || prefillStreetName.length === 0) {
955
- // if (this.showDebugMessageToConsole) {console.log('lib::onStreetPrefillEvent: NO MATCH FOUND - set address', data, address); }
956
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
957
- }
958
- else {
959
- // address.streetName = prefillStreetName;
960
- address.searchBarString = prefillStreetName;
961
- this.setAddress(address, ADDRESSLEVEL.STREET);
962
- }
963
- this.quitPrefillMode();
964
- }
965
- };
966
- LibAddressAutocompleteByComponentComponent.prototype.onStreetNumberPrefillEvent = function (event) {
967
- if (this.showDebugMessageToConsole) {
968
- console.log('lib::street number prefill event received:', event);
969
- }
970
- var data = event.prefillData;
971
- if (data.prefillStreetNumberPerfectMatchFound === true) {
972
- var suggestion = data.prefillStreetNumberPerfectMatchSuggestion;
973
- var address = suggestion.address;
974
- this.updateStreetNumber(address);
975
- this.autocompleteStreetNb.selectedAddress = address;
976
- var addressIsComplete = address && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;
977
- var addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
978
- if (addressIsComplete && !addressIsNotInList) {
979
- // found address - perfect matchat street number level
980
- // Nothing to do anymore
981
- this.autocompleteStreetNb.addressIsComplete = true;
982
- this.quitPrefillMode();
983
- }
984
- else {
985
- this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
986
- this.prefillData = event.prefillData;
987
- this.prefillData.ts = new Date();
988
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;
989
- // const suggestionAddressLocalityName
990
- // = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address.localityName;
991
- var suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
992
- var suggestionAddressLocalityName = suggestionAddress.localityName;
993
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
994
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
995
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
996
- this.prefillData.parameters.streetName = suggestionAddress.streetName;
997
- this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;
998
- // this.updatePostalCodeLocality(suggestionAddress);
999
- // this.updatePostalCodeLocality(suggestionAddress);
1000
- var boxNumber = this.prefillData.parameters.boxNumber;
1001
- if (!addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '')) {
1002
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1003
- // this.quitPrefillMode();
1004
- }
1005
- /*
1006
- const boxNumber = this.prefillData.parameters.boxNumber;
1007
- if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )
1008
- {
1009
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1010
- this.quitPrefillMode();
1011
- }
1012
- else
1013
- {
1014
- if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking box number match... ', this.prefillData); }
1015
- this.boxNumberPrefillData = this.prefillData;
1016
- }
1017
- */
1018
- this.boxNumberPrefillData = this.prefillData;
1019
- }
1020
- }
1021
- else {
1022
- var prefillStreetNumber = this.prefillData.parameters.streetNumber;
1023
- var address = this.prefillData.prefillStreetPerfectMatchSuggestion.address;
1024
- this.autocompleteBoxNb.streetNumber = '';
1025
- if (prefillStreetNumber === null || prefillStreetNumber === undefined || prefillStreetNumber.length === 0) {
1026
- this.setAddress(address, ADDRESSLEVEL.STREET);
1027
- }
1028
- else {
1029
- // address.houseNumber = prefillStreetNumber;
1030
- address.searchBarString = prefillStreetNumber;
1031
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1032
- }
1033
- this.quitPrefillMode();
1034
- }
1035
- };
1036
- LibAddressAutocompleteByComponentComponent.prototype.onBoxNumberPrefillEvent = function (event) {
1037
- if (this.showDebugMessageToConsole) {
1038
- console.log('lib::prefill: box number event received:', event);
1039
- }
1040
- var data = event.prefillData;
1041
- if (data.prefillBoxNumberPerfectMatchFound === true) {
1042
- var suggestion = data.prefillBoxNumberPerfectMatchSuggestion;
1043
- var address = suggestion.address;
1044
- this.autocompleteBoxNb.selectedAddress = address;
1045
- this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1046
- }
1047
- else {
1048
- var prefillBoxNumber = this.prefillData.parameters.boxNumber;
1049
- var address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
1050
- if (prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0) {
1051
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1052
- }
1053
- else {
1054
- // address.boxNumber = prefillBoxNumber;
1055
- address.searchBarString = prefillBoxNumber;
1056
- this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1057
- }
1058
- }
1059
- this.quitPrefillMode();
1060
- };
1061
- LibAddressAutocompleteByComponentComponent.ctorParameters = function () { return [
1062
- { type: Nis9Service },
1063
- { type: HttpService }
1064
- ]; };
1065
- __decorate([
1066
- ViewChild(LocalityComponent, { static: false })
1067
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteLocality", void 0);
1068
- __decorate([
1069
- ViewChild(StreetComponent, { static: false })
1070
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteStreet", void 0);
1071
- __decorate([
1072
- ViewChild(StreetNumberComponent, { static: false })
1073
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteStreetNb", void 0);
1074
- __decorate([
1075
- ViewChild(BoxNumberComponent, { static: false })
1076
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteBoxNb", void 0);
1077
- __decorate([
1078
- Input()
1079
- ], LibAddressAutocompleteByComponentComponent.prototype, "inputLang", null);
1080
- __decorate([
1081
- Input()
1082
- ], LibAddressAutocompleteByComponentComponent.prototype, "clearInput", null);
1083
- __decorate([
1084
- Input()
1085
- ], LibAddressAutocompleteByComponentComponent.prototype, "validationMessageOption", null);
1086
- __decorate([
1087
- Input()
1088
- ], LibAddressAutocompleteByComponentComponent.prototype, "defaultLang", void 0);
1089
- __decorate([
1090
- Input()
1091
- ], LibAddressAutocompleteByComponentComponent.prototype, "showDebugMessageToConsole", void 0);
1092
- __decorate([
1093
- Input()
1094
- ], LibAddressAutocompleteByComponentComponent.prototype, "minLevel", void 0);
1095
- __decorate([
1096
- Input()
1097
- ], LibAddressAutocompleteByComponentComponent.prototype, "notInListAllowed", void 0);
1098
- __decorate([
1099
- Input()
1100
- ], LibAddressAutocompleteByComponentComponent.prototype, "addressParams", void 0);
1101
- __decorate([
1102
- Input()
1103
- ], LibAddressAutocompleteByComponentComponent.prototype, "messageOption", void 0);
1104
- __decorate([
1105
- Input()
1106
- ], LibAddressAutocompleteByComponentComponent.prototype, "localityUrl", void 0);
1107
- __decorate([
1108
- Input()
1109
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionLocality", void 0);
1110
- __decorate([
1111
- Input()
1112
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionLocalityCount", void 0);
1113
- __decorate([
1114
- Input()
1115
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaLocality", void 0);
1116
- __decorate([
1117
- Input()
1118
- ], LibAddressAutocompleteByComponentComponent.prototype, "streetUrl", void 0);
1119
- __decorate([
1120
- Input()
1121
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionStreet", void 0);
1122
- __decorate([
1123
- Input()
1124
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionStreetCount", void 0);
1125
- __decorate([
1126
- Input()
1127
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaStreet", void 0);
1128
- __decorate([
1129
- Input()
1130
- ], LibAddressAutocompleteByComponentComponent.prototype, "streetNumberUrl", void 0);
1131
- __decorate([
1132
- Input()
1133
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionStreetNb", void 0);
1134
- __decorate([
1135
- Input()
1136
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionStreetNbCount", void 0);
1137
- __decorate([
1138
- Input()
1139
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaStreetNb", void 0);
1140
- __decorate([
1141
- Input()
1142
- ], LibAddressAutocompleteByComponentComponent.prototype, "boxNumberUrl", void 0);
1143
- __decorate([
1144
- Input()
1145
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionBoxNb", void 0);
1146
- __decorate([
1147
- Input()
1148
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionBoxNbCount", void 0);
1149
- __decorate([
1150
- Input()
1151
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaBoxNb", void 0);
1152
- __decorate([
1153
- Output()
1154
- ], LibAddressAutocompleteByComponentComponent.prototype, "addressCompleteEventEmitter", void 0);
1155
- __decorate([
1156
- Output()
1157
- ], LibAddressAutocompleteByComponentComponent.prototype, "validationMessageEventEmitter", void 0);
1158
- __decorate([
1159
- Output()
1160
- ], LibAddressAutocompleteByComponentComponent.prototype, "clearInputEventEmitter", void 0);
1161
- __decorate([
1162
- Input()
1163
- ], LibAddressAutocompleteByComponentComponent.prototype, "apiKey", void 0);
1164
- __decorate([
1165
- Input()
1166
- ], LibAddressAutocompleteByComponentComponent.prototype, "isReadonly", void 0);
1167
- __decorate([
1168
- Input()
1169
- ], LibAddressAutocompleteByComponentComponent.prototype, "nis9InResponse", void 0);
1170
- __decorate([
1171
- Input()
1172
- ], LibAddressAutocompleteByComponentComponent.prototype, "nis9ServiceURL", void 0);
1173
- LibAddressAutocompleteByComponentComponent = __decorate([
1174
- Component({
1175
- selector: 'bp-lib-address-autocomplete-by-component',
1176
- template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"></bp-box-number>\r\n</div>",
1177
- styles: [""]
1178
- })
1179
- ], LibAddressAutocompleteByComponentComponent);
1180
- return LibAddressAutocompleteByComponentComponent;
1181
- }());
1182
- export { LibAddressAutocompleteByComponentComponent };
1183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU90RDtJQXdIRSxvREFDVSxXQUF3QixFQUN4QixXQUF3QjtRQUR4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQW5IbEMscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBR3hCLFlBQU8sR0FBRywyRkFBMkYsQ0FBQztRQUN0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UUFEQyxLQUFLLEVBQUU7c0ZBQ2E7SUFJckI7UUFEQyxLQUFLLEVBQUU7c0ZBQ1U7SUFwSFAsMENBQTBDO1FBTHRELFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSwwQ0FBMEM7WUFDcEQsNitKQUFxRTs7U0FFdEUsQ0FBQztPQUNXLDBDQUEwQyxDQXVzQ3REO0lBQUQsaURBQUM7Q0FBQSxBQXZzQ0QsSUF1c0NDO1NBdnNDWSwwQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByZWZpbGxlZFBhcmFtZXRlcnMgfSBmcm9tICcuL3V0aWxzL3ByZWZpbGxlZC1wYXJhbWV0ZXJzJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSB9IGZyb20gJy4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2Utb3B0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICcuL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl0eUNvbXBvbmVudCB9IGZyb20gJy4vbG9jYWxpdHkvbG9jYWxpdHkuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmVldENvbXBvbmVudCB9IGZyb20gJy4vc3RyZWV0L3N0cmVldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyZWV0TnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdHJlZXQtbnVtYmVyL3N0cmVldC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJveE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vYm94LW51bWJlci9ib3gtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBRERSRVNTTEVWRUwgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHsgUHJlZmlsbERhdGEgfSBmcm9tICcuL3V0aWxzL3ByZWZpbGwtZGF0YSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuL3V0aWxzL3ByZWZsbGwuZXZlbnQnO1xuaW1wb3J0IHsgSW5wdXROYW1lVHlwZSB9IGZyb20gJy4vZW51bS9pbnB1dC1uYW1lLmVudW0nO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOaXM5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbmlzOS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnAtbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJBZGRyZXNzQXV0b2NvbXBsZXRlQnlDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBAVmlld0NoaWxkKExvY2FsaXR5Q29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVMb2NhbGl0eTtcbiAgQFZpZXdDaGlsZChTdHJlZXRDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZVN0cmVldDtcbiAgQFZpZXdDaGlsZChTdHJlZXROdW1iZXJDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZVN0cmVldE5iO1xuICBAVmlld0NoaWxkKEJveE51bWJlckNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlQm94TmI7XG5cbiAgc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGJhc2VVcmwgPSBcImh0dHBzOi8vYXBpLm1haWxvcHMuYnBvc3QuY2xvdWQvcm9hLWluZm8vZXh0ZXJuYWxNYWlsaW5nQWRkcmVzc1Byb29maW5nUmVzdC9hdXRvY29tcGxldGUvXCI7XG4gIHByaXZhdGUgZGVmYXVsdEFwaUtleT0nY3lSa0tPRDczTzFET2RnY0RMTG5zYU9pRGg2T3lPa3QzQkJUNUpVMSc7XG4gIFxuICB1c2VkTG9jYWxpdHlVcmwgPSB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICB1c2VkU3RyZWV0VXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gIHVzZWRTdHJlZXROdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgdXNlZEJveE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdib3hOdW1iZXInO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UodmFsKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMub25DbGVhcklucHV0KGZvY3VzKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uKG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbik7XG4gIH1cblxuICBASW5wdXQoKVxuICBkZWZhdWx0TGFuZzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluTGV2ZWw6IG51bWJlcjtcbiAgQElucHV0KCkgbm90SW5MaXN0QWxsb3dlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7XG5cbiAgLy8gTE9DQUxJVFlcbiAgQElucHV0KCkgbG9jYWxpdHlVcmwgPSB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uTG9jYWxpdHkgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFMb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlTG9jYWxpdHk6IHN0cmluZztcbiAgLy8gbG9jYWxpdHlQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGxvY2FsaXR5UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVRcbiAgQElucHV0KCkgc3RyZWV0VXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0OiBzdHJpbmc7XG4gIC8vIHN0cmVldFBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVQgTlVNQkVSXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgQElucHV0KCkgc3RyZWV0TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXROYiA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldE5iOiBzdHJpbmc7XG4gIC8vIHN0cmVldE51bWJlclBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0TnVtYmVyUHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBCT1ggTlVNQkVSXG4gIEBJbnB1dCgpIGJveE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdib3hOdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uQm94TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFCb3hOYjogc3RyaW5nO1xuICAvLyBib3hQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGJveE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cblxuICBib3hOdW1iZXI6IHN0cmluZztcbiAgY29tcGxldGVBZGRyZXNzOiBzdHJpbmc7XG4gIGVtaXR0ZWRBZGRyZXNzOiBhbnkgPSBudWxsO1xuICBsb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIHNlbGVjdGVkQWRkcmVzczogYW55O1xuICBzdHJlZXQ6IHN0cmluZztcbiAgc3RyZWV0QWRkcmVzczogYW55O1xuICBzdHJlZXROYW1lSW5wdXQ6IHN0cmluZztcbiAgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XG4gIHN0cmVldE51bWJlckFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TnVtYmVySW5wdXQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfSA9IHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6ICcnfTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGU7XG5cblxuICBAT3V0cHV0KCkgYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBwcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcblxuXG4gIC8vIFBhc3MgdGhlIEFQSSBrZXkgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgbGlicmFyeSAhXG4gIEBJbnB1dCgpXG4gIGFwaUtleT10aGlzLmRlZmF1bHRBcGlLZXk7XG5cblxuICAvLyBzZXQgdGhlIHdpZGdldCBhcyByZWFkb25seSBhbmQgYWRkIE5JUzkgcXVlcnkgcGFyYW1ldGVyXG4gIEBJbnB1dCgpXG4gIGlzUmVhZG9ubHk9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbmlzOUluUmVzcG9uc2U9ZmFsc2U7XG5cbiAgLy8gaHR0cHM6Ly9iZ3MuYnBvc3QuYmUvc2V0LXNlbGVjdGlvbi1jaXJjbGU/bG5nPTQuMzYwNTM3NTcyNTQxOTQ4JmxhdD01MC44NDA2MzU4MjgwNjAzNyZyYWRpdXM9MC4wMDFcbiAgQElucHV0KClcbiAgbmlzOVNlcnZpY2VVUkw9Jyc7XG5cbiAgaXNDb21wb25lbnRSZWFkeSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmlzOVNlcnZpY2U6IE5pczlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZFxuICB7XG4gICAgLy9jb25zb2xlLndhcm4oJ2xpYiAtIG5nT25Jbml0Jyk7XG5cbiAgICB0aGlzLm5pczlTZXJ2aWNlLnNldE5pczlTZXJ2aWNlVVJMKHRoaXMubmlzOVNlcnZpY2VVUkwpO1xuXG4gICAgY29uc3QgYXBpS2V5ID0gdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmFwaUtleSkgPyB0aGlzLmFwaUtleSA6IHRoaXMuZGVmYXVsdEFwaUtleTtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldEFwaUtleSggYXBpS2V5ICk7XG4gICAgXG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5sb2NhbGl0eVVybCkgKSB0aGlzLnVzZWRMb2NhbGl0eVVybD10aGlzLmxvY2FsaXR5VXJsO1xuICAgIGlmKCB0aGlzLmlzVmFsaWREYXRhKHRoaXMuc3RyZWV0VXJsKSApIHRoaXMudXNlZFN0cmVldFVybD10aGlzLnN0cmVldFVybDtcbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLnN0cmVldE51bWJlclVybCkgKSB0aGlzLnVzZWRTdHJlZXROdW1iZXJVcmw9dGhpcy5zdHJlZXROdW1iZXJVcmw7XG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5ib3hOdW1iZXJVcmwpICkgdGhpcy51c2VkQm94TnVtYmVyVXJsPXRoaXMuYm94TnVtYmVyVXJsO1xuXG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5pc0NvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIGlzVmFsaWREYXRhKCBzdHI6IHN0cmluZyk6IGJvb2xlYW5cbiAge1xuICAgIHJldHVybiBzdHIhPT11bmRlZmluZWQgJiYgc3RyIT09bnVsbCAmJiBzdHIubGVuZ3RoPjA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpXG4gIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pXG4gICAge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgaWYgKGNoYW5nZXMpXG4gICAge1xuICAgICAgLy8gY29kZSBmb3IgdHJhY2luZ1xuICAgICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXMpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FwaUtleScpICYmICFjaGFuZ2VzLmFwaUtleS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBhcGlLZXkgPSB0aGlzLmFwaUtleSE9PW51bGwgJiYgdGhpcy5hcGlLZXkhPT11bmRlZmluZWQgJiYgdGhpcy5hcGlLZXkubGVuZ3RoPjAgXG4gICAgICAgICAgICA/IHRoaXMuYXBpS2V5XG4gICAgICAgICAgICA6IHRoaXMuZGVmYXVsdEFwaUtleTtcbiAgICAgICAgdGhpcy5odHRwU2VydmljZS5zZXRBcGlLZXkoIGFwaUtleSApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbG9jYWxpdHlVcmwnKSAmJiAhY2hhbmdlcy5sb2NhbGl0eVVybC5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBsb2NhbGl0eVVybCA9IHRoaXMubG9jYWxpdHlVcmwhPT1udWxsICYmIHRoaXMubG9jYWxpdHlVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5sb2NhbGl0eVVybC5sZW5ndGg+MCBcbiAgICAgICAgICAgID8gdGhpcy5sb2NhbGl0eVVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICAgICAgICB0aGlzLnVzZWRMb2NhbGl0eVVybD1sb2NhbGl0eVVybDtcbiAgICAgICAgY29uc29sZS5sb2coJ25nT25DaGFuZ2VzIC0gbG9jYWxpdHlVcmw6ICcsIGxvY2FsaXR5VXJsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXRVcmwnKSAmJiAhY2hhbmdlcy5zdHJlZXRVcmwuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RyZWV0VXJsID0gdGhpcy5zdHJlZXRVcmwhPT1udWxsICYmIHRoaXMuc3RyZWV0VXJsIT09dW5kZWZpbmVkICYmIHRoaXMuc3RyZWV0VXJsLmxlbmd0aD4wIFxuICAgICAgICAgICAgPyB0aGlzLnN0cmVldFVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0JztcbiAgICAgICAgdGhpcy5zdHJlZXRVcmw9c3RyZWV0VXJsO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlclVybCcpICYmICFjaGFuZ2VzLnN0cmVldE51bWJlclVybC5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBzdHJlZXROdW1iZXJVcmwgPSB0aGlzLnN0cmVldE51bWJlclVybCE9PW51bGwgJiYgdGhpcy5zdHJlZXROdW1iZXJVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5zdHJlZXROdW1iZXJVcmwubGVuZ3RoPjAgXG4gICAgICAgICAgICA/IHRoaXMuc3RyZWV0TnVtYmVyVXJsXG4gICAgICAgICAgICA6IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlclVybD1zdHJlZXROdW1iZXJVcmw7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyVXJsJykgJiYgIWNoYW5nZXMuYm94TnVtYmVyVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGJveE51bWJlclVybCA9IHRoaXMuYm94TnVtYmVyVXJsIT09bnVsbCAmJiB0aGlzLmJveE51bWJlclVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLmJveE51bWJlclVybC5sZW5ndGg+MCBcbiAgICAgICAgICAgID8gdGhpcy5ib3hOdW1iZXJVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyVXJsPWJveE51bWJlclVybDtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykgJiYgIWNoYW5nZXMuYWRkcmVzc1BhcmFtcy5maXJzdENoYW5nZSkge1xuICAgICAgLy8gaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FkZHJlc3NQYXJhbXMnKSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW50ZXJQcmVmaWxsTW9kZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgLypcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuTE9DQUxJVFkpO1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjp3aWRnZXQgZGV0ZWN0ZWQgcHJlZmlsbGluZycsIHRoaXMuYWRkcmVzc1BhcmFtcyk7IH1cbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyo0Ki8gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6Y2hlY2tpbmcgbG9jYWxpdHkgbWF0Y2guLi4gJywgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhKTsgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlQYXJhbWV0ZXJzQ2hhbmdlc1RvQ29uc29sZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgLy8gbWVzc2FnZU9wdGlvblxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtZXNzYWdlT3B0aW9uJykgJiYgIWNoYW5nZXMubWVzc2FnZU9wdGlvbi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tZXNzYWdlT3B0aW9uLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1lc3NhZ2VPcHRpb24nLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uTG9jYWxpdHknKSAmJiAhY2hhbmdlcy5tYXhTdWdnZXN0aW9uTG9jYWxpdHkuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMubWF4U3VnZ2VzdGlvbkxvY2FsaXR5LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBzb3J0Q3JpdGVyaWFMb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFMb2NhbGl0eScpICYmICFjaGFuZ2VzLnNvcnRDcml0ZXJpYUxvY2FsaXR5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnNvcnRDcml0ZXJpYUxvY2FsaXR5LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUxvY2FsaXR5Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXQnKSAmJiAhY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25TdHJlZXQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudC5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYVN0cmVldCcpICYmICFjaGFuZ2VzLnNvcnRDcml0ZXJpYVN0cmVldC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhU3RyZWV0Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvblN0cmVldE5iJykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvblN0cmVldE5iLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25TdHJlZXROYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uU3RyZWV0TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50JykgJiYgIWNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudC5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFTdHJlZXROYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXROYicpICYmICFjaGFuZ2VzLnNvcnRDcml0ZXJpYVN0cmVldE5iLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnNvcnRDcml0ZXJpYVN0cmVldE5iLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkJveE5iJykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvbkJveE5iLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Cb3hOYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uQm94TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50JykgJiYgIWNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudC5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFCb3hOYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFCb3hOYicpICYmICFjaGFuZ2VzLnNvcnRDcml0ZXJpYUJveE5iLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnNvcnRDcml0ZXJpYUJveE5iLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcldpZGdldCgpO1xuICB9XG5cbiAgY2hhbmdlTWluTGV2ZWwobWluTGV2ZWw6IG51bWJlcikge1xuICAgIHRoaXMubWluTGV2ZWwgPSBtaW5MZXZlbDtcbiAgfVxuXG4gIC8vIENhbGxlZCBieSB0aGUgc3BlY2lmaWMgYnV0dG9ucyBpbiB0aGUgYXBwXG4gIG9uQ2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvbkNsZWFySW5wdXQnLCBmb2N1cyk7IH1cblxuICAgIC8qXG4gICAgaWYgKGZvY3VzID09PSBudWxsIHx8IGZvY3VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9Ki9cblxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG5cbiAgICBjb25zdCBzZXRGb2N1cyA9IChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogZm9jdXMuc2V0Rm9jdXM7XG5cbiAgICBzd2l0Y2ggKHRoaXMubWluTGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBMb2NhbGl0eVxuICAgICAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdMT0NBTElUWScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldEJveFByZWZpeCgpOiBzdHJpbmcge1xuICAgIGxldCBwcmVmaXggPSAnJztcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSkge1xuICAgICAgY2FzZSAnZnInOlxuICAgICAgICBwcmVmaXggPSAnQlRFJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdubCc6XG4gICAgICAgICAgcHJlZml4ID0gJ0JVUyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwcmVmaXggPSAnQk9YJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBub3RpZnlBZGRyZXNzQ29tcGxldGUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ25vdGlmeSBmb3IgYWRkcmVzcyBjb21wbGV0ZScpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ25vdGlmeUFkZHJlc3NDb21wbGV0ZScsIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLCAnbmlzOUluUmVzcG9uc2U6Jyt0aGlzLm5pczlJblJlc3BvbnNlLCB0eXBlb2YgdGhpcy5uaXM5SW5SZXNwb25zZSk7XG4gICAgfVxuXG4gICAgaWYoICh0aGlzLm5pczlJblJlc3BvbnNlID09PSB0cnVlIHx8ICcnK3RoaXMubmlzOUluUmVzcG9uc2UgPT09ICd0cnVlJykgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xhdGl0dWRlJykgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xvbmdpdHVkZScpKVxuICAgIHtcbiAgICAgIGNvbnN0IGxhdGl0dWRlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubGF0aXR1ZGU7XG4gICAgICBjb25zdCBsb25naXR1ZGUgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5sb25naXR1ZGU7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLmxvZygnY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMSk6JywgbG9uZ2l0dWRlLCBsYXRpdHVkZSk7XG5cbiAgICAgIHRoaXMubmlzOVNlcnZpY2UuZGV0ZXJtaW5lTmlzOURhdGEobG9uZ2l0dWRlLCBsYXRpdHVkZSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCduaXMgREFUQTonLCBkYXRhKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIG5pcyBEQVRBOiBcbiAgICAgICAgICB7U3RhdHVzOiAnc3VjY2VzcycsIGRhdGE6IEFycmF5KDEpfVxuICAgICAgICAgIFN0YXR1czogXCJzdWNjZXNzXCJcbiAgICAgICAgICBkYXRhOiBbJzI1MTEyQTIxLSddXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZihkYXRhIT09dW5kZWZpbmVkICYmIGRhdGEgIT09bnVsbCAmJiBkYXRhLmhhc093blByb3BlcnR5KCdTdGF0dXMnKSAmJiBkYXRhLlN0YXR1cz09PSdzdWNjZXNzJylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBuaXM5RGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkobmlzOURhdGEpICYmIG5pczlEYXRhLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MubmlzOSA9IG5pczlEYXRhWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eSh0aGlzLmVtaXR0ZWRBZGRyZXNzKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMSknKTtcbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gICAgfVxuXG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoZXZlbnQpIHtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJywgZXZlbnQpOyB9XG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgbGV0IG5leHRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7IC8vIHRoaXMuZW1pdHRlZEFkZHJlc3M7XG5cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbnRpb246IGlmIG5vdC1pbi1saXN0IGRvbid0IHJlc2V0IHRoZSBhZGRyZXNzLCBqdXN0IG1vZGlmeSBpdFxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiAgbmV4dEFkZHJlc3MgIT09IG51bGxcbiAgICAgICAgICAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgIHtcbiAgICAgICAgZGVsZXRlIG5leHRBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCApXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3Jlc2V0IGJveCBvbiBub3QtaW4tbGlzdCcsIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBuZXh0QWRkcmVzcyA9IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCA/IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA6IG51bGw7XG4gICAgICAvKlxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAqL1xuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGVcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3NJc0NvbXBsZXRlO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmVtaXR0ZWRBZGRyZXNzICE9PSBudWxsICkge1xuICAgICAgaWYobmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbGF0aXR1ZGUnKSAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbG9uZ2l0dWRlJykpXG4gICAgICB7XG4gICAgICAgIGNvbnN0IGxhdGl0dWRlID0gbmV4dEFkZHJlc3MubGF0aXR1ZGU7XG4gICAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IG5leHRBZGRyZXNzLmxvbmdpdHVkZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDIpJywgbG9uZ2l0dWRlLCBsYXRpdHVkZSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMiknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQobmV4dEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IG5leHRBZGRyZXNzO1xuICAgIH1cblxuXG4gICAgLy8gZ2thXG4gICAgLypcbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLnBvc3RhbENvZGUgPSAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVQpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuQk9YX05VTUJFUilcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICAqL1xuICB9XG5cbiAgcmVzZXRMb2NhbGl0eShldmVudCkge1xuICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUKTtcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgNCk7XG4gIH1cblxuICByZXNldFN0cmVldChldmVudCkge1xuICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMyk7XG4gIH1cblxuICByZXNldFN0cmVldE51bWJlcihldmVudCwgcmVzZXRBZGRyZXNzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgc3RyZWV0IG51bW5lciEnLCBldmVudCwgcmVzZXRBZGRyZXNzKTtcbiAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcblxuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAyKTtcbiAgICAvLyAkJCA3IHRoaXMuc2V0QWRkcmVzcyhudWxsLCAyKTsgLy8gJCQgPz8/Pz9cbiAgICAvKlxuICAgIGlmIChyZXNldEFkZHJlc3MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0QWRkcmVzcygvICpudWxsKiAvIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9Ki9cbiAgfVxuXG4gIHJlc2V0Qm94TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBzdHJlZXQgbnVtbmVyIScsIGV2ZW50LCByZXNldEFkZHJlc3MpO1xuICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDEpO1xuICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgLy8gJCQgNyB0aGlzLnNldEFkZHJlc3MobnVsbCwgMSk7IC8vICQkID8/Pz8/XG4gICAgLypcbiAgICBpZiAocmVzZXRBZGRyZXNzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoLyAqbnVsbCogLyB0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgfSovXG4gIH1cblxuICBlbnRlclByZWZpbGxNb2RlKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjplbnRlclByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IHRydWU7XG5cbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgfVxuXG4gIH1cblxuICBxdWl0UHJlZmlsbE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnF1aXRQcmVmaWxsTW9kZSgpJyk7IH1cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkgKVxuICAgIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0QWRkcmVzcyhhZGRyZXNzOiBhbnksIGxldmVsPzogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnNldEFkZHJlc3MgLSBhZGRyZXNzIHBhcnQsIGxldmVsJywgYWRkcmVzcywgbGV2ZWwpOyB9XG5cbiAgICAvKiAkJCAkJFxuICAgIGlmICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAmJiAhYWRkcmVzcykge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IGFkZHJlc3MhJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgaWYgKGFkZHJlc3MgPT09IG51bGwgfHwgYWRkcmVzcyA9PT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICBjb25zdCBkb05vdGlmeSA9ICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIGlmIChkb05vdGlmeSkge1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICBkZWxldGUgYWRkcmVzcy5tZXNzYWdlcztcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlQ29tcGxldGVBZGRyZXNzKCk7XG4gICAgICB0aGlzLnBvc3RhbENvZGUgPSBhZGRyZXNzLnBvc3RhbENvZGUgPyBhZGRyZXNzLnBvc3RhbENvZGUgOiAnJztcbiAgICAgIHRoaXMubG9jYWxpdHkgPSBhZGRyZXNzLmxvY2FsaXR5TmFtZSA/IGFkZHJlc3MubG9jYWxpdHlOYW1lIDogJyc7XG4gICAgICB0aGlzLnN0cmVldCA9IGFkZHJlc3Muc3RyZWV0TmFtZSA/IGFkZHJlc3Muc3RyZWV0TmFtZSA6ICcnO1xuICAgICAgLy8gY29uc3Qgbm90SW5MaXN0ID0gYWRkcmVzc1snbm90LWluLWxpc3QnXTtcbiAgICAgIC8vIGNvbnN0IGlzTm90SW5MaXN0ID0gbm90SW5MaXN0ICE9PSBudWxsICYmIG5vdEluTGlzdCAhPT0gdW5kZWZpbmVkICYmIG5vdEluTGlzdCA9PT0gdHJ1ZTtcbiAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzcy5ob3VzZU51bWJlcikge1xuICAgICAgICBpZiAoIWFkZHJlc3MuaXNDb21wbGV0ZSB8fCBpc05vdEluTGlzdCkge1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlciA/IGFkZHJlc3MuaG91c2VOdW1iZXIgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWFkZHJlc3MuYm94TnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyByZXNldCBzdHJlZXQgbnVtYmVyICEnKTtcbiAgICAgICAgICAgIGlmICggIXRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhICkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0U3RyZWV0TnVtYmVyKG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3QgPSBhZGRyZXNzICE9PSBudWxsICYmIGFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIHN3aXRjaCAobGV2ZWwpIHtcblxuICAgICAgICAvLyBMb2NhbGl0eSAvIE11bmljaXBhbGl0eSBhbmQgUE9zdGFsQ29kZVxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgLy9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBTdHJlZXQgTmFtZVxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFNUUkVFVCBOdW1iZXJcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgLy8gJCRcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgaWYgKGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEJPWCBOdW1iZXJcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkQWRkcmVzcyAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRMYW5ndWFnZShsYW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSBsYW5nO1xuICB9XG5cbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UoLyptZXNzYWdlOiBzdHJpbmcqL21lc3NhZ2U6IHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfSkge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGlmICh0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSA9PT0gVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlLkVNSVQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VFdmVudEVtaXR0ZXIuZW1pdChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuXG4gIHVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5wb3N0YWxDb2RlICYmIGFkZHJlc3MubG9jYWxpdHlOYW1lKSB7XG4gICAgICB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eSA9ICBhZGRyZXNzLnBvc3RhbENvZGUgICsgJyAnICsgYWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLnN0cmVldE5hbWUpIHtcbiAgICAgIHRoaXMuc3RyZWV0TmFtZUlucHV0ID0gYWRkcmVzcy5zdHJlZXROYW1lO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5ob3VzZU51bWJlcikge1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJJbnB1dCA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29tcGxldGVBZGRyZXNzKCkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPyBgJHt0aGlzLmdldEJveFByZWZpeCgpfSAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZX0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZX0gYCA6ICcnO1xuICAgIHRoaXMuY29tcGxldGVBZGRyZXNzID0gY29uY2F0U3RyO1xuICB9XG5cbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID0gb3B0aW9uLnZhbGlkYXRpb25UeXBlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdhZGRyZXNzZSBhdXRvY29tcGxldGUgLSB2YWxpZGF0aW9uIG1lc3NhZ2Ugb3B0aW9uJywgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUpO1xuICB9XG5cbiAgb25Mb2NhbGl0eVByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmxvY2FsaXR5IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgLypcbiAgICBpZiAoZXZlbnQucGVyZmVjdE1hdGNoKVxuICAgIHtcbiAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8gKjMqIC8gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuc3RyZWV0UGFyYW1zID0gdGhpcy5hZGRyZXNzUGFyYW1zO1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8qNCovIEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgLy8gT2JqZWN0LmFzc2lnbih0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEsIHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICAvLyBCZSBzdXJlIHRvIHByb3BhZ2F0ZSB0aGUgbG9jYWxpdHlOYW1lIGluIHBsYWNlIG9mIHRoZSBtdW5pY2lwYWxpdHlOYW1lICFcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuXG4gICAgICBjb25zdCBzdHJlZXROYW1lID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICBpZiAoc3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBzdHJlZXROYW1lID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TmFtZSA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBjb25zdCBzdHJlZXROYW1lID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICBpZiAoc3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBzdHJlZXROYW1lID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TmFtZSA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbWF0Y2guLi4gJywgdGhpcy5wcmVmaWxsRGF0YSk7IH1cbiAgICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIC8vIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgY29uc3QgY3BBbmRMb2NhbGl0eSA9IGRhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlICsgZGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgaWYgKCBjcEFuZExvY2FsaXR5ID09PSBudWxsIHx8IGNwQW5kTG9jYWxpdHkgPT09IHVuZGVmaW5lZCB8fCBjcEFuZExvY2FsaXR5Lmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldFByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnN0cmVldDogcHJlZmlsbCBldmVudCByZWNlaXZlZCcsIGV2ZW50KTsgfVxuICAgIC8qXG4gICAgY29uc3QgZGF0YTogUHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSc7XG4gICAgICB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eSA9ICdUUlVDLU1VQ0hFIDInO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHk7XG4gICAgfVxuICAgICovXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChldmVudC5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgKVxuICAgIHtcbiAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQ6IE1BVENIIEZPVU5EJywgZGF0YSk7IH1cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuXG4gICAgICBjb25zdCBzdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgaWYgKHN0cmVldE51bWJlciA9PT0gbnVsbCB8fCBzdHJlZXROdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROdW1iZXIgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBjb25zdCBzdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgaWYgKHN0cmVldE51bWJlciA9PT0gbnVsbCB8fCBzdHJlZXROdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROdW1iZXIgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIHN0cmVldCBudW1iZXIgbWF0Y2guLi4gJywgdGhpcy5wcmVmaWxsRGF0YSk7fVxuICAgICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcblxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50IC0gTk8gTUFUQ0ggQVQgU1RSRUVUIExFVkVMJywgcHJlZmlsbFN0cmVldE5hbWUgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROYW1lLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTk8gTUFUQ0ggRk9VTkQgLSBzZXQgYWRkcmVzcycsIGRhdGEsIGFkZHJlc3MpOyB9XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLnN0cmVldE5hbWUgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpzdHJlZXQgbnVtYmVyIHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3QgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgaWYgKGFkZHJlc3NJc0NvbXBsZXRlICYmICEgYWRkcmVzc0lzTm90SW5MaXN0IClcbiAgICAgIHtcbiAgICAgICAgLy8gZm91bmQgYWRkcmVzcyAtIHBlcmZlY3QgbWF0Y2hhdCBzdHJlZXQgbnVtYmVyIGxldmVsXG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gYW55bW9yZVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAvLyBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZVxuICAgICAgICAvLyAgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIGJveCBudW1iZXIgbWF0Y2guLi4gJywgdGhpcy5wcmVmaWxsRGF0YSk7IH1cbiAgICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICggcHJlZmlsbFN0cmVldE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbFN0cmVldE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3MuaG91c2VOdW1iZXIgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQm94TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IGJveCBudW1iZXIgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbEJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgaWYgKCBwcmVmaWxsQm94TnVtYmVyID09PSBudWxsIHx8IHByZWZpbGxCb3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsQm94TnVtYmVyLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3MuYm94TnVtYmVyID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICB9XG59XG4iXX0=