Commit e619a3b04c27b680d9afedcb1bf79eb1e9cbb441

Authored by Luigi Serra
1 parent 4963f51a

Controllet cross browser big fix

Showing 534 changed files with 10973 additions and 6512 deletions

Too many changes.

To preserve performance only 100 of 534 files are displayed.

bower_components/google-map/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "google-map",
3   - "version": "1.1.0",
  3 + "version": "1.1.2",
4 4 "description": "Google Maps web components",
5 5 "homepage": "https://googlewebcomponents.github.io/google-map",
6 6 "main": [
... ... @@ -36,11 +36,11 @@
36 36 "web-component-tester": "*",
37 37 "iron-component-page": "PolymerElements/iron-component-page#^1.0.2"
38 38 },
39   - "_release": "1.1.0",
  39 + "_release": "1.1.2",
40 40 "_resolution": {
41 41 "type": "version",
42   - "tag": "1.1.0",
43   - "commit": "c45ddfa8c48a67dda1b2237589edcd45bc3f7802"
  42 + "tag": "1.1.2",
  43 + "commit": "3567129ffac7df683346b5c9d8ad0c32e9213adb"
44 44 },
45 45 "_source": "git://github.com/GoogleWebComponents/google-map.git",
46 46 "_target": "^1.0.0",
... ...
bower_components/google-map/LICENSE 100755 โ†’ 100644
bower_components/google-map/README.md 100755 โ†’ 100644
bower_components/google-map/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "google-map",
3   - "version": "1.1.0",
  3 + "version": "1.1.2",
4 4 "description": "Google Maps web components",
5 5 "homepage": "https://googlewebcomponents.github.io/google-map",
6 6 "main": [
... ...
bower_components/google-map/demo/index.html 100755 โ†’ 100644
bower_components/google-map/google-map-directions.html 100755 โ†’ 100644
bower_components/google-map/google-map-marker.html 100755 โ†’ 100644
... ... @@ -42,8 +42,23 @@ child of `google-map`.
42 42 </dom-module>
43 43  
44 44 <script>
45   -
46 45 (function() {
  46 +
  47 + function setupDragHandler_() {
  48 + if (this.draggable) {
  49 + this.dragHandler_ = google.maps.event.addListener(
  50 + this.marker, 'dragend', onDragEnd_.bind(this));
  51 + } else {
  52 + google.maps.event.removeListener(this.dragHandler_);
  53 + this.dragHandler_ = null;
  54 + }
  55 + }
  56 +
  57 + function onDragEnd_(e, details, sender) {
  58 + this.latitude = e.latLng.lat();
  59 + this.longitude = e.latLng.lng();
  60 + }
  61 +
47 62 Polymer({
48 63  
49 64 is: 'google-map-marker',
... ... @@ -53,45 +68,53 @@ child of `google-map`.
53 68 * @param {google.maps.MouseEvent} event The mouse event.
54 69 * @event google-map-marker-click
55 70 */
  71 +
56 72 /**
57 73 * Fired when the marker icon was double clicked. Requires the clickEvents attribute to be true.
58 74 * @param {google.maps.MouseEvent} event The mouse event.
59 75 * @event google-map-marker-dblclick
60 76 */
  77 +
61 78 /**
62 79 * Fired for a mousedown on the marker. Requires the mouseEvents attribute to be true.
63 80 * @event google-map-marker-mousedown
64 81 * @param {google.maps.MouseEvent} event The mouse event.
65 82 */
  83 +
66 84 /**
67 85 * Fired when the DOM `mousemove` event is fired on the marker. Requires the mouseEvents
68 86 * attribute to be true.
69 87 * @event google-map-marker-mousemove
70 88 * @param {google.maps.MouseEvent} event The mouse event.
71 89 */
  90 +
72 91 /**
73 92 * Fired when the mouse leaves the area of the marker icon. Requires the mouseEvents attribute to be
74 93 * true.
75 94 * @event google-map-marker-mouseout
76 95 * @param {google.maps.MouseEvent} event The mouse event.
77 96 */
  97 +
78 98 /**
79 99 * Fired when the mouse enters the area of the marker icon. Requires the mouseEvents attribute to be
80 100 * true.
81 101 * @event google-map-marker-mouseover
82 102 * @param {google.maps.MouseEvent} event The mouse event.
83 103 */
  104 +
84 105 /**
85 106 * Fired for a mouseup on the marker. Requires the mouseEvents attribute to be true.
86 107 *
87 108 * @event google-map-marker-mouseup
88 109 * @param {google.maps.MouseEvent} event The mouse event.
89 110 */
  111 +
90 112 /**
91 113 * Fired for a rightclick on the marker. Requires the clickEvents attribute to be true.
92 114 * @event google-map-marker-rightclick
93 115 * @param {google.maps.MouseEvent} event The mouse event.
94 116 */
  117 +
95 118 properties: {
96 119 /**
97 120 * A Google Maps marker object.
... ... @@ -161,6 +184,7 @@ child of `google-map`.
161 184 value: null,
162 185 reflectToAttribute: true
163 186 },
  187 +
164 188 /**
165 189 * The marker's latitude coordinate.
166 190 */
... ... @@ -168,6 +192,16 @@ child of `google-map`.
168 192 type: Number,
169 193 value: null,
170 194 reflectToAttribute: true
  195 + },
  196 +
  197 + /**
  198 + * A animation for the marker. "DROP" or "BOUNCE". See
  199 + * https://developers.google.com/maps/documentation/javascript/examples/marker-animations.
  200 + */
  201 + animation: {
  202 + type: String,
  203 + value: null,
  204 + observer: '_animationChanged'
171 205 }
172 206 },
173 207  
... ... @@ -231,6 +265,12 @@ child of `google-map`.
231 265 }
232 266 },
233 267  
  268 + _animationChanged: function() {
  269 + if (this.marker) {
  270 + this.marker.setAnimation(google.maps.Animation[this.animation]);
  271 + }
  272 + },
  273 +
234 274 _iconChanged: function() {
235 275 if (this.marker) {
236 276 this.marker.setIcon(this.icon);
... ... @@ -288,8 +328,12 @@ child of `google-map`.
288 328 this._listeners = {};
289 329 this.marker = new google.maps.Marker({
290 330 map: this.map,
291   - position: {lat: this.latitude, lng: this.longitude},
  331 + position: {
  332 + lat: parseFloat(this.latitude),
  333 + lng: parseFloat(this.longitude)
  334 + },
292 335 title: this.title,
  336 + animation: google.maps.Animation[this.animation],
293 337 draggable: this.draggable,
294 338 visible: !this.hidden,
295 339 icon: this.icon,
... ... @@ -336,19 +380,5 @@ child of `google-map`.
336 380 }
337 381 });
338 382  
339   - function setupDragHandler_() {
340   - if (this.draggable) {
341   - this.dragHandler_ = google.maps.event.addListener(
342   - this.marker, 'dragend', onDragEnd_.bind(this));
343   - } else {
344   - google.maps.event.removeListener(this.dragHandler_);
345   - this.dragHandler_ = null;
346   - }
347   - }
348   -
349   - function onDragEnd_(e, details, sender) {
350   - this.latitude = e.latLng.lat();
351   - this.longitude = e.latLng.lng();
352   - }
353 383 })();
354 384 </script>
... ...
bower_components/google-map/google-map-search.html 100755 โ†’ 100644
... ... @@ -11,7 +11,7 @@ information on the API.
11 11 #### Example:
12 12  
13 13 <template is="dom-bind">
14   - <google-map-search map="[[map]]" query="Pizza"
  14 + <google-map-search map="[[map]]" libraries="places" query="Pizza"
15 15 results="{{results}}"></google-map-search>
16 16 <google-map map="{{map}}" latitude="37.779"
17 17 longitude="-122.3892">
... ... @@ -119,7 +119,7 @@ information on the API.
119 119 location: {
120 120 type: Object,
121 121 value: null,
122   - readyOnly: true
  122 + readOnly: true
123 123 }
124 124 },
125 125  
... ... @@ -129,6 +129,13 @@ information on the API.
129 129 ],
130 130  
131 131 /**
  132 + * Fired when the details of a place are returned.
  133 + *
  134 + * @event google-map-search-place-detail
  135 + * @param {google.maps.MarkerPlace} detail The place details.
  136 + */
  137 +
  138 + /**
132 139 * Fired when the search element returns a result.
133 140 *
134 141 * @event google-map-search-results
... ... @@ -166,6 +173,26 @@ information on the API.
166 173 }
167 174 },
168 175  
  176 + /**
  177 + * Fetches details for a given place.
  178 + * @param {String} placeId The place id.
  179 + * @return {Promise} place The place information.
  180 + */
  181 + getDetails: function(placeId) {
  182 + var places = new google.maps.places.PlacesService(this.map);
  183 +
  184 + return new Promise(function(resolve, reject) {
  185 + places.getDetails({placeId: placeId}, function(place, status) {
  186 + if (status === google.maps.places.PlacesServiceStatus.OK) {
  187 + resolve(place);
  188 + this.fire('google-map-search-place-detail', place);
  189 + } else {
  190 + reject(status);
  191 + }
  192 + }.bind(this));
  193 + }.bind(this));
  194 + },
  195 +
169 196 _gotResults: function(results, status) {
170 197 this.results = results.map(function(result) {
171 198 // obtain lat/long from geometry
... ...
bower_components/google-map/google-map.html 100755 โ†’ 100644
... ... @@ -204,7 +204,8 @@ The `google-map` element renders a Google Map.
204 204 zoom: {
205 205 type: Number,
206 206 value: 10,
207   - observer: '_zoomChanged'
  207 + observer: '_zoomChanged',
  208 + notify: true
208 209 },
209 210  
210 211 /**
... ... @@ -221,7 +222,8 @@ The `google-map` element renders a Google Map.
221 222 mapType: {
222 223 type: String,
223 224 value: 'roadmap', // roadmap, satellite, hybrid, terrain,
224   - observer: '_mapTypeChanged'
  225 + observer: '_mapTypeChanged',
  226 + notify: true
225 227 },
226 228  
227 229 /**
... ... @@ -671,6 +673,10 @@ The `google-map` element renders a Google Map.
671 673 google.maps.event.addListener(this.map, 'zoom_changed', function() {
672 674 this.zoom = this.map.getZoom();
673 675 }.bind(this));
  676 +
  677 + google.maps.event.addListener(this.map, 'maptypeid_changed', function() {
  678 + this.mapType = this.map.getMapTypeId();
  679 + }.bind(this));
674 680  
675 681 this._clickEventsChanged();
676 682 this._dragEventsChanged();
... ...
bower_components/google-map/index.html 100755 โ†’ 100644
bower_components/google-map/metadata.html 100755 โ†’ 100644
bower_components/hydrolysis/.bower.json 100755 โ†’ 100644
... ... @@ -19,13 +19,13 @@
19 19 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
20 20 "web-component-tester": "*"
21 21 },
22   - "version": "1.15.2",
  22 + "version": "1.19.0",
23 23 "homepage": "https://github.com/Polymer/hydrolysis",
24   - "_release": "1.15.2",
  24 + "_release": "1.19.0",
25 25 "_resolution": {
26 26 "type": "version",
27   - "tag": "v1.15.2",
28   - "commit": "3b255182fd39a273c255ac2a49db8d06d96f667d"
  27 + "tag": "v1.19.0",
  28 + "commit": "8b0e8410712cc465a35b854ce86bfb6b23e2e9ab"
29 29 },
30 30 "_source": "git://github.com/Polymer/hydrolysis.git",
31 31 "_target": "^1.11",
... ...
bower_components/hydrolysis/.editorconfig 100755 โ†’ 100644
bower_components/hydrolysis/.gitattributes 100755 โ†’ 100644
bower_components/hydrolysis/API.md 100755 โ†’ 100644
... ... @@ -24,31 +24,38 @@ Static analysis for Polymer.
24 24 * [.Analyzer](#hydrolysis.Analyzer)
25 25 * [new Analyzer(attachAST, [loader])](#new_hydrolysis.Analyzer_new)
26 26 * _instance_
27   - * [.elements](#hydrolysis.Analyzer#elements) : <code>Array.&lt;ElementDescriptor&gt;</code>
28   - * [.elementsByTagName](#hydrolysis.Analyzer#elementsByTagName) : <code>Object.&lt;string, ElementDescriptor&gt;</code>
29   - * [.features](#hydrolysis.Analyzer#features) : <code>Array.&lt;FeatureDescriptor&gt;</code>
30   - * [.behaviors](#hydrolysis.Analyzer#behaviors) : <code>Array.&lt;BehaviorDescriptor&gt;</code>
31   - * [.html](#hydrolysis.Analyzer#html) : <code>Object.&lt;string, AnalyzedDocument&gt;</code>
32   - * [.parsedDocuments](#hydrolysis.Analyzer#parsedDocuments) : <code>Object</code>
33   - * [._getDependencies(href, [found], [transitive])](#hydrolysis.Analyzer#_getDependencies) โ‡’ <code>Array.&lt;string&gt;</code>
34   - * [.metadataTree(href)](#hydrolysis.Analyzer#metadataTree) โ‡’ <code>Promise</code>
35   - * [.nodeWalkDocuments(predicate)](#hydrolysis.Analyzer#nodeWalkDocuments) โ‡’ <code>Object</code>
36   - * [.annotate()](#hydrolysis.Analyzer#annotate)
37   - * [.clean()](#hydrolysis.Analyzer#clean)
  27 + * [.elements](#hydrolysis.Analyzer+elements) : <code>Array.&lt;ElementDescriptor&gt;</code>
  28 + * [.elementsByTagName](#hydrolysis.Analyzer+elementsByTagName) : <code>Object.&lt;string, ElementDescriptor&gt;</code>
  29 + * [.features](#hydrolysis.Analyzer+features) : <code>Array.&lt;FeatureDescriptor&gt;</code>
  30 + * [.behaviors](#hydrolysis.Analyzer+behaviors) : <code>Array.&lt;BehaviorDescriptor&gt;</code>
  31 + * [.behaviorsByName](#hydrolysis.Analyzer+behaviorsByName) : <code>Object.&lt;string, BehaviorDescriptor&gt;</code>
  32 + * [.html](#hydrolysis.Analyzer+html) : <code>Object.&lt;string, AnalyzedDocument&gt;</code>
  33 + * [.parsedDocuments](#hydrolysis.Analyzer+parsedDocuments) : <code>Object</code>
  34 + * [.parsedScripts](#hydrolysis.Analyzer+parsedScripts) : <code>Object.&lt;string, Array.&lt;ParsedJS&gt;&gt;</code>
  35 + * [._content](#hydrolysis.Analyzer+_content) : <code>Object</code>
  36 + * [._getDependencies(href, [found], [transitive])](#hydrolysis.Analyzer+_getDependencies) โ‡’ <code>Array.&lt;string&gt;</code>
  37 + * [.metadataTree(href)](#hydrolysis.Analyzer+metadataTree) โ‡’ <code>Promise</code>
  38 + * [.getLoadedAst(href, [loaded])](#hydrolysis.Analyzer+getLoadedAst) โ‡’ <code>Promise.&lt;DocumentAST&gt;</code>
  39 + * [.nodeWalkDocuments(predicate)](#hydrolysis.Analyzer+nodeWalkDocuments) โ‡’ <code>Object</code>
  40 + * [.nodeWalkAllDocuments(predicate)](#hydrolysis.Analyzer+nodeWalkAllDocuments) โ‡’ <code>Object</code>
  41 + * [.annotate()](#hydrolysis.Analyzer+annotate)
  42 + * [.clean()](#hydrolysis.Analyzer+clean)
38 43 * _static_
39 44 * [.analyze(href, [options])](#hydrolysis.Analyzer.analyze) โ‡’ <code>Promise.&lt;Analyzer&gt;</code>
40 45 * [.FileLoader](#hydrolysis.FileLoader)
41 46 * [new FileLoader()](#new_hydrolysis.FileLoader_new)
42   - * [.addResolver(resolver)](#hydrolysis.FileLoader#addResolver)
43   - * [.request(url)](#hydrolysis.FileLoader#request) โ‡’ <code>Promise.&lt;string&gt;</code>
  47 + * [.addResolver(resolver)](#hydrolysis.FileLoader+addResolver)
  48 + * [.request(url)](#hydrolysis.FileLoader+request) โ‡’ <code>Promise.&lt;string&gt;</code>
44 49 * [.FSResolver](#hydrolysis.FSResolver)
45 50 * [new FSResolver(config)](#new_hydrolysis.FSResolver_new)
46 51 * [.NoopResolver](#hydrolysis.NoopResolver)
47 52 * [new NoopResolver(config)](#new_hydrolysis.NoopResolver_new)
48   - * [.accept(uri, deferred)](#hydrolysis.NoopResolver#accept) โ‡’ <code>boolean</code>
  53 + * [.accept(uri, deferred)](#hydrolysis.NoopResolver+accept) โ‡’ <code>boolean</code>
49 54 * [.XHRResolver](#hydrolysis.XHRResolver)
50 55 * [new XHRResolver(config)](#new_hydrolysis.XHRResolver_new)
51 56 * [.DocumentAST](#hydrolysis.DocumentAST) : <code>Object</code>
  57 + * [.JSAST](#hydrolysis.JSAST) : <code>Object</code>
  58 + * [.ParsedJS](#hydrolysis.ParsedJS) : <code>Object</code>
52 59 * [.ElementDescriptor](#hydrolysis.ElementDescriptor) : <code>Object</code>
53 60 * [.FeatureDescriptor](#hydrolysis.FeatureDescriptor) : <code>Object</code>
54 61 * [.BehaviorDescriptor](#hydrolysis.BehaviorDescriptor) : <code>Object</code>
... ... @@ -64,17 +71,22 @@ Static analysis for Polymer.
64 71 * [.Analyzer](#hydrolysis.Analyzer)
65 72 * [new Analyzer(attachAST, [loader])](#new_hydrolysis.Analyzer_new)
66 73 * _instance_
67   - * [.elements](#hydrolysis.Analyzer#elements) : <code>Array.&lt;ElementDescriptor&gt;</code>
68   - * [.elementsByTagName](#hydrolysis.Analyzer#elementsByTagName) : <code>Object.&lt;string, ElementDescriptor&gt;</code>
69   - * [.features](#hydrolysis.Analyzer#features) : <code>Array.&lt;FeatureDescriptor&gt;</code>
70   - * [.behaviors](#hydrolysis.Analyzer#behaviors) : <code>Array.&lt;BehaviorDescriptor&gt;</code>
71   - * [.html](#hydrolysis.Analyzer#html) : <code>Object.&lt;string, AnalyzedDocument&gt;</code>
72   - * [.parsedDocuments](#hydrolysis.Analyzer#parsedDocuments) : <code>Object</code>
73   - * [._getDependencies(href, [found], [transitive])](#hydrolysis.Analyzer#_getDependencies) โ‡’ <code>Array.&lt;string&gt;</code>
74   - * [.metadataTree(href)](#hydrolysis.Analyzer#metadataTree) โ‡’ <code>Promise</code>
75   - * [.nodeWalkDocuments(predicate)](#hydrolysis.Analyzer#nodeWalkDocuments) โ‡’ <code>Object</code>
76   - * [.annotate()](#hydrolysis.Analyzer#annotate)
77   - * [.clean()](#hydrolysis.Analyzer#clean)
  74 + * [.elements](#hydrolysis.Analyzer+elements) : <code>Array.&lt;ElementDescriptor&gt;</code>
  75 + * [.elementsByTagName](#hydrolysis.Analyzer+elementsByTagName) : <code>Object.&lt;string, ElementDescriptor&gt;</code>
  76 + * [.features](#hydrolysis.Analyzer+features) : <code>Array.&lt;FeatureDescriptor&gt;</code>
  77 + * [.behaviors](#hydrolysis.Analyzer+behaviors) : <code>Array.&lt;BehaviorDescriptor&gt;</code>
  78 + * [.behaviorsByName](#hydrolysis.Analyzer+behaviorsByName) : <code>Object.&lt;string, BehaviorDescriptor&gt;</code>
  79 + * [.html](#hydrolysis.Analyzer+html) : <code>Object.&lt;string, AnalyzedDocument&gt;</code>
  80 + * [.parsedDocuments](#hydrolysis.Analyzer+parsedDocuments) : <code>Object</code>
  81 + * [.parsedScripts](#hydrolysis.Analyzer+parsedScripts) : <code>Object.&lt;string, Array.&lt;ParsedJS&gt;&gt;</code>
  82 + * [._content](#hydrolysis.Analyzer+_content) : <code>Object</code>
  83 + * [._getDependencies(href, [found], [transitive])](#hydrolysis.Analyzer+_getDependencies) โ‡’ <code>Array.&lt;string&gt;</code>
  84 + * [.metadataTree(href)](#hydrolysis.Analyzer+metadataTree) โ‡’ <code>Promise</code>
  85 + * [.getLoadedAst(href, [loaded])](#hydrolysis.Analyzer+getLoadedAst) โ‡’ <code>Promise.&lt;DocumentAST&gt;</code>
  86 + * [.nodeWalkDocuments(predicate)](#hydrolysis.Analyzer+nodeWalkDocuments) โ‡’ <code>Object</code>
  87 + * [.nodeWalkAllDocuments(predicate)](#hydrolysis.Analyzer+nodeWalkAllDocuments) โ‡’ <code>Object</code>
  88 + * [.annotate()](#hydrolysis.Analyzer+annotate)
  89 + * [.clean()](#hydrolysis.Analyzer+clean)
78 90 * _static_
79 91 * [.analyze(href, [options])](#hydrolysis.Analyzer.analyze) โ‡’ <code>Promise.&lt;Analyzer&gt;</code>
80 92  
... ... @@ -88,38 +100,55 @@ A database of Polymer metadata defined in HTML
88 100 | attachAST | <code>boolean</code> | If true, attach a parse5 compliant AST |
89 101 | [loader] | <code>FileLoader</code> | An optional `FileLoader` used to load external resources |
90 102  
91   -<a name="hydrolysis.Analyzer#elements"></a>
  103 +<a name="hydrolysis.Analyzer+elements"></a>
92 104 #### analyzer.elements : <code>Array.&lt;ElementDescriptor&gt;</code>
93 105 A list of all elements the `Analyzer` has metadata for.
94 106  
95 107 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
96   -<a name="hydrolysis.Analyzer#elementsByTagName"></a>
  108 +<a name="hydrolysis.Analyzer+elementsByTagName"></a>
97 109 #### analyzer.elementsByTagName : <code>Object.&lt;string, ElementDescriptor&gt;</code>
98 110 A view into `elements`, keyed by tag name.
99 111  
100 112 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
101   -<a name="hydrolysis.Analyzer#features"></a>
  113 +<a name="hydrolysis.Analyzer+features"></a>
102 114 #### analyzer.features : <code>Array.&lt;FeatureDescriptor&gt;</code>
103 115 A list of API features added to `Polymer.Base` encountered by the
104 116 analyzer.
105 117  
106 118 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
107   -<a name="hydrolysis.Analyzer#behaviors"></a>
  119 +<a name="hydrolysis.Analyzer+behaviors"></a>
108 120 #### analyzer.behaviors : <code>Array.&lt;BehaviorDescriptor&gt;</code>
109 121 The behaviors collected by the analysis pass.
110 122  
111 123 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
112   -<a name="hydrolysis.Analyzer#html"></a>
  124 +<a name="hydrolysis.Analyzer+behaviorsByName"></a>
  125 +#### analyzer.behaviorsByName : <code>Object.&lt;string, BehaviorDescriptor&gt;</code>
  126 +The behaviors collected by the analysis pass by name.
  127 +
  128 +**Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
  129 +<a name="hydrolysis.Analyzer+html"></a>
113 130 #### analyzer.html : <code>Object.&lt;string, AnalyzedDocument&gt;</code>
114 131 A map, keyed by absolute path, of Document metadata.
115 132  
116 133 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
117   -<a name="hydrolysis.Analyzer#parsedDocuments"></a>
  134 +<a name="hydrolysis.Analyzer+parsedDocuments"></a>
118 135 #### analyzer.parsedDocuments : <code>Object</code>
119 136 A map, keyed by path, of HTML document ASTs.
120 137  
121 138 **Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
122   -<a name="hydrolysis.Analyzer#_getDependencies"></a>
  139 +<a name="hydrolysis.Analyzer+parsedScripts"></a>
  140 +#### analyzer.parsedScripts : <code>Object.&lt;string, Array.&lt;ParsedJS&gt;&gt;</code>
  141 +A map, keyed by path, of JS script ASTs.
  142 +
  143 +If the path is an HTML file with multiple scripts, the entry will be an array of scripts.
  144 +
  145 +**Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
  146 +<a name="hydrolysis.Analyzer+_content"></a>
  147 +#### analyzer._content : <code>Object</code>
  148 +A map, keyed by path, of document content.
  149 +
  150 +**Kind**: instance property of <code>[Analyzer](#hydrolysis.Analyzer)</code>
  151 +<a name="hydrolysis.Analyzer+_getDependencies"></a>
123 152 #### analyzer._getDependencies(href, [found], [transitive]) โ‡’ <code>Array.&lt;string&gt;</code>
124 153 List all the html dependencies for the document at `href`.
125 154  
... ... @@ -132,7 +161,7 @@ List all the html dependencies for the document at `href`.
132 161 | [found] | <code>Object.&lt;string, boolean&gt;</code> | An object keyed by URL of the already resolved dependencies. |
133 162 | [transitive] | <code>boolean</code> | Whether to load transitive dependencies. Defaults to true. |
134 163  
135   -<a name="hydrolysis.Analyzer#metadataTree"></a>
  164 +<a name="hydrolysis.Analyzer+metadataTree"></a>
136 165 #### analyzer.metadataTree(href) โ‡’ <code>Promise</code>
137 166 Returns a promise that resolves to a POJO representation of the import
138 167 tree, in a format that maintains the ordering of the HTML imports spec.
... ... @@ -143,9 +172,35 @@ tree, in a format that maintains the ordering of the HTML imports spec.
143 172 | --- | --- | --- |
144 173 | href | <code>string</code> | the import to get metadata for. |
145 174  
146   -<a name="hydrolysis.Analyzer#nodeWalkDocuments"></a>
  175 +<a name="hydrolysis.Analyzer+getLoadedAst"></a>
  176 +#### analyzer.getLoadedAst(href, [loaded]) โ‡’ <code>Promise.&lt;DocumentAST&gt;</code>
  177 +Returns a promise resolving to a form of the AST with all links replaced
  178 +with the document they link to. .css and .script files become &lt;style&gt; and
  179 +&lt;script&gt;, respectively.
  180 +
  181 +The elements in the loaded document are unmodified from their original
  182 +documents.
  183 +
  184 +**Kind**: instance method of <code>[Analyzer](#hydrolysis.Analyzer)</code>
  185 +
  186 +| Param | Type | Description |
  187 +| --- | --- | --- |
  188 +| href | <code>string</code> | The document to load. |
  189 +| [loaded] | <code>Object.&lt;string, boolean&gt;</code> | An object keyed by already loaded documents. |
  190 +
  191 +<a name="hydrolysis.Analyzer+nodeWalkDocuments"></a>
147 192 #### analyzer.nodeWalkDocuments(predicate) โ‡’ <code>Object</code>
148   -Calls `dom5.nodeWalk` on each document that `Anayzler` has laoded.
  193 +Calls `dom5.nodeWalkAll` on each document that `Anayzler` has laoded.
  194 +
  195 +**Kind**: instance method of <code>[Analyzer](#hydrolysis.Analyzer)</code>
  196 +
  197 +| Param | Type | Description |
  198 +| --- | --- | --- |
  199 +| predicate | <code>Object</code> | A dom5 predicate. |
  200 +
  201 +<a name="hydrolysis.Analyzer+nodeWalkAllDocuments"></a>
  202 +#### analyzer.nodeWalkAllDocuments(predicate) โ‡’ <code>Object</code>
  203 +Calls `dom5.nodeWalkAll` on each document that `Anayzler` has laoded.
149 204  
150 205 **Kind**: instance method of <code>[Analyzer](#hydrolysis.Analyzer)</code>
151 206  
... ... @@ -153,12 +208,12 @@ Calls `dom5.nodeWalk` on each document that `Anayzler` has laoded.
153 208 | --- | --- | --- |
154 209 | predicate | <code>Object</code> | A dom5 predicate. |
155 210  
156   -<a name="hydrolysis.Analyzer#annotate"></a>
  211 +<a name="hydrolysis.Analyzer+annotate"></a>
157 212 #### analyzer.annotate()
158 213 Annotates all loaded metadata with its documentation.
159 214  
160 215 **Kind**: instance method of <code>[Analyzer](#hydrolysis.Analyzer)</code>
161   -<a name="hydrolysis.Analyzer#clean"></a>
  216 +<a name="hydrolysis.Analyzer+clean"></a>
162 217 #### analyzer.clean()
163 218 Removes redundant properties from the collected descriptors.
164 219  
... ... @@ -185,14 +240,14 @@ In order to properly filter paths, `href` _must_ be an absolute URI.
185 240  
186 241 * [.FileLoader](#hydrolysis.FileLoader)
187 242 * [new FileLoader()](#new_hydrolysis.FileLoader_new)
188   - * [.addResolver(resolver)](#hydrolysis.FileLoader#addResolver)
189   - * [.request(url)](#hydrolysis.FileLoader#request) โ‡’ <code>Promise.&lt;string&gt;</code>
  243 + * [.addResolver(resolver)](#hydrolysis.FileLoader+addResolver)
  244 + * [.request(url)](#hydrolysis.FileLoader+request) โ‡’ <code>Promise.&lt;string&gt;</code>
190 245  
191 246 <a name="new_hydrolysis.FileLoader_new"></a>
192 247 #### new FileLoader()
193 248 A FileLoader lets you resolve URLs with a set of potential resolvers.
194 249  
195   -<a name="hydrolysis.FileLoader#addResolver"></a>
  250 +<a name="hydrolysis.FileLoader+addResolver"></a>
196 251 #### fileLoader.addResolver(resolver)
197 252 Add an instance of a Resolver class to the list of url resolvers
198 253  
... ... @@ -205,7 +260,7 @@ The first resolver to &quot;accept&quot; the url wins.
205 260 | --- | --- | --- |
206 261 | resolver | <code>Resolver</code> | The resolver to add. |
207 262  
208   -<a name="hydrolysis.FileLoader#request"></a>
  263 +<a name="hydrolysis.FileLoader+request"></a>
209 264 #### fileLoader.request(url) โ‡’ <code>Promise.&lt;string&gt;</code>
210 265 Return a promise for an absolute url
211 266  
... ... @@ -241,7 +296,7 @@ Resolves requests via the file system.
241 296  
242 297 * [.NoopResolver](#hydrolysis.NoopResolver)
243 298 * [new NoopResolver(config)](#new_hydrolysis.NoopResolver_new)
244   - * [.accept(uri, deferred)](#hydrolysis.NoopResolver#accept) โ‡’ <code>boolean</code>
  299 + * [.accept(uri, deferred)](#hydrolysis.NoopResolver+accept) โ‡’ <code>boolean</code>
245 300  
246 301 <a name="new_hydrolysis.NoopResolver_new"></a>
247 302 #### new NoopResolver(config)
... ... @@ -252,7 +307,7 @@ A resolver that resolves to null any uri matching config.
252 307 | --- | --- | --- |
253 308 | config | <code>string</code> | The url to `accept`. |
254 309  
255   -<a name="hydrolysis.NoopResolver#accept"></a>
  310 +<a name="hydrolysis.NoopResolver+accept"></a>
256 311 #### noopResolver.accept(uri, deferred) โ‡’ <code>boolean</code>
257 312 **Kind**: instance method of <code>[NoopResolver](#hydrolysis.NoopResolver)</code>
258 313 **Returns**: <code>boolean</code> - Whether the URI is handled by this resolver.
... ... @@ -280,6 +335,23 @@ Construct a resolver that requests resources over XHR.
280 335 Parse5's representation of a parsed html document
281 336  
282 337 **Kind**: static typedef of <code>[hydrolysis](#hydrolysis)</code>
  338 +<a name="hydrolysis.JSAST"></a>
  339 +### hydrolysis.JSAST : <code>Object</code>
  340 +espree's representation of a parsed html document
  341 +
  342 +**Kind**: static typedef of <code>[hydrolysis](#hydrolysis)</code>
  343 +<a name="hydrolysis.ParsedJS"></a>
  344 +### hydrolysis.ParsedJS : <code>Object</code>
  345 +Package of a parsed JS script
  346 +
  347 +**Kind**: static typedef of <code>[hydrolysis](#hydrolysis)</code>
  348 +**Properties**
  349 +
  350 +| Name | Type | Description |
  351 +| --- | --- | --- |
  352 +| ast | <code>JSAST</code> | The script's AST |
  353 +| scriptElement | <code>DocumentAST</code> | If inline, the script's containing tag. |
  354 +
283 355 <a name="hydrolysis.ElementDescriptor"></a>
284 356 ### hydrolysis.ElementDescriptor : <code>Object</code>
285 357 The metadata for a single polymer element
... ...
bower_components/hydrolysis/LICENSE 100755 โ†’ 100644
bower_components/hydrolysis/README.md 100755 โ†’ 100644
1 1 # hydrolysis
2 2  
3   -Static anlaysis utilities for polymer.
  3 +Static analysis utilities for polymer.
4 4  
5 5 ## Install
6 6 ```
... ...
bower_components/hydrolysis/bower.json 100755 โ†’ 100644
... ... @@ -19,5 +19,5 @@
19 19 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
20 20 "web-component-tester": "*"
21 21 },
22   - "version": "1.15.1"
  22 + "version": "1.19.0"
23 23 }
... ...
bower_components/hydrolysis/hydrolysis-analyzer.html 100755 โ†’ 100644
bower_components/hydrolysis/hydrolysis.html 100755 โ†’ 100644
bower_components/hydrolysis/hydrolysis.js 100755 โ†’ 100644
... ... @@ -13,7 +13,6 @@ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof requ
13 13 'use strict';
14 14 // jshint -W079
15 15 var Promise = global.Promise || require('es6-promise').Promise;
16   -require("setimmediate");
17 16 // jshint +W079
18 17  
19 18 var dom5 = require('dom5');
... ... @@ -42,6 +41,20 @@ var EMPTY_METADATA = {elements: [], features: [], behaviors: []};
42 41 */
43 42  
44 43 /**
  44 + * espree's representation of a parsed html document
  45 + * @typedef {Object} JSAST
  46 + * @memberof hydrolysis
  47 + */
  48 +
  49 +/**
  50 + * Package of a parsed JS script
  51 + * @typedef {Object} ParsedJS
  52 + * @property {JSAST} ast The script's AST
  53 + * @property {DocumentAST} scriptElement If inline, the script's containing tag.
  54 + * @memberof hydrolysis
  55 + */
  56 +
  57 +/**
45 58 * The metadata for a single polymer element
46 59 * @typedef {Object} ElementDescriptor
47 60 * @memberof hydrolysis
... ... @@ -125,13 +138,18 @@ var Analyzer = function Analyzer(attachAST,
125 138 this.behaviors = [];
126 139  
127 140 /**
  141 + * The behaviors collected by the analysis pass by name.
  142 + *
  143 + * @member {Object<string,BehaviorDescriptor>}
  144 + */
  145 + this.behaviorsByName = {};
  146 +
  147 + /**
128 148 * A map, keyed by absolute path, of Document metadata.
129 149 * @member {Object<string,AnalyzedDocument>}
130 150 */
131 151 this.html = {};
132 152  
133   - this._parsedDocuments = {};
134   -
135 153 /**
136 154 * A map, keyed by path, of HTML document ASTs.
137 155 * @type {Object}
... ... @@ -139,6 +157,17 @@ var Analyzer = function Analyzer(attachAST,
139 157 this.parsedDocuments = {};
140 158  
141 159 /**
  160 + * A map, keyed by path, of JS script ASTs.
  161 + *
  162 + * If the path is an HTML file with multiple scripts, the entry will be an array of scripts.
  163 + *
  164 + * @type {Object<string,Array<ParsedJS>>}
  165 + */
  166 + this.parsedScripts = {};
  167 +
  168 +
  169 +
  170 + /**
142 171 * A map, keyed by path, of document content.
143 172 * @type {Object}
144 173 */
... ... @@ -207,11 +236,14 @@ function _defaultFilter(href) {
207 236 Analyzer.prototype.load = function load(href) {
208 237 return this.loader.request(href).then(function(content) {
209 238 return new Promise(function(resolve, reject) {
210   - setImmediate(function() {
  239 + setTimeout(function() {
211 240 this._content[href] = content;
212 241 resolve(this._parseHTML(content, href));
213   - }.bind(this));
214   - }.bind(this));
  242 + }.bind(this), 0);
  243 + }.bind(this)).catch(function(err){
  244 + console.error("Error processing document at " + href);
  245 + throw err;
  246 + });
215 247 }.bind(this));
216 248 };
217 249  
... ... @@ -240,8 +272,26 @@ Analyzer.prototype._parseHTML = function _parseHTML(htmlImport,
240 272 var htmlLoaded = Promise.resolve(parsed);
241 273 if (parsed.script) {
242 274 metadataLoaded = this._processScripts(parsed.script, href);
243   - depsLoaded.push(metadataLoaded);
244 275 }
  276 + var commentText = parsed.comment.map(function(comment){
  277 + return dom5.getTextContent(comment);
  278 + });
  279 + var pseudoElements = docs.parsePseudoElements(commentText);
  280 + pseudoElements.forEach(function(element){
  281 + element.contentHref = href;
  282 + this.elements.push(element);
  283 + this.elementsByTagName[element.is] = element;
  284 + }.bind(this));
  285 + metadataLoaded = metadataLoaded.then(function(metadata){
  286 + var metadataEntry = {
  287 + elements: pseudoElements,
  288 + features: [],
  289 + behaviors: []
  290 + };
  291 + return [metadata, metadataEntry].reduce(reduceMetadata);
  292 + });
  293 + depsLoaded.push(metadataLoaded);
  294 +
245 295  
246 296 if (this.loader) {
247 297 var baseUri = href;
... ... @@ -278,7 +328,6 @@ Analyzer.prototype._parseHTML = function _parseHTML(htmlImport,
278 328 depsLoaded = Promise.all(depsLoaded)
279 329 .then(function() {return depHrefs;})
280 330 .catch(function(err) {throw err;});
281   - this._parsedDocuments[href] = parsed;
282 331 this.parsedDocuments[href] = parsed.ast;
283 332 this.html[href] = {
284 333 href: href,
... ... @@ -305,7 +354,7 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
305 354 var parsedJs;
306 355 if (!src) {
307 356 try {
308   - parsedJs = jsParse(script.childNodes[0].value);
  357 + parsedJs = jsParse((script.childNodes.length) ? script.childNodes[0].value : '');
309 358 } catch (err) {
310 359 // Figure out the correct line number for the error.
311 360 var line = 0;
... ... @@ -318,7 +367,7 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
318 367 col += err.column;
319 368 var message = "Error parsing script in " + href + " at " + line + ":" + col;
320 369 message += "\n" + err.description;
321   - throw new Error(message);
  370 + return Promise.reject(new Error(message));
322 371 }
323 372 if (parsedJs.elements) {
324 373 parsedJs.elements.forEach(function(element) {
... ... @@ -342,9 +391,22 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
342 391 if (parsedJs.behaviors) {
343 392 parsedJs.behaviors.forEach(function(behavior){
344 393 behavior.contentHref = href;
345   - });
  394 + this.behaviorsByName[behavior.is] = behavior;
  395 + this.behaviorsByName[behavior.symbol] = behavior;
  396 + }.bind(this));
346 397 this.behaviors = this.behaviors.concat(parsedJs.behaviors);
347 398 }
  399 + if (!Object.hasOwnProperty.call(this.parsedScripts, href)) {
  400 + this.parsedScripts[href] = [];
  401 + }
  402 + var scriptElement;
  403 + if (script.__ownerDocument && script.__ownerDocument == href) {
  404 + scriptElement = script;
  405 + }
  406 + this.parsedScripts[href].push({
  407 + ast: parsedJs.parsedScript,
  408 + scriptElement: scriptElement
  409 + });
348 410 return parsedJs;
349 411 }
350 412 if (this.loader) {
... ... @@ -417,6 +479,38 @@ Analyzer.prototype._getDependencies = function _getDependencies(href, found, tra
417 479 });
418 480 };
419 481  
  482 +function matchesDocumentFolder(descriptor, href) {
  483 + if (!descriptor.contentHref) {
  484 + return false;
  485 + }
  486 + var descriptorDoc = url.parse(descriptor.contentHref);
  487 + if (!descriptorDoc || !descriptorDoc.pathname) {
  488 + return false;
  489 + }
  490 + var searchDoc = url.parse(href);
  491 + if (!searchDoc || !searchDoc.pathname) {
  492 + return false;
  493 + }
  494 + var searchPath = searchDoc.pathname;
  495 + var lastSlash = searchPath.lastIndexOf("/");
  496 + if (lastSlash > 0) {
  497 + searchPath = searchPath.slice(0, lastSlash);
  498 + }
  499 + return descriptorDoc.pathname.indexOf(searchPath) === 0;
  500 +}
  501 +
  502 +Analyzer.prototype.elementsForFolder = function elementsForFolder(href) {
  503 + return this.elements.filter(function(element){
  504 + return matchesDocumentFolder(element, href);
  505 + });
  506 +};
  507 +
  508 +Analyzer.prototype.behaviorsForFolder = function behaviorsForFolder(href) {
  509 + return this.behaviors.filter(function(behavior){
  510 + return matchesDocumentFolder(behavior, href);
  511 + });
  512 +};
  513 +
420 514 /**
421 515 * Returns a promise that resolves to a POJO representation of the import
422 516 * tree, in a format that maintains the ordering of the HTML imports spec.
... ... @@ -545,12 +639,12 @@ Analyzer.prototype._inlineImports = function _inlineImports(ast, href, loaded) {
545 639  
546 640 /**
547 641 * Returns a promise resolving to a form of the AST with all links replaced
548   - * with the document they link to. .css and .script files become <style> and
549   - * <script>, respectively.
  642 + * with the document they link to. .css and .script files become &lt;style&gt; and
  643 + * &lt;script&gt;, respectively.
550 644 *
551 645 * The elements in the loaded document are unmodified from their original
552 646 * documents.
553   - *
  647 + *
554 648 * @param {string} href The document to load.
555 649 * @param {Object.<string,boolean>=} loaded An object keyed by already loaded documents.
556 650 * @return {Promise.<DocumentAST>}
... ... @@ -560,9 +654,9 @@ Analyzer.prototype.getLoadedAst = function getLoadedAst(href, loaded) {
560 654 loaded = {};
561 655 }
562 656 loaded[href] = true;
563   - var document = this._parsedDocuments[href];
  657 + var parsedDocument = this.parsedDocuments[href];
564 658 var analyzedDocument = this.html[href];
565   - var astCopy = dom5.parse(dom5.serialize(document.ast));
  659 + var astCopy = dom5.parse(dom5.serialize(parsedDocument));
566 660 // Whenever we inline something, reset inlined to true to know that anoather
567 661 // inlining pass is needed;
568 662 this._inlineStyles(astCopy, href);
... ... @@ -577,8 +671,8 @@ Analyzer.prototype.getLoadedAst = function getLoadedAst(href, loaded) {
577 671 * @return {Object}
578 672 */
579 673 Analyzer.prototype.nodeWalkDocuments = function nodeWalkDocuments(predicate) {
580   - for (var href in this._parsedDocuments) {
581   - var match = dom5.nodeWalk(this._parsedDocuments[href].ast, predicate);
  674 + for (var href in this.parsedDocuments) {
  675 + var match = dom5.nodeWalk(this.parsedDocuments[href], predicate);
582 676 if (match) {
583 677 return match;
584 678 }
... ... @@ -593,8 +687,8 @@ Analyzer.prototype.nodeWalkDocuments = function nodeWalkDocuments(predicate) {
593 687 */
594 688 Analyzer.prototype.nodeWalkAllDocuments = function nodeWalkDocuments(predicate) {
595 689 var results = [];
596   - for (var href in this._parsedDocuments) {
597   - var newNodes = dom5.nodeWalkAll(this._parsedDocuments[href].ast, predicate);
  690 + for (var href in this.parsedDocuments) {
  691 + var newNodes = dom5.nodeWalkAll(this.parsedDocuments[href], predicate);
598 692 results = results.concat(newNodes);
599 693 }
600 694 return results;
... ... @@ -607,9 +701,17 @@ Analyzer.prototype.annotate = function annotate() {
607 701 this.elements.unshift(featureEl);
608 702 this.elementsByTagName[featureEl.is] = featureEl;
609 703 }
610   -
611   - this.elements.forEach(docs.annotateElement);
612   - this.behaviors.forEach(docs.annotateElement); // Same shape.
  704 + var behaviorsByName = this.behaviorsByName;
  705 + var elementHelper = function(descriptor){
  706 + docs.annotateElement(descriptor, behaviorsByName);
  707 + };
  708 + this.elements.forEach(elementHelper);
  709 + this.behaviors.forEach(elementHelper); // Same shape.
  710 + this.behaviors.forEach(function(behavior){
  711 + if (behavior.is !== behavior.symbol && behavior.symbol) {
  712 + this.behaviorsByName[behavior.symbol] = undefined;
  713 + }
  714 + }.bind(this));
613 715 };
614 716  
615 717 function attachDomModule(parsedImport, element) {
... ... @@ -631,8 +733,8 @@ Analyzer.prototype.clean = function clean() {
631 733 module.exports = Analyzer;
632 734  
633 735 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
634   -
635   -},{"./ast-utils/docs":5,"./ast-utils/import-parse":10,"./ast-utils/js-parse":11,"./loader/file-loader":13,"./loader/fs-resolver":14,"./loader/noop-resolver":15,"./loader/xhr-resolver":16,"dom5":38,"es6-promise":60,"setimmediate":74,"url":26}],2:[function(require,module,exports){
  736 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmFseXplci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG4vLyBqc2hpbnQgLVcwNzlcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG52YXIgZG9jcyA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2RvY3MnKTtcbnZhciBGaWxlTG9hZGVyID0gcmVxdWlyZSgnLi9sb2FkZXIvZmlsZS1sb2FkZXInKTtcbnZhciBpbXBvcnRQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2ltcG9ydC1wYXJzZScpO1xudmFyIGpzUGFyc2UgPSByZXF1aXJlKCcuL2FzdC11dGlscy9qcy1wYXJzZScpO1xudmFyIE5vb3BSZXNvbHZlciA9IHJlcXVpcmUoJy4vbG9hZGVyL25vb3AtcmVzb2x2ZXInKTtcblxuZnVuY3Rpb24gcmVkdWNlTWV0YWRhdGEobTEsIG0yKSB7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6ICBtMS5lbGVtZW50cy5jb25jYXQobTIuZWxlbWVudHMpLFxuICAgIGZlYXR1cmVzOiAgbTEuZmVhdHVyZXMuY29uY2F0KG0yLmZlYXR1cmVzKSxcbiAgICBiZWhhdmlvcnM6IG0xLmJlaGF2aW9ycy5jb25jYXQobTIuYmVoYXZpb3JzKSxcbiAgfTtcbn1cblxudmFyIEVNUFRZX01FVEFEQVRBID0ge2VsZW1lbnRzOiBbXSwgZmVhdHVyZXM6IFtdLCBiZWhhdmlvcnM6IFtdfTtcblxuLyoqXG4gKiBQYXJzZTUncyByZXByZXNlbnRhdGlvbiBvZiBhIHBhcnNlZCBodG1sIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudEFTVFxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIGVzcHJlZSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpTQVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogUGFja2FnZSBvZiBhIHBhcnNlZCBKUyBzY3JpcHRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlZEpTXG4gKiBAcHJvcGVydHkge0pTQVNUfSBhc3QgVGhlIHNjcmlwdCdzIEFTVFxuICogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gc2NyaXB0RWxlbWVudCBJZiBpbmxpbmUsIHRoZSBzY3JpcHQncyBjb250YWluaW5nIHRhZy5cbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHBvbHltZXIgZWxlbWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRWxlbWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBmZWF0dXJlLlxuICogQHR5cGVkZWYge09iamVjdH0gRmVhdHVyZURlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBiZWhhdmlvciBtaXhpbi5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJlaGF2aW9yRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYWxsIGZlYXR1cmVzIGFuZCBlbGVtZW50cyBkZWZpbmVkIGluIG9uZSBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnREZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtBcnJheTxFbGVtZW50RGVzY3JpcHRvcj59IGVsZW1lbnRzIFRoZSBlbGVtZW50cyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSAgYmVoYXZpb3JzIFRoZSBiZWhhdmlvcnMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBvZiBhbiBlbnRpcmUgSFRNTCBkb2N1bWVudCwgaW4gcHJvbWlzZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmFseXplZERvY3VtZW50XG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWYgVGhlIHVybCBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcHJvcGVydHkge1Byb21pc2U8UGFyc2VkSW1wb3J0Pn0gIGh0bWxMb2FkZWQgVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZlxuICogICAgIHRoZSBkb2MuIFVzZSB0aGUgYGFzdGAgcHJvcGVydHkgdG8gZ2V0IHRoZSBmdWxsIGBwYXJzZTVgIGFzdFxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxBcnJheTxzdHJpbmc+Pn0gZGVwc0xvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZiB0aGlzXG4gKiAgICAgRG9jdW1lbnQncyB0cmFuc2l0aXZlIGltcG9ydCBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGRlcEhyZWZzIFRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9mIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAcHJvcGVydHkge1Byb21pc2U8RG9jdW1lbnREZXNjcmlwdG9yPn0gbWV0YWRhdGFMb2FkZWQgUmVzb2x2ZXMgdG8gdGhlIGxpc3Qgb2ZcbiAqICAgICB0aGlzIERvY3VtZW50J3MgaW1wb3J0IGRlcGVuZGVuY2llc1xuICovXG5cbi8qKlxuICogQSBkYXRhYmFzZSBvZiBQb2x5bWVyIG1ldGFkYXRhIGRlZmluZWQgaW4gSFRNTFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGF0dGFjaEFTVCAgSWYgdHJ1ZSwgYXR0YWNoIGEgcGFyc2U1IGNvbXBsaWFudCBBU1RcbiAqIEBwYXJhbSAge0ZpbGVMb2FkZXI9fSBsb2FkZXIgQW4gb3B0aW9uYWwgYEZpbGVMb2FkZXJgIHVzZWQgdG8gbG9hZCBleHRlcm5hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNcbiAqL1xudmFyIEFuYWx5emVyID0gZnVuY3Rpb24gQW5hbHl6ZXIoYXR0YWNoQVNULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKSB7XG4gIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIHRoZSBgQW5hbHl6ZXJgIGhhcyBtZXRhZGF0YSBmb3IuXG4gICAqIEBtZW1iZXIge0FycmF5LjxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIEEgdmlldyBpbnRvIGBlbGVtZW50c2AsIGtleWVkIGJ5IHRhZyBuYW1lLlxuICAgKiBAbWVtYmVyIHtPYmplY3QuPHN0cmluZyxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lID0ge307XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBBUEkgZmVhdHVyZXMgYWRkZWQgdG8gYFBvbHltZXIuQmFzZWAgZW5jb3VudGVyZWQgYnkgdGhlXG4gICAqIGFuYWx5emVyLlxuICAgKiBAbWVtYmVyIHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmZlYXR1cmVzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvcnMgY29sbGVjdGVkIGJ5IHRoZSBhbmFseXNpcyBwYXNzLlxuICAgKlxuICAgKiBAbWVtYmVyIHtBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MgYnkgbmFtZS5cbiAgICpcbiAgICogQG1lbWJlciB7T2JqZWN0PHN0cmluZyxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnNCeU5hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IGFic29sdXRlIHBhdGgsIG9mIERvY3VtZW50IG1ldGFkYXRhLlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEFuYWx5emVkRG9jdW1lbnQ+fVxuICAgKi9cbiAgdGhpcy5odG1sID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBIVE1MIGRvY3VtZW50IEFTVHMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLnBhcnNlZERvY3VtZW50cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgSlMgc2NyaXB0IEFTVHMuXG4gICAqXG4gICAqIElmIHRoZSBwYXRoIGlzIGFuIEhUTUwgZmlsZSB3aXRoIG11bHRpcGxlIHNjcmlwdHMsIHRoZSBlbnRyeSB3aWxsIGJlIGFuIGFycmF5IG9mIHNjcmlwdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLEFycmF5PFBhcnNlZEpTPj59XG4gICAqL1xuICB0aGlzLnBhcnNlZFNjcmlwdHMgPSB7fTtcblxuICBcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIGRvY3VtZW50IGNvbnRlbnQuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9jb250ZW50ID0ge307XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBbmFseXplci5hbmFsenllYFxuICogQHR5cGVkZWYge09iamVjdH0gTG9hZE9wdGlvbnNcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vQW5ub3RhdGlvbnMgV2hldGhlciBgYW5ub3RhdGUoKWAgc2hvdWxkIGJlIHNraXBwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNsZWFuIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBkZXNjcmlwdG9ycyBzaG91bGQgYmUgY2xlYW5lZFxuICogICAgIG9mIHJlZHVuZGFudCBkYXRhLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufSBmaWx0ZXIgQSBwcmVkaWNhdGUgZnVuY3Rpb24gdGhhdFxuICogICAgIGluZGljYXRlcyB3aGljaCBmaWxlcyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgbG9hZGVyLiBCeSBkZWZhdWx0IGFsbFxuICogICAgIGZpbGVzIG5vdCBsb2NhdGVkIHVuZGVyIHRoZSBkaXJuYW1lIG9mIGBocmVmYCB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHRyYW5zaXRpdmVseSBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nIGFsbCBpbXBvcnRzIGJlZ2lubmluZyBhdFxuICogYGhyZWZgLlxuICpcbiAqIEluIG9yZGVyIHRvIHByb3Blcmx5IGZpbHRlciBwYXRocywgYGhyZWZgIF9tdXN0XyBiZSBhbiBhYnNvbHV0ZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIHJvb3QgaW1wb3J0IHRvIGJlZ2luIGxvYWRpbmcgZnJvbS5cbiAqIEBwYXJhbSB7TG9hZE9wdGlvbnM9fSBvcHRpb25zIEFueSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHJldHVybiB7UHJvbWlzZTxBbmFseXplcj59IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIGBocmVmYCBhbmQgaXRzXG4gKiAgICAgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBsb2FkZWQgYW5kIGFuYWx5emVkLlxuICovXG5BbmFseXplci5hbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShocmVmLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IF9kZWZhdWx0RmlsdGVyKGhyZWYpO1xuXG4gIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcigpO1xuICB2YXIgUHJpbWFyeVJlc29sdmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIvZnMtcmVzb2x2ZXInKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci94aHItcmVzb2x2ZXInKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBQcmltYXJ5UmVzb2x2ZXIob3B0aW9ucykpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IE5vb3BSZXNvbHZlcih7dGVzdDogb3B0aW9ucy5maWx0ZXJ9KSk7XG5cbiAgdmFyIGFuYWx5emVyID0gbmV3IHRoaXMobnVsbCwgbG9hZGVyKTtcbiAgcmV0dXJuIGFuYWx5emVyLm1ldGFkYXRhVHJlZShocmVmKS50aGVuKGZ1bmN0aW9uKHJvb3QpIHtcbiAgICBpZiAoIW9wdGlvbnMubm9Bbm5vdGF0aW9ucykge1xuICAgICAgYW5hbHl6ZXIuYW5ub3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgIGFuYWx5emVyLmNsZWFuKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5hbHl6ZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufVxuICovXG5mdW5jdGlvbiBfZGVmYXVsdEZpbHRlcihocmVmKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgYC9gIG9yIGBcXGAuXG4gIHZhciBiYXNlID0gaHJlZi5tYXRjaCgvXiguKj8pW15cXC9cXFxcXSokLylbMV07XG4gIHJldHVybiBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpLmluZGV4T2YoYmFzZSkgIT09IDA7XG4gIH07XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KGhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRbaHJlZl0gPSBjb250ZW50O1xuICAgICAgICByZXNvbHZlKHRoaXMuX3BhcnNlSFRNTChjb250ZW50LCBocmVmKSk7XG4gICAgICB9LmJpbmQodGhpcyksIDApO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIGRvY3VtZW50IGF0IFwiICsgaHJlZik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYEFuYWx5emVkRG9jdW1lbnRgIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWxJbXBvcnQgUmF3IHRleHQgb2YgYW4gSFRNTCBkb2N1bWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBocmVmICAgICAgIFRoZSBkb2N1bWVudCdzIFVSTC5cbiAqIEByZXR1cm4ge0FuYWx5emVkRG9jdW1lbnR9ICAgICAgIEFuICBgQW5hbHl6ZWREb2N1bWVudGBcbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9wYXJzZUhUTUwgPSBmdW5jdGlvbiBfcGFyc2VIVE1MKGh0bWxJbXBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYpIHtcbiAgaWYgKGhyZWYgaW4gdGhpcy5odG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbiAgfVxuICB2YXIgZGVwc0xvYWRlZCA9IFtdO1xuICB2YXIgZGVwSHJlZnMgPSBbXTtcbiAgdmFyIG1ldGFkYXRhTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgdmFyIHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBpbXBvcnRQYXJzZShodG1sSW1wb3J0LCBocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyEnKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIGh0bWxMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUocGFyc2VkKTtcbiAgaWYgKHBhcnNlZC5zY3JpcHQpIHtcbiAgICBtZXRhZGF0YUxvYWRlZCA9IHRoaXMuX3Byb2Nlc3NTY3JpcHRzKHBhcnNlZC5zY3JpcHQsIGhyZWYpO1xuICB9XG4gIHZhciBjb21tZW50VGV4dCA9IHBhcnNlZC5jb21tZW50Lm1hcChmdW5jdGlvbihjb21tZW50KXtcbiAgICByZXR1cm4gZG9tNS5nZXRUZXh0Q29udGVudChjb21tZW50KTtcbiAgfSk7XG4gIHZhciBwc2V1ZG9FbGVtZW50cyA9IGRvY3MucGFyc2VQc2V1ZG9FbGVtZW50cyhjb21tZW50VGV4dCk7XG4gIHBzZXVkb0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICB9LmJpbmQodGhpcykpO1xuICBtZXRhZGF0YUxvYWRlZCA9IG1ldGFkYXRhTG9hZGVkLnRoZW4oZnVuY3Rpb24obWV0YWRhdGEpe1xuICAgIHZhciBtZXRhZGF0YUVudHJ5ID0ge1xuICAgICAgZWxlbWVudHM6IHBzZXVkb0VsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgYmVoYXZpb3JzOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIFttZXRhZGF0YSwgbWV0YWRhdGFFbnRyeV0ucmVkdWNlKHJlZHVjZU1ldGFkYXRhKTtcbiAgfSk7XG4gIGRlcHNMb2FkZWQucHVzaChtZXRhZGF0YUxvYWRlZCk7XG5cblxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgYmFzZVVyaSA9IGhyZWY7XG4gICAgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPbmx5IG9uZSBiYXNlIHRhZyBwZXIgZG9jdW1lbnQhXCIpO1xuICAgICAgdGhyb3cgXCJNdWx0aXBsZSBiYXNlIHRhZ3MgaW4gXCIgKyBocmVmO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID09IDEpIHtcbiAgICAgIHZhciBiYXNlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHBhcnNlZC5iYXNlWzBdLCBcImhyZWZcIik7XG4gICAgICBpZiAoYmFzZUhyZWYpIHtcbiAgICAgICAgYmFzZUhyZWYgPSBiYXNlSHJlZiArIFwiL1wiO1xuICAgICAgICBiYXNlVXJpID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgYmFzZUhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZWQuaW1wb3J0LmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgICAgdmFyIGxpbmt1cmwgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgICAgaWYgKGxpbmt1cmwpIHtcbiAgICAgICAgdmFyIHJlc29sdmVkVXJsID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgbGlua3VybCk7XG4gICAgICAgIGRlcEhyZWZzLnB1c2gocmVzb2x2ZWRVcmwpO1xuICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yKHJlc29sdmVkVXJsLCBocmVmKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICBwYXJzZWQuc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzdHlsZUVsZW1lbnQpIHtcbiAgICAgIGlmIChwb2x5bWVyRXh0ZXJuYWxTdHlsZShzdHlsZUVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBzdHlsZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzdHlsZUVsZW1lbnQsICdocmVmJyk7XG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgc3R5bGVIcmVmID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgc3R5bGVIcmVmKTtcbiAgICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5sb2FkZXIucmVxdWVzdChzdHlsZUhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCl7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50W3N0eWxlSHJlZl0gPSBjb250ZW50O1xuICAgICAgICAgIH0uYmluZCh0aGlzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfVxuICBkZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoZGVwc0xvYWRlZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7cmV0dXJuIGRlcEhyZWZzO30pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdID0gcGFyc2VkLmFzdDtcbiAgdGhpcy5odG1sW2hyZWZdID0ge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGh0bWxMb2FkZWQ6IGh0bWxMb2FkZWQsXG4gICAgICBtZXRhZGF0YUxvYWRlZDogbWV0YWRhdGFMb2FkZWQsXG4gICAgICBkZXBIcmVmczogZGVwSHJlZnMsXG4gICAgICBkZXBzTG9hZGVkOiBkZXBzTG9hZGVkXG4gIH07XG4gIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHRzID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHRzKHNjcmlwdHMsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdFByb21pc2VzID0gW107XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICBzY3JpcHRQcm9taXNlcy5wdXNoKHRoaXMuX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChzY3JpcHRQcm9taXNlcykudGhlbihmdW5jdGlvbihtZXRhZGF0YUxpc3QpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0LnJlZHVjZShyZWR1Y2VNZXRhZGF0YSwgRU1QVFlfTUVUQURBVEEpO1xuICB9KTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdCA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikge1xuICB2YXIgc3JjID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gIHZhciBwYXJzZWRKcztcbiAgaWYgKCFzcmMpIHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkSnMgPSBqc1BhcnNlKChzY3JpcHQuY2hpbGROb2Rlcy5sZW5ndGgpID8gc2NyaXB0LmNoaWxkTm9kZXNbMF0udmFsdWUgOiAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBGaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0aGUgZXJyb3IuXG4gICAgICB2YXIgbGluZSA9IDA7XG4gICAgICB2YXIgY29sID0gMDtcbiAgICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgICBsaW5lID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICAgIGNvbCA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgfVxuICAgICAgbGluZSArPSBlcnIubGluZU51bWJlcjtcbiAgICAgIGNvbCArPSBlcnIuY29sdW1uO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgc2NyaXB0IGluIFwiICsgaHJlZiArIFwiIGF0IFwiICsgbGluZSArIFwiOlwiICsgY29sO1xuICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgZXJyLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5lbGVtZW50cykge1xuICAgICAgcGFyc2VkSnMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXMgaW4gdGhpcy5lbGVtZW50c0J5VGFnTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgZHVwbGljYXRlIGVsZW1lbnQgZGVmaW5pdGlvbjogJyArIGVsZW1lbnQuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZmVhdHVyZXMpIHtcbiAgICAgIHBhcnNlZEpzLmZlYXR1cmVzLmZvckVhY2goZnVuY3Rpb24oZmVhdHVyZSl7XG4gICAgICAgIGZlYXR1cmUuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICBmZWF0dXJlLnNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmNvbmNhdChwYXJzZWRKcy5mZWF0dXJlcyk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5iZWhhdmlvcnMpIHtcbiAgICAgIHBhcnNlZEpzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICAgICAgYmVoYXZpb3IuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5pc10gPSBiZWhhdmlvcjtcbiAgICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3Iuc3ltYm9sXSA9IGJlaGF2aW9yO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuYmVoYXZpb3JzID0gdGhpcy5iZWhhdmlvcnMuY29uY2F0KHBhcnNlZEpzLmJlaGF2aW9ycyk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJzZWRTY3JpcHRzLCBocmVmKSkge1xuICAgICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdID0gW107XG4gICAgfVxuICAgIHZhciBzY3JpcHRFbGVtZW50O1xuICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICB9XG4gICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdLnB1c2goe1xuICAgICAgYXN0OiBwYXJzZWRKcy5wYXJzZWRTY3JpcHQsXG4gICAgICBzY3JpcHRFbGVtZW50OiBzY3JpcHRFbGVtZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZEpzO1xuICB9XG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciByZXNvbHZlZFNyYyA9IHVybC5yZXNvbHZlKGhyZWYsIHNyYyk7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QocmVzb2x2ZWRTcmMpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdGhpcy5fY29udGVudFtyZXNvbHZlZFNyY10gPSBjb250ZW50O1xuICAgICAgdmFyIHJlc29sdmVkU2NyaXB0ID0gT2JqZWN0LmNyZWF0ZShzY3JpcHQpO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuY2hpbGROb2RlcyA9IFt7dmFsdWU6IGNvbnRlbnR9XTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmF0dHJzID0gcmVzb2x2ZWRTY3JpcHQuYXR0cnMuc2xpY2UoKTtcbiAgICAgIGRvbTUucmVtb3ZlQXR0cmlidXRlKHJlc29sdmVkU2NyaXB0LCAnc3JjJyk7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NjcmlwdChyZXNvbHZlZFNjcmlwdCwgcmVzb2x2ZWRTcmMpO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB9XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2RlcGVuZGVuY2llc0xvYWRlZEZvciA9IGZ1bmN0aW9uIF9kZXBlbmRlbmNpZXNMb2FkZWRGb3IoaHJlZiwgcm9vdCkge1xuICB2YXIgZm91bmQgPSB7fTtcbiAgaWYgKHJvb3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kW3Jvb3RdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kKS50aGVuKGZ1bmN0aW9uKGRlcHMpIHtcbiAgICB2YXIgZGVwTWV0YWRhdGFMb2FkZWQgPSBbXTtcbiAgICB2YXIgZGVwUHJvbWlzZXMgPSBkZXBzLm1hcChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQoZGVwSHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQ7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBQcm9taXNlcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIExpc3QgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcyBmb3IgdGhlIGRvY3VtZW50IGF0IGBocmVmYC5cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgaHJlZiAgICAgIFRoZSBocmVmIHRvIGdldCBkZXBlbmRlbmNpZXMgZm9yLlxuICogQHBhcmFtICB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbj49fSBmb3VuZCAgICAgQW4gb2JqZWN0IGtleWVkIGJ5IFVSTCBvZiB0aGVcbiAqICAgICBhbHJlYWR5IHJlc29sdmVkIGRlcGVuZGVuY2llcy5cbiAqIEBwYXJhbSAge2Jvb2xlYW49fSAgICAgICAgICAgICAgICB0cmFuc2l0aXZlIFdoZXRoZXIgdG8gbG9hZCB0cmFuc2l0aXZlXG4gKiAgICAgZGVwZW5kZW5jaWVzLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59ICBBIGxpc3Qgb2YgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcy5cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9nZXREZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiBfZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kLCB0cmFuc2l0aXZlKSB7XG4gIGlmIChmb3VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmQgPSB7fTtcbiAgICBmb3VuZFtocmVmXSA9IHRydWU7XG4gIH1cbiAgaWYgKHRyYW5zaXRpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zaXRpdmUgPSB0cnVlO1xuICB9XG4gIHZhciBkZXBzID0gW107XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgIHZhciB0cmFuc2l0aXZlRGVwcyA9IFtdO1xuICAgIGh0bWxNb25vbWVyLmRlcEhyZWZzLmZvckVhY2goZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICBpZiAoZm91bmRbZGVwSHJlZl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVwcy5wdXNoKGRlcEhyZWYpO1xuICAgICAgZm91bmRbZGVwSHJlZl0gPSB0cnVlO1xuICAgICAgaWYgKHRyYW5zaXRpdmUpIHtcbiAgICAgICAgdHJhbnNpdGl2ZURlcHMucHVzaCh0aGlzLl9nZXREZXBlbmRlbmNpZXMoZGVwSHJlZiwgZm91bmQpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0cmFuc2l0aXZlRGVwcyk7XG4gIH0uYmluZCh0aGlzKSkudGhlbihmdW5jdGlvbih0cmFuc2l0aXZlRGVwcykge1xuICAgIHZhciBhbGxkZXBzID0gdHJhbnNpdGl2ZURlcHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSkuY29uY2F0KGRlcHMpO1xuICAgIHJldHVybiBhbGxkZXBzO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoZXNEb2N1bWVudEZvbGRlcihkZXNjcmlwdG9yLCBocmVmKSB7XG4gIGlmICghZGVzY3JpcHRvci5jb250ZW50SHJlZikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGVzY3JpcHRvckRvYyA9IHVybC5wYXJzZShkZXNjcmlwdG9yLmNvbnRlbnRIcmVmKTtcbiAgaWYgKCFkZXNjcmlwdG9yRG9jIHx8ICFkZXNjcmlwdG9yRG9jLnBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzZWFyY2hEb2MgPSB1cmwucGFyc2UoaHJlZik7XG4gIGlmICghc2VhcmNoRG9jIHx8ICFzZWFyY2hEb2MucGF0aG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNlYXJjaFBhdGggPSBzZWFyY2hEb2MucGF0aG5hbWU7XG4gIHZhciBsYXN0U2xhc2ggPSBzZWFyY2hQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgaWYgKGxhc3RTbGFzaCA+IDApIHtcbiAgICBzZWFyY2hQYXRoID0gc2VhcmNoUGF0aC5zbGljZSgwLCBsYXN0U2xhc2gpO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yRG9jLnBhdGhuYW1lLmluZGV4T2Yoc2VhcmNoUGF0aCkgPT09IDA7XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5lbGVtZW50c0ZvckZvbGRlciA9IGZ1bmN0aW9uIGVsZW1lbnRzRm9yRm9sZGVyKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoZWxlbWVudCwgaHJlZik7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLmJlaGF2aW9yc0ZvckZvbGRlciA9IGZ1bmN0aW9uIGJlaGF2aW9yc0ZvckZvbGRlcihocmVmKSB7XG4gIHJldHVybiB0aGlzLmJlaGF2aW9ycy5maWx0ZXIoZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoYmVoYXZpb3IsIGhyZWYpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFBPSk8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGltcG9ydFxuICogdHJlZSwgaW4gYSBmb3JtYXQgdGhhdCBtYWludGFpbnMgdGhlIG9yZGVyaW5nIG9mIHRoZSBIVE1MIGltcG9ydHMgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIHRoZSBpbXBvcnQgdG8gZ2V0IG1ldGFkYXRhIGZvci5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBtZXRhZGF0YVRyZWUoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24obW9ub21lcil7XG4gICAgdmFyIGxvYWRlZEhyZWZzID0ge307XG4gICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUobW9ub21lciwgbG9hZGVkSHJlZnMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBfbWV0YWRhdGFUcmVlKGh0bWxNb25vbWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZEhyZWZzKSB7XG4gIGlmIChsb2FkZWRIcmVmcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9hZGVkSHJlZnMgPSB7fTtcbiAgfVxuICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhID0ge1xuICAgICAgZWxlbWVudHM6IG1ldGFkYXRhLmVsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IG1ldGFkYXRhLmZlYXR1cmVzLFxuICAgICAgaHJlZjogaHRtbE1vbm9tZXIuaHJlZlxuICAgIH07XG4gICAgcmV0dXJuIGh0bWxNb25vbWVyLmRlcHNMb2FkZWQudGhlbihmdW5jdGlvbihocmVmcykge1xuICAgICAgdmFyIGRlcE1ldGFkYXRhID0gW107XG4gICAgICBocmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGhyZWYpIHtcbiAgICAgICAgdmFyIG1ldGFkYXRhUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgaWYgKGRlcE1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBkZXBNZXRhZGF0YVtkZXBNZXRhZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBtZXRhZGF0YVByb21pc2UudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWxvYWRlZEhyZWZzW2hyZWZdKSB7XG4gICAgICAgICAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKHRoaXMuaHRtbFtocmVmXSwgbG9hZGVkSHJlZnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIGRlcE1ldGFkYXRhLnB1c2gobWV0YWRhdGFQcm9taXNlKTtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwTWV0YWRhdGEpLnRoZW4oZnVuY3Rpb24oaW1wb3J0TWV0YWRhdGEpIHtcbiAgICAgICAgbWV0YWRhdGEuaW1wb3J0cyA9IGltcG9ydE1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIuaHRtbExvYWRlZC50aGVuKGZ1bmN0aW9uKHBhcnNlZEh0bWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5odG1sID0gcGFyc2VkSHRtbDtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSHRtbCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGluZ0ltcG9ydChpbXBvcnRFbGVtZW50KSB7XG4gIHZhciBtYXRjaGVzVGFnID0gZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoaW1wb3J0RWxlbWVudC50YWdOYW1lKTtcbiAgdmFyIG1hdGNoZXNIcmVmID0gZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgnaHJlZicsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdocmVmJykpO1xuICB2YXIgbWF0Y2hlc1JlbCA9IGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdyZWwnKSk7XG4gIHJldHVybiBkb201LnByZWRpY2F0ZXMuQU5EKG1hdGNoZXNUYWcsIG1hdGNoZXNIcmVmLCBtYXRjaGVzUmVsKTtcbn1cblxuLy8gVE9ETyhham8pOiBSZWZhY3RvciBvdXQgb2YgdnVsY2FuaXplIGludG8gZG9tNS5cbnZhciBwb2x5bWVyRXh0ZXJuYWxTdHlsZSA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuKTtcblxudmFyIGV4dGVybmFsU2NyaXB0ID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ3NjcmlwdCcpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0cignc3JjJylcbik7XG5cbnZhciBpc0h0bWxJbXBvcnROb2RlID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBkb201LnByZWRpY2F0ZXMuTk9UKFxuICAgIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVTdHlsZXMgPSBmdW5jdGlvbiBfaW5saW5lU3R5bGVzKGFzdCwgaHJlZikge1xuICB2YXIgY3NzTGlua3MgPSBkb201LnF1ZXJ5QWxsKGFzdCwgcG9seW1lckV4dGVybmFsU3R5bGUpO1xuICBjc3NMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHtcbiAgICB2YXIgbGlua0hyZWYgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBsaW5rSHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIHN0eWxlID0gZG9tNS5jb25zdHJ1Y3RvcnMuZWxlbWVudCgnc3R5bGUnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KHN0eWxlLCAnXFxuJyArIGNvbnRlbnQgKyAnXFxuJyk7XG4gICAgZG9tNS5yZXBsYWNlKGxpbmssIHN0eWxlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIGNzc0xpbmtzLmxlbmd0aCA+IDA7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZVNjcmlwdHMgPSBmdW5jdGlvbiBfaW5saW5lU2NyaXB0cyhhc3QsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdHMgPSBkb201LnF1ZXJ5QWxsKGFzdCwgZXh0ZXJuYWxTY3JpcHQpO1xuICBzY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7XG4gICAgdmFyIHNjcmlwdEhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgc2NyaXB0SHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIGlubGluZWQgPSBkb201LmNvbnN0cnVjdG9ycy5lbGVtZW50KCdzY3JpcHQnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KGlubGluZWQsICdcXG4nICsgY29udGVudCArICdcXG4nKTtcbiAgICBkb201LnJlcGxhY2Uoc2NyaXB0LCBpbmxpbmVkKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIHNjcmlwdHMubGVuZ3RoID4gMDtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lSW1wb3J0cyA9IGZ1bmN0aW9uIF9pbmxpbmVJbXBvcnRzKGFzdCwgaHJlZiwgbG9hZGVkKSB7XG4gIHZhciBpbXBvcnRzID0gZG9tNS5xdWVyeUFsbChhc3QsIGlzSHRtbEltcG9ydE5vZGUpO1xuICBpbXBvcnRzLmZvckVhY2goZnVuY3Rpb24oaHRtbEltcG9ydCkge1xuICAgIHZhciBpbXBvcnRIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoaHRtbEltcG9ydCwgJ2hyZWYnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgaW1wb3J0SHJlZik7XG4gICAgaWYgKGxvYWRlZFt1cmldKSB7XG4gICAgICBkb201LnJlbW92ZShodG1sSW1wb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLmdldExvYWRlZEFzdCh1cmksIGxvYWRlZCk7XG4gICAgZG9tNS5yZXBsYWNlKGh0bWxJbXBvcnQsIGNvbnRlbnQpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gaW1wb3J0cy5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBmb3JtIG9mIHRoZSBBU1Qgd2l0aCBhbGwgbGlua3MgcmVwbGFjZWRcbiAqIHdpdGggdGhlIGRvY3VtZW50IHRoZXkgbGluayB0by4gLmNzcyBhbmQgLnNjcmlwdCBmaWxlcyBiZWNvbWUgJmx0O3N0eWxlJmd0OyBhbmRcbiAqICZsdDtzY3JpcHQmZ3Q7LCByZXNwZWN0aXZlbHkuXG4gKlxuICogVGhlIGVsZW1lbnRzIGluIHRoZSBsb2FkZWQgZG9jdW1lbnQgYXJlIHVubW9kaWZpZWQgZnJvbSB0aGVpciBvcmlnaW5hbFxuICogZG9jdW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFRoZSBkb2N1bWVudCB0byBsb2FkLlxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGxvYWRlZCBBbiBvYmplY3Qga2V5ZWQgYnkgYWxyZWFkeSBsb2FkZWQgZG9jdW1lbnRzLlxuICogQHJldHVybiB7UHJvbWlzZS48RG9jdW1lbnRBU1Q+fVxuICovXG5BbmFseXplci5wcm90b3R5cGUuZ2V0TG9hZGVkQXN0ID0gZnVuY3Rpb24gZ2V0TG9hZGVkQXN0KGhyZWYsIGxvYWRlZCkge1xuICBpZiAoIWxvYWRlZCkge1xuICAgIGxvYWRlZCA9IHt9O1xuICB9XG4gIGxvYWRlZFtocmVmXSA9IHRydWU7XG4gIHZhciBwYXJzZWREb2N1bWVudCA9IHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdO1xuICB2YXIgYW5hbHl6ZWREb2N1bWVudCA9IHRoaXMuaHRtbFtocmVmXTtcbiAgdmFyIGFzdENvcHkgPSBkb201LnBhcnNlKGRvbTUuc2VyaWFsaXplKHBhcnNlZERvY3VtZW50KSk7XG4gIC8vIFdoZW5ldmVyIHdlIGlubGluZSBzb21ldGhpbmcsIHJlc2V0IGlubGluZWQgdG8gdHJ1ZSB0byBrbm93IHRoYXQgYW5vYXRoZXJcbiAgLy8gaW5saW5pbmcgcGFzcyBpcyBuZWVkZWQ7XG4gIHRoaXMuX2lubGluZVN0eWxlcyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lU2NyaXB0cyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lSW1wb3J0cyhhc3RDb3B5LCBocmVmLCBsb2FkZWQpO1xuICByZXR1cm4gYXN0Q29weTtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtBbGxgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLnBhcnNlZERvY3VtZW50cykge1xuICAgIHZhciBtYXRjaCA9IGRvbTUubm9kZVdhbGsodGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0sIHByZWRpY2F0ZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBDYWxscyBgZG9tNS5ub2RlV2Fsa0FsbGAgb24gZWFjaCBkb2N1bWVudCB0aGF0IGBBbmF5emxlcmAgaGFzIGxhb2RlZC5cbiAqIEBwYXJhbSAge09iamVjdH0gcHJlZGljYXRlIEEgZG9tNSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5ub2RlV2Fsa0FsbERvY3VtZW50cyA9IGZ1bmN0aW9uIG5vZGVXYWxrRG9jdW1lbnRzKHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBmb3IgKHZhciBocmVmIGluIHRoaXMucGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG5ld05vZGVzID0gZG9tNS5ub2RlV2Fsa0FsbCh0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSwgcHJlZGljYXRlKTtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobmV3Tm9kZXMpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqIEFubm90YXRlcyBhbGwgbG9hZGVkIG1ldGFkYXRhIHdpdGggaXRzIGRvY3VtZW50YXRpb24uICovXG5BbmFseXplci5wcm90b3R5cGUuYW5ub3RhdGUgPSBmdW5jdGlvbiBhbm5vdGF0ZSgpIHtcbiAgaWYgKHRoaXMuZmVhdHVyZXMubGVuZ3RoID4gMCkge1xuICAgIHZhciBmZWF0dXJlRWwgPSBkb2NzLmZlYXR1cmVFbGVtZW50KHRoaXMuZmVhdHVyZXMpO1xuICAgIHRoaXMuZWxlbWVudHMudW5zaGlmdChmZWF0dXJlRWwpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZmVhdHVyZUVsLmlzXSA9IGZlYXR1cmVFbDtcbiAgfVxuICB2YXIgYmVoYXZpb3JzQnlOYW1lID0gdGhpcy5iZWhhdmlvcnNCeU5hbWU7XG4gIHZhciBlbGVtZW50SGVscGVyID0gZnVuY3Rpb24oZGVzY3JpcHRvcil7XG4gICAgZG9jcy5hbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKTtcbiAgfTtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpO1xuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpOyAvLyBTYW1lIHNoYXBlLlxuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICBpZiAoYmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yLnN5bWJvbCAmJiBiZWhhdmlvci5zeW1ib2wpIHtcbiAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gYXR0YWNoRG9tTW9kdWxlKHBhcnNlZEltcG9ydCwgZWxlbWVudCkge1xuICB2YXIgZG9tTW9kdWxlcyA9IHBhcnNlZEltcG9ydFsnZG9tLW1vZHVsZSddO1xuICBmb3IgKHZhciBpID0gMCwgZG9tTW9kdWxlOyBpIDwgZG9tTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGRvbU1vZHVsZSA9IGRvbU1vZHVsZXNbaV07XG4gICAgaWYgKGRvbTUuZ2V0QXR0cmlidXRlKGRvbU1vZHVsZSwgJ2lkJykgPT09IGVsZW1lbnQuaXMpIHtcbiAgICAgIGVsZW1lbnQuZG9tTW9kdWxlID0gZG9tTW9kdWxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmVtb3ZlcyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIHRoZSBjb2xsZWN0ZWQgZGVzY3JpcHRvcnMuICovXG5BbmFseXplci5wcm90b3R5cGUuY2xlYW4gPSBmdW5jdGlvbiBjbGVhbigpIHtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGRvY3MuY2xlYW5FbGVtZW50KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQW5hbHl6ZXI7XG4iXX0=
  737 +},{"./ast-utils/docs":5,"./ast-utils/import-parse":10,"./ast-utils/js-parse":11,"./loader/file-loader":13,"./loader/fs-resolver":14,"./loader/noop-resolver":15,"./loader/xhr-resolver":16,"dom5":38,"es6-promise":60,"url":26}],2:[function(require,module,exports){
636 738 /**
637 739 * @license
638 740 * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
... ... @@ -820,7 +922,7 @@ function arrayExpressionToValue(arry) {
820 922 for (var i=0; i<arry.elements.length; i++) {
821 923 var v = expressionToValue(arry.elements[i]);
822 924 if (v === undefined)
823   - v = CANT_CONVERT;
  925 + continue;
824 926 if (i !== 0)
825 927 value += ', ';
826 928 value += v;
... ... @@ -838,7 +940,7 @@ function objectExpressionToValue(obj) {
838 940 var k = expressionToValue(obj.properties[i].key);
839 941 var v = expressionToValue(obj.properties[i].value);
840 942 if (v === undefined)
841   - v = CANT_CONVERT;
  943 + continue;
842 944 if (i !== 0)
843 945 value += ', ';
844 946 value += '"' + k + '": ' + v;
... ... @@ -967,6 +1069,35 @@ module.exports = function behaviorFinder() {
967 1069 return newBehavior;
968 1070 }
969 1071  
  1072 + /**
  1073 + * gets the expression representing a behavior from a node.
  1074 + */
  1075 + function behaviorExpression(node) {
  1076 + switch(node.type) {
  1077 + case 'ExpressionStatement':
  1078 + return node.expression.right;
  1079 + case 'VariableDeclaration':
  1080 + return node.declarations.length > 0 ? node.declarations[0].init : null;
  1081 + }
  1082 + }
  1083 +
  1084 + /**
  1085 + * checks whether an expression is a simple array containing only member
  1086 + * expressions or identifiers.
  1087 + */
  1088 + function isSimpleBehaviorArray(expression) {
  1089 + if (!expression || expression.type !== 'ArrayExpression') return false;
  1090 + for (var i=0; i < expression.elements.length; i++) {
  1091 + if (expression.elements[i].type !== 'MemberExpression' &&
  1092 + expression.elements[i].type !== 'Identifier') {
  1093 + return false;
  1094 + }
  1095 + }
  1096 + return true;
  1097 + }
  1098 +
  1099 + var templatizer = "Polymer.Templatizer";
  1100 +
970 1101 var visitors = {
971 1102  
972 1103 /**
... ... @@ -993,20 +1124,14 @@ module.exports = function behaviorFinder() {
993 1124 // inside the array. Ex:
994 1125 // Polymer.IronMultiSelectableBehavior = [ {....}, Polymer.IronSelectableBehavior]
995 1126 // We add these to behaviors array
996   - var expression;
997   - switch(node.type) {
998   - case 'ExpressionStatement':
999   - expression = node.expression.right;
1000   - break;
1001   - case 'VariableDeclaration':
1002   - expression = node.declarations.length > 0 ? node.declarations[0].init : null;
1003   - break;
1004   - }
  1127 + var expression = behaviorExpression(node);
1005 1128 var chained = [];
1006 1129 if (expression && expression.type === 'ArrayExpression') {
1007 1130 for (var i=0; i < expression.elements.length; i++) {
1008   - if (expression.elements[i].type === 'MemberExpression')
  1131 + if (expression.elements[i].type === 'MemberExpression' ||
  1132 + expression.elements[i].type === 'Identifier') {
1009 1133 chained.push(astValue.expressionToValue(expression.elements[i]));
  1134 + }
1010 1135 }
1011 1136 if (chained.length > 0)
1012 1137 currentBehavior.behaviors = chained;
... ... @@ -1015,8 +1140,13 @@ module.exports = function behaviorFinder() {
1015 1140  
1016 1141 _initBehavior: function(node, getName) {
1017 1142 var comment = esutil.getAttachedComment(node);
  1143 + var symbol = getName();
1018 1144 // Quickly filter down to potential candidates.
1019   - if (!comment || comment.indexOf('@polymerBehavior') === -1) return;
  1145 + if (!comment || comment.indexOf('@polymerBehavior') === -1) {
  1146 + if (symbol !== templatizer) {
  1147 + return;
  1148 + }
  1149 + }
1020 1150  
1021 1151  
1022 1152 currentBehavior = {
... ... @@ -1029,14 +1159,16 @@ module.exports = function behaviorFinder() {
1029 1159  
1030 1160 docs.annotateBehavior(currentBehavior);
1031 1161 // Make sure that we actually parsed a behavior tag!
1032   - if (!jsdoc.hasTag(currentBehavior.jsdoc, 'polymerBehavior')) {
  1162 + if (!jsdoc.hasTag(currentBehavior.jsdoc, 'polymerBehavior') &&
  1163 + symbol !== templatizer) {
1033 1164 currentBehavior = null;
1034 1165 return;
1035 1166 }
1036 1167  
1037 1168 var name = jsdoc.getTag(currentBehavior.jsdoc, 'polymerBehavior', 'name');
  1169 + currentBehavior.symbol = symbol;
1038 1170 if (!name) {
1039   - name = getName();
  1171 + name = currentBehavior.symbol;
1040 1172 }
1041 1173 if (!name) {
1042 1174 console.warn('Unable to determine name for @polymerBehavior:', comment);
... ... @@ -1046,6 +1178,16 @@ module.exports = function behaviorFinder() {
1046 1178 this._parseChainedBehaviors(node);
1047 1179  
1048 1180 currentBehavior = mergeBehavior(currentBehavior);
  1181 +
  1182 + // Some behaviors are just lists of other behaviors. If this is one then
  1183 + // add it to behaviors right away.
  1184 + if (isSimpleBehaviorArray(behaviorExpression(node))) {
  1185 + // TODO(ajo): Add a test to confirm the presence of `properties`.
  1186 + if (!currentBehavior.properties) currentBehavior.properties = [];
  1187 + if (behaviors.indexOf(currentBehavior) === -1)
  1188 + behaviors.push(currentBehavior);
  1189 + currentBehavior = null;
  1190 + }
1049 1191 },
1050 1192  
1051 1193 /**
... ... @@ -1180,6 +1322,54 @@ function annotateElementHeader(descriptor) {
1180 1322 }
1181 1323 }
1182 1324  
  1325 +function matchByName(propa, propb) {
  1326 + return propa.name == propb.name;
  1327 +}
  1328 +
  1329 +function copyProperties(from, to, behaviorsByName) {
  1330 + if (from.properties) {
  1331 + from.properties.forEach(function(fromProp){
  1332 + for (var toProp, i = 0; i < to.properties.length; i++) {
  1333 + toProp = to.properties[i];
  1334 + if (fromProp.name === toProp.name) {
  1335 + return;
  1336 + }
  1337 + }
  1338 + var newProp = {__fromBehavior: from.is};
  1339 + if (fromProp.__fromBehavior) {
  1340 + return;
  1341 + }
  1342 + Object.keys(fromProp).forEach(function(propertyField){
  1343 + newProp[propertyField] = fromProp[propertyField];
  1344 + });
  1345 + to.properties.push(newProp);
  1346 + });
  1347 + }
  1348 + if (!from.behaviors) {
  1349 + return;
  1350 + }
  1351 + from.behaviors.forEach(function(behavior){
  1352 + var definedBehavior = behaviorsByName[behavior] || behaviorsByName[behavior.symbol];
  1353 + if (!definedBehavior) {
  1354 + return;
  1355 + }
  1356 + copyProperties(definedBehavior, to, behaviorsByName);
  1357 + });
  1358 +}
  1359 +
  1360 +function mixinBehaviors(descriptor, behaviorsByName) {
  1361 + if (descriptor.behaviors) {
  1362 + descriptor.behaviors.forEach(function(behavior){
  1363 + if (!behaviorsByName[behavior]) {
  1364 + console.warn("Behavior " + behavior + " not found!");
  1365 + return;
  1366 + }
  1367 + var definedBehavior = behaviorsByName[behavior];
  1368 + copyProperties(definedBehavior, descriptor, behaviorsByName);
  1369 + });
  1370 + }
  1371 +}
  1372 +
1183 1373 /**
1184 1374 * Annotates documentation found within a Hydrolysis element descriptor. Also
1185 1375 * supports behaviors.
... ... @@ -1190,7 +1380,7 @@ function annotateElementHeader(descriptor) {
1190 1380 * @param {Object} descriptor The element descriptor.
1191 1381 * @return {Object} The descriptor that was given.
1192 1382 */
1193   -function annotateElement(descriptor) {
  1383 +function annotateElement(descriptor, behaviorsByName) {
1194 1384 if (!descriptor.desc && descriptor.type === 'element') {
1195 1385 descriptor.desc = _findElementDocs(descriptor.is,
1196 1386 descriptor.domModule,
... ... @@ -1201,8 +1391,11 @@ function annotateElement(descriptor) {
1201 1391 // The `<dom-module>` is too low level for most needs, and it is _not_
1202 1392 // serializable. So we drop it now that we've extracted all the useful bits
1203 1393 // from it.
  1394 + // TODO: Don't worry about serializability here, provide an API to get JSON.
1204 1395 delete descriptor.domModule;
1205 1396  
  1397 + mixinBehaviors(descriptor, behaviorsByName);
  1398 +
1206 1399 // Descriptors that should have their `desc` properties parsed as JSDoc.
1207 1400 descriptor.properties.forEach(function(property) {
1208 1401 // Feature properties are special, configuration is really just a matter of
... ... @@ -1235,9 +1428,8 @@ function annotateElement(descriptor) {
1235 1428 * @param {Object} descriptor behavior descriptor
1236 1429 * @return {Object} descriptor passed in as param
1237 1430 */
1238   -function annotateBehavior(descriptor) {
  1431 +function annotateBehavior(descriptor, behaviorsByName) {
1239 1432 annotate(descriptor);
1240   -
1241 1433 annotateElementHeader(descriptor);
1242 1434  
1243 1435 return descriptor;
... ... @@ -1296,7 +1488,10 @@ function annotateProperty(descriptor, ignoreConfiguration) {
1296 1488 // @default JSDoc wins
1297 1489 var defaultTag = jsdoc.getTag(descriptor.jsdoc, 'default');
1298 1490 if (defaultTag !== null) {
1299   - descriptor.default = (defaultTag.name || '') + (defaultTag.description || '');
  1491 + var newDefault = (defaultTag.name || '') + (defaultTag.description || '');
  1492 + if (newDefault !== '') {
  1493 + descriptor.default = newDefault;
  1494 + }
1300 1495 }
1301 1496  
1302 1497 return descriptor;
... ... @@ -1408,6 +1603,30 @@ function cleanProperty(property) {
1408 1603 }
1409 1604  
1410 1605 /**
  1606 + * Parse elements defined only in comments.
  1607 + * @param {comments} Array<string> A list of comments to parse.
  1608 + * @return {ElementDescriptor} A list of pseudo-elements.
  1609 + */
  1610 +function parsePseudoElements(comments) {
  1611 + var elements = [];
  1612 + comments.forEach(function(comment) {
  1613 + var parsed = jsdoc.parseJsdoc(comment);
  1614 + var pseudoTag = jsdoc.getTag(parsed, 'pseudoElement', 'name');
  1615 + if (pseudoTag) {
  1616 + parsed.is = pseudoTag;
  1617 + parsed.jsdoc = {description: parsed.description, tags: parsed.tags};
  1618 + parsed.properties = [];
  1619 + parsed.desc = parsed.description;
  1620 + parsed.description = undefined;
  1621 + parsed.tags = undefined;
  1622 + annotateElementHeader(parsed);
  1623 + elements.push(parsed);
  1624 + }
  1625 + });
  1626 + return elements;
  1627 +}
  1628 +
  1629 +/**
1411 1630 * @param {string} elementId
1412 1631 * @param {DocumentAST} domModule
1413 1632 * @param {DocumentAST} scriptElement The script that the element was defined in.
... ... @@ -1470,6 +1689,7 @@ module.exports = {
1470 1689 clean: clean,
1471 1690 cleanElement: cleanElement,
1472 1691 featureElement: featureElement,
  1692 + parsePseudoElements: parsePseudoElements
1473 1693 };
1474 1694  
1475 1695 },{"./jsdoc":12,"dom5":38}],6:[function(require,module,exports){
... ... @@ -1525,7 +1745,6 @@ var elementFinder = function elementFinder() {
1525 1745 if (node.type != 'ArrayExpression') {
1526 1746 return;
1527 1747 }
1528   - element.behaviors = [];
1529 1748  
1530 1749 for (var i=0; i<node.elements.length; i++) {
1531 1750 var v = astValue.expressionToValue(node.elements[i]);
... ... @@ -1566,6 +1785,7 @@ var elementFinder = function elementFinder() {
1566 1785 enterObjectExpression: function enterObjectExpression(node, parent) {
1567 1786 if (element && !element.properties) {
1568 1787 element.properties = [];
  1788 + element.behaviors = [];
1569 1789 for (var i = 0; i < node.properties.length; i++) {
1570 1790 var prop = node.properties[i];
1571 1791 var name = esutil.objectKeyToString(prop.key);
... ... @@ -1883,13 +2103,30 @@ var isStyleNode = p.OR(
1883 2103 )
1884 2104 );
1885 2105  
  2106 +var isJSScriptNode = p.AND(
  2107 + p.hasTagName('script'),
  2108 + p.OR(
  2109 + p.NOT(p.hasAttr('type')),
  2110 + p.hasAttrValue('type', 'text/javascript'),
  2111 + p.hasAttrValue('type', 'application/javascript')
  2112 + )
  2113 +);
  2114 +
1886 2115 function addNode(node, registry) {
1887 2116 if (isHtmlImportNode(node)) {
1888 2117 registry.import.push(node);
1889 2118 } else if (isStyleNode(node)) {
1890 2119 registry.style.push(node);
1891   - } else if (registry.hasOwnProperty(node.tagName)) {
1892   - registry[node.tagName].push(node);
  2120 + } else if (isJSScriptNode(node)) {
  2121 + registry.script.push(node);
  2122 + } else if (node.tagName === 'base') {
  2123 + registry.base.push(node);
  2124 + } else if (node.tagName === 'template') {
  2125 + registry.template.push(node);
  2126 + } else if (node.tagName === 'dom-module') {
  2127 + registry['dom-module'].push(node);
  2128 + } else if (dom5.isCommentNode(node)) {
  2129 + registry.comment.push(node);
1893 2130 }
1894 2131 }
1895 2132  
... ... @@ -1951,13 +2188,14 @@ var importParse = function importParse(htmlString, href) {
1951 2188 script: [],
1952 2189 style: [],
1953 2190 import: [],
1954   - 'dom-module': []};
  2191 + 'dom-module': [],
  2192 + comment: []};
1955 2193  
1956 2194 var queue = [].concat(doc.childNodes);
1957 2195 var nextNode;
1958 2196 while (queue.length > 0) {
1959 2197 nextNode = queue.shift();
1960   - if (nextNode && nextNode.tagName) {
  2198 + if (nextNode) {
1961 2199 queue = queue.concat(nextNode.childNodes);
1962 2200 addNode(nextNode, registry);
1963 2201 }
... ... @@ -2058,6 +2296,7 @@ var jsParse = function jsParse(jsString) {
2058 2296 behaviors: behaviorInfo.behaviors,
2059 2297 elements: elementInfo.elements,
2060 2298 features: featureInfo.features,
  2299 + parsedScript: script
2061 2300 };
2062 2301 };
2063 2302  
... ... @@ -2376,7 +2615,7 @@ FileLoader.prototype = {
2376 2615 }
2377 2616  
2378 2617 if (!handled) {
2379   - deferred.reject('no resolver found');
  2618 + deferred.reject(new Error('no resolver found for ' + uri));
2380 2619 }
2381 2620  
2382 2621 promise = deferred.promise;
... ... @@ -2391,7 +2630,7 @@ FileLoader.prototype = {
2391 2630 module.exports = FileLoader;
2392 2631  
2393 2632 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2394   -
  2633 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBqc2hpbnQgLVcwNzlcbi8vIFByb21pc2UgcG9seWZpbGxcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbmZ1bmN0aW9uIERlZmVycmVkKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHNlbGYucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgc2VsZi5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlIHJlc291cmNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlc29sdmVyXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcsIERlZmVycmVkKTogYm9vbGVhbn0gYWNjZXB0IEF0dGVtcHQgdG8gcmVzb2x2ZVxuICogICAgIGBkZWZlcnJlZGAgd2l0aCB0aGUgY29udGVudHMgdGhlIHNwZWNpZmllZCBVUkwuIFJldHVybnMgZmFsc2UgaWYgdGhlXG4gKiAgICAgUmVzb2x2ZXIgaXMgdW5hYmxlIHRvIHJlc29sdmUgdGhlIFVSTC5cbiAqL1xuXG5cbi8qKlxuICogQSBGaWxlTG9hZGVyIGxldHMgeW91IHJlc29sdmUgVVJMcyB3aXRoIGEgc2V0IG9mIHBvdGVudGlhbCByZXNvbHZlcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cbmZ1bmN0aW9uIEZpbGVMb2FkZXIoKSB7XG4gIHRoaXMucmVzb2x2ZXJzID0gW107XG4gIC8vIG1hcCB1cmwgLT4gRGVmZXJyZWRcbiAgdGhpcy5yZXF1ZXN0cyA9IHt9O1xufVxuRmlsZUxvYWRlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbnN0YW5jZSBvZiBhIFJlc29sdmVyIGNsYXNzIHRvIHRoZSBsaXN0IG9mIHVybCByZXNvbHZlcnNcbiAgICpcbiAgICogT3JkZXJpbmcgb2YgcmVzb2x2ZXJzIGlzIG1vc3QgdG8gbGVhc3QgcmVjZW50bHkgYWRkZWRcbiAgICogVGhlIGZpcnN0IHJlc29sdmVyIHRvIFwiYWNjZXB0XCIgdGhlIHVybCB3aW5zLlxuICAgKiBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgdG8gYWRkLlxuICAgKi9cbiAgYWRkUmVzb2x2ZXI6IGZ1bmN0aW9uKHJlc29sdmVyKSB7XG4gICAgdGhpcy5yZXNvbHZlcnMucHVzaChyZXNvbHZlcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHByb21pc2UgZm9yIGFuIGFic29sdXRlIHVybFxuICAgKlxuICAgKiBVcmwgcmVxdWVzdHMgYXJlIGRlZHVwbGljYXRlZCBieSB0aGUgbG9hZGVyLCByZXR1cm5pbmcgdGhlIHNhbWUgUHJvbWlzZSBmb3JcbiAgICogaWRlbnRpY2FsIHVybHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgVGhlIGFic29sdXRlIHVybCB0byByZXF1ZXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlLjxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudHMgb2YgdGhlIFVSTC5cbiAgICovXG4gIHJlcXVlc3Q6IGZ1bmN0aW9uKHVyaSkge1xuICAgIHZhciBwcm9taXNlO1xuXG4gICAgaWYgKCEodXJpIGluIHRoaXMucmVxdWVzdHMpKSB7XG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICB0aGlzLnJlcXVlc3RzW3VyaV0gPSBkZWZlcnJlZDtcblxuICAgICAgLy8gbG9vcCBiYWNrd2FyZHMgdGhyb3VnaCByZXNvbHZlcnMgdW50aWwgb25lIFwiYWNjZXB0c1wiIHRoZSByZXF1ZXN0XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5yZXNvbHZlcnMubGVuZ3RoIC0gMSwgcjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgciA9IHRoaXMucmVzb2x2ZXJzW2ldO1xuICAgICAgICBpZiAoci5hY2NlcHQodXJpLCBkZWZlcnJlZCkpIHtcbiAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcignbm8gcmVzb2x2ZXIgZm91bmQgZm9yICcgKyB1cmkpKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RzW3VyaV0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlTG9hZGVyO1xuIl19
2395 2634 },{"es6-promise":60}],14:[function(require,module,exports){
2396 2635 /**
2397 2636 * @license
... ... @@ -3221,7 +3460,7 @@ var substr = &#39;ab&#39;.substr(-1) === &#39;b&#39;
3221 3460 ;
3222 3461  
3223 3462 }).call(this,require('_process'))
3224   -
  3463 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iXX0=
3225 3464 },{"_process":21}],21:[function(require,module,exports){
3226 3465 // shim for using process in browser
3227 3466  
... ... @@ -3793,7 +4032,7 @@ process.umask = function() { return 0; };
3793 4032 }(this));
3794 4033  
3795 4034 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3796   -
  4035 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qISBodHRwOi8vbXRocy5iZS9wdW55Y29kZSB2MS4yLjQgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXiAtfl0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvXFx4MkV8XFx1MzAwMnxcXHVGRjBFfFxcdUZGNjEvZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0XHRhcnJheVtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3MuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0cmV0dXJuIG1hcChzdHJpbmcuc3BsaXQocmVnZXhTZXBhcmF0b3JzKSwgZm4pLmpvaW4oJy4nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGRlY29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgY291bnRlciA9IDAsXG5cdFx0ICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0ICAgIHZhbHVlLFxuXHRcdCAgICBleHRyYTtcblx0XHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0XHQvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcblx0XHRcdFx0XHQvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZW5jb2RlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0XHRyZXR1cm4gbWFwKGFycmF5LCBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XG5cdFx0XHRcdHZhbHVlIC09IDB4MTAwMDA7XG5cdFx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlKTtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuXHQgKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0XHRpZiAoY29kZVBvaW50IC0gNDggPCAxMCkge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gNjUgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gOTcgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xuXHRcdH1cblx0XHRyZXR1cm4gYmFzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcblx0ICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcblx0ICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cblx0ICovXG5cdGZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCwgZmxhZykge1xuXHRcdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdFx0cmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuXHQgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyB0byBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5XG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSB0byBVbmljb2RlLiBPbmx5IHRoZVxuXHQgKiBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG9cblx0ICogVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIFB1bnljb2RlIGRvbWFpbiBuYW1lIHRvIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gUHVueWNvZGUuIE9ubHkgdGhlXG5cdCAqIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS4gaXQgZG9lc24ndFxuXHQgKiBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpbiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIHRvIGNvbnZlcnQsIGFzIGEgVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGRvbWFpbikge1xuXHRcdHJldHVybiBtYXBEb21haW4oZG9tYWluLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS4yLjQnLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiJdfQ==
3797 4036 },{}],23:[function(require,module,exports){
3798 4037 // Copyright Joyent, Inc. and other Node contributors.
3799 4038 //
... ... @@ -5279,7 +5518,7 @@ function hasOwnProperty(obj, prop) {
5279 5518 }
5280 5519  
5281 5520 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5282   -
  5521 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiJdfQ==
5283 5522 },{"./support/isBuffer":27,"_process":21,"inherits":19}],29:[function(require,module,exports){
5284 5523 /*
5285 5524 Copyright (C) 2012-2014 Yusuke Suzuki <utatane.tea@gmail.com>
... ... @@ -5607,6 +5846,10 @@ function hasOwnProperty(obj, prop) {
5607 5846 name += scanIdentifier(last);
5608 5847  
5609 5848 }
  5849 + if(source.charCodeAt(index) === 0x5B /* '[' */ && source.charCodeAt(index + 1) === 0x5D /* ']' */){
  5850 + name += advance();
  5851 + name += advance();
  5852 + }
5610 5853 while (source.charCodeAt(index) === 0x2E /* '.' */ ||
5611 5854 source.charCodeAt(index) === 0x23 /* '#' */ ||
5612 5855 source.charCodeAt(index) === 0x7E /* '~' */) {
... ... @@ -5864,7 +6107,9 @@ function hasOwnProperty(obj, prop) {
5864 6107 // un-fix potentially sloppy declaration
5865 6108 if (isParamTitle(this._title) && !this._tag.type && description && description.charAt(0) === '[') {
5866 6109 this._tag.type = this._extra.name;
5867   - this._tag.name = undefined;
  6110 + if (!this._tag.name) {
  6111 + this._tag.name = undefined;
  6112 + }
5868 6113  
5869 6114 if (!sloppy) {
5870 6115 if (!this.addError('Missing or invalid tag name')) {
... ... @@ -7847,7 +8092,7 @@ module.exports={
7847 8092 "description": "JSDoc parser",
7848 8093 "homepage": "http://github.com/Constellation/doctrine.html",
7849 8094 "main": "lib/doctrine.js",
7850   - "version": "0.6.4",
  8095 + "version": "0.7.0",
7851 8096 "engines": {
7852 8097 "node": ">=0.10.0"
7853 8098 },
... ... @@ -7863,14 +8108,17 @@ module.exports={
7863 8108 ],
7864 8109 "maintainers": [
7865 8110 {
7866   - "name": "Yusuke Suzuki",
7867   - "email": "utatane.tea@gmail.com",
7868   - "url": "http://github.com/Constellation"
  8111 + "name": "constellation",
  8112 + "email": "utatane.tea@gmail.com"
  8113 + },
  8114 + {
  8115 + "name": "nzakas",
  8116 + "email": "nicholas@nczconsulting.com"
7869 8117 }
7870 8118 ],
7871 8119 "repository": {
7872 8120 "type": "git",
7873   - "url": "http://github.com/Constellation/doctrine.git"
  8121 + "url": "http://github.com/eslint/doctrine.git"
7874 8122 },
7875 8123 "devDependencies": {
7876 8124 "coveralls": "^2.11.2",
... ... @@ -7889,7 +8137,7 @@ module.exports={
7889 8137 "licenses": [
7890 8138 {
7891 8139 "type": "BSD",
7892   - "url": "http://github.com/Constellation/doctrine/raw/master/LICENSE.BSD"
  8140 + "url": "http://github.com/eslint/doctrine/raw/master/LICENSE.BSD"
7893 8141 }
7894 8142 ],
7895 8143 "scripts": {
... ... @@ -7902,17 +8150,23 @@ module.exports={
7902 8150 "esutils": "^1.1.6",
7903 8151 "isarray": "0.0.1"
7904 8152 },
7905   - "gitHead": "4f74c86ea5cd03fbd947c4df91a2192d13779fb5",
7906   - "readme": "doctrine ([doctrine](http://github.com/Constellation/doctrine)) is JSDoc parser.\n\n[![Build Status](https://travis-ci.org/Constellation/doctrine.svg?branch=master)](https://travis-ci.org/Constellation/doctrine)\n[![Coverage Status](https://img.shields.io/coveralls/Constellation/doctrine.svg)](https://coveralls.io/r/Constellation/doctrine?branch=master)\n[![Dependency Status](https://david-dm.org/Constellation/doctrine.svg)](https://david-dm.org/Constellation/doctrine)\n[![devDependency Status](https://david-dm.org/Constellation/doctrine/dev-status.svg)](https://david-dm.org/Constellation/doctrine#info=devDependencies)\n[![Gitter chat](https://badges.gitter.im/Constellation/doctrine.png)](https://gitter.im/Constellation/doctrine)\n\nIt is now used by content assist system of [Eclipse Orion](http://www.eclipse.org/orion/) ([detail](http://planetorion.org/news/2012/10/orion-1-0-release/)). And used as JSDoc validator in [ESLint](http://eslint.org/).\n\nDoctrine can be used in a web browser with using browserify.\nor in a Node.js application via the package manager:\n\n npm install doctrine\n\nsimple example:\n\n doctrine.parse(\n [\n \"/**\",\n \" * This function comment is parsed by doctrine\",\n \" * @param {{ok:String}} userName\",\n \"*/\"\n ].join('\\n'), { unwrap: true });\n\nand gets following information\n\n {\n \"description\": \"This function comment is parsed by doctrine\",\n \"tags\": [\n {\n \"title\": \"param\",\n \"description\": null,\n \"type\": {\n \"type\": \"RecordType\",\n \"fields\": [\n {\n \"type\": \"FieldType\",\n \"key\": \"ok\",\n \"value\": {\n \"type\": \"NameExpression\",\n \"name\": \"String\"\n }\n }\n ]\n },\n \"name\": \"userName\"\n }\n ]\n }\n\nsee [demo page](http://constellation.github.com/doctrine/demo/index.html) more detail.\n\n### Options\n\n#### doctrine.parse\nWe can pass options to `doctrine.parse(comment, options)`.\n```js\n{\n unwrap: boolean, // default: false\n tags: [ string ] | null, // default: null\n recoverable: boolean, // default: false\n sloppy: boolean, // default: false\n lineNumbers: boolean // default: false\n}\n```\n\n##### unwrap\n\nWhen `unwrap` is `true`, doctrine attempt to unwrap comment specific string from a provided comment text. (removes `/**`, `*/` and `*`)\nFor example, `unwrap` transforms\n```\n/**\n * @param use\n */\n```\nto\n```\n@param use\n```\nIf a provided comment has these comment specific strings, you need to specify this `unwrap` option to `true`.\n\n##### tags\n\nWhen `tags` array is specified, doctrine only produce tags that is specified in this array.\nFor example, if you specify `[ 'param' ]`, doctrine only produces `param` tags.\nIf null is specified, doctrine produces all tags that doctrine can recognize.\n\n##### recoverable\n\nWhen `recoverable` is `true`, doctrine becomes `recoverable` - When failing to parse jsdoc comment, doctrine recovers its state and attempt to continue parsing.\n\n##### sloppy\n\nWhen `sloppy` is `true`,\n```\n@param String [foo]\n```\n's `[foo]` is interpreted as a optional parameter, not interpreted as a name of this `@param`.\n\n##### lineNumbers\n\nWhen `lineNumbers` is `true`, parsed tags will include a `lineNumber` property indicating the line (relative to the start of the comment block) where each tag is located in the source. So, given the following comment:\n```\n/**\n * @param {String} foo\n * @return {number}\n */\n```\nThe `@param` tag will have `lineNumber: 1`, and the `@return` tag will have `lineNumber: 2`.\n\n\n### License\n\n#### doctrine\n\nCopyright (C) 2012 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#### esprima\n\nsome of functions is derived from esprima\n\nCopyright (C) 2012, 2011 [Ariya Hidayat](http://ariya.ofilabs.com/about)\n (twitter: [@ariyahidayat](http://twitter.com/ariyahidayat)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n#### closure-compiler\n\nsome of extensions is derived from closure-compiler\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n",
7907   - "readmeFilename": "README.md",
  8153 + "gitHead": "0d059e422bdfd630eaa15d583567c8668923f7e6",
7908 8154 "bugs": {
7909   - "url": "https://github.com/Constellation/doctrine/issues"
  8155 + "url": "https://github.com/eslint/doctrine/issues"
  8156 + },
  8157 + "_id": "doctrine@0.7.0",
  8158 + "_shasum": "dcc9589850b043d6e58abe24b561ccd57176cfd3",
  8159 + "_from": "doctrine@*",
  8160 + "_npmVersion": "1.4.28",
  8161 + "_npmUser": {
  8162 + "name": "nzakas",
  8163 + "email": "nicholas@nczconsulting.com"
  8164 + },
  8165 + "dist": {
  8166 + "shasum": "dcc9589850b043d6e58abe24b561ccd57176cfd3",
  8167 + "tarball": "http://registry.npmjs.org/doctrine/-/doctrine-0.7.0.tgz"
7910 8168 },
7911   - "_id": "doctrine@0.6.4",
7912   - "_shasum": "5b8d534412b49b8177b52082cd95df380de390aa",
7913   - "_from": "git://github.com/PolymerLabs/doctrine.git#master",
7914   - "_resolved": "git://github.com/PolymerLabs/doctrine.git#4f74c86ea5cd03fbd947c4df91a2192d13779fb5",
7915   - "_fromGithub": true
  8169 + "_resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.0.tgz"
7916 8170 }
7917 8171  
7918 8172 },{}],38:[function(require,module,exports){
... ... @@ -8273,6 +8527,34 @@ function _reverseNodeWalkAll(node, predicate, matches) {
8273 8527 }
8274 8528  
8275 8529 /**
  8530 + * Equivalent to `nodeWalk`, but only returns nodes that are either
  8531 + * ancestors or earlier cousins/siblings in the document.
  8532 + *
  8533 + * Nodes are searched in reverse document order, starting from the sibling
  8534 + * prior to `node`.
  8535 + */
  8536 +function nodeWalkPrior(node, predicate) {
  8537 + // Search our earlier siblings and their descendents.
  8538 + var parent = node.parentNode;
  8539 + if (parent) {
  8540 + var idx = parent.childNodes.indexOf(node);
  8541 + var siblings = parent.childNodes.slice(0, idx);
  8542 + for (var i = siblings.length-1; i >= 0; i--) {
  8543 + var sibling = siblings[i];
  8544 + if (predicate(sibling)) {
  8545 + return sibling;
  8546 + }
  8547 + var found = nodeWalkPrior(sibling, predicate);
  8548 + }
  8549 + if (predicate(parent)) {
  8550 + return parent;
  8551 + }
  8552 + return nodeWalkPrior(parent, predicate);
  8553 + }
  8554 + return undefined;
  8555 +}
  8556 +
  8557 +/**
8276 8558 * Equivalent to `nodeWalkAll`, but only returns nodes that are either
8277 8559 * ancestors or earlier cousins/siblings in the document.
8278 8560 *
... ... @@ -8409,6 +8691,7 @@ module.exports = {
8409 8691 queryAll: queryAll,
8410 8692 nodeWalk: nodeWalk,
8411 8693 nodeWalkAll: nodeWalkAll,
  8694 + nodeWalkPrior: nodeWalkPrior,
8412 8695 nodeWalkAllPrior: nodeWalkAllPrior,
8413 8696 treeMap: treeMap,
8414 8697 predicates: {
... ... @@ -9219,7 +9502,7 @@ exports.parseInnerHtml = function (innerHtml, contextElement, treeAdapter) {
9219 9502 return parser.parseFragment(innerHtml, contextElement);
9220 9503 };
9221 9504 }).call(this,require('_process'))
9222   -
  9505 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2pzZG9tL2pzZG9tX3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUGFyc2VyID0gcmVxdWlyZSgnLi4vdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyksXHJcbiAgICBQYXJzaW5nVW5pdCA9IHJlcXVpcmUoJy4vcGFyc2luZ191bml0Jyk7XHJcblxyXG4vL0FQSVxyXG5leHBvcnRzLnBhcnNlRG9jdW1lbnQgPSBmdW5jdGlvbiAoaHRtbCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlciksXHJcbiAgICAgICAgcGFyc2luZ1VuaXQgPSBuZXcgUGFyc2luZ1VuaXQocGFyc2VyKTtcclxuXHJcbiAgICAvL05PVEU6IG92ZXJyaWRlIHBhcnNlciBsb29wIG1ldGhvZFxyXG4gICAgcGFyc2VyLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzaW5nVW5pdC5wYXJzaW5nTG9vcExvY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXBhcnNpbmdVbml0LnN1c3BlbmRlZCAmJiAhdGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRlUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpXHJcbiAgICAgICAgICAgIHBhcnNpbmdVbml0LmNhbGxiYWNrKHRoaXMuZG9jdW1lbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHdhaXQgd2hpbGUgcGFyc2VyQ29udHJvbGxlciB3aWxsIGJlIGFkb3B0ZWQgYnkgY2FsbGluZyBjb2RlLCB0aGVuXHJcbiAgICAvL3N0YXJ0IHBhcnNpbmdcclxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBhcnNlci5wYXJzZShodG1sKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXJzaW5nVW5pdDtcclxufTtcclxuXHJcbmV4cG9ydHMucGFyc2VJbm5lckh0bWwgPSBmdW5jdGlvbiAoaW5uZXJIdG1sLCBjb250ZXh0RWxlbWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlcik7XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQpO1xyXG59OyJdfQ==
9223 9506 },{"../tree_construction/parser":59,"./parsing_unit":46,"_process":21}],46:[function(require,module,exports){
9224 9507 'use strict';
9225 9508  
... ... @@ -12969,34 +13252,64 @@ var OpenElementStack = require(&#39;./open_element_stack&#39;),
12969 13252 var $ = HTML.TAG_NAMES;
12970 13253  
12971 13254  
12972   -function setEndLocation(element, endTagToken) {
12973   - if (element.__location)
12974   - element.__location.end = endTagToken.location.end;
  13255 +function setEndLocation(element, closingToken, treeAdapter) {
  13256 + var loc = element.__location;
  13257 +
  13258 + if (!loc)
  13259 + return;
  13260 +
  13261 + if (!loc.startTag) {
  13262 + loc.startTag = {
  13263 + start: loc.start,
  13264 + end: loc.end
  13265 + };
  13266 + }
  13267 +
  13268 + if (closingToken.location) {
  13269 + var tn = treeAdapter.getTagName(element),
  13270 + // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing tag and
  13271 + // for cases like <td> <p> </td> - 'p' closes without a closing tag
  13272 + isClosingEndTag = closingToken.type === Tokenizer.END_TAG_TOKEN &&
  13273 + tn === closingToken.tagName;
  13274 +
  13275 + if (isClosingEndTag) {
  13276 + loc.endTag = {
  13277 + start: closingToken.location.start,
  13278 + end: closingToken.location.end
  13279 + };
  13280 + }
  13281 +
  13282 + loc.end = closingToken.location.end;
  13283 + }
12975 13284 }
12976 13285  
12977 13286 //NOTE: patch open elements stack, so we can assign end location for the elements
12978 13287 function patchOpenElementsStack(stack, parser) {
  13288 + var treeAdapter = parser.treeAdapter;
  13289 +
12979 13290 stack.pop = function () {
12980   - setEndLocation(this.current, parser.currentToken);
  13291 + setEndLocation(this.current, parser.currentToken, treeAdapter);
12981 13292 OpenElementStack.prototype.pop.call(this);
12982 13293 };
12983 13294  
12984 13295 stack.popAllUpToHtmlElement = function () {
12985 13296 for (var i = this.stackTop; i > 0; i--)
12986   - setEndLocation(this.items[i], parser.currentToken);
  13297 + setEndLocation(this.items[i], parser.currentToken, treeAdapter);
12987 13298  
12988 13299 OpenElementStack.prototype.popAllUpToHtmlElement.call(this);
12989 13300 };
12990 13301  
12991 13302 stack.remove = function (element) {
12992   - setEndLocation(element, parser.currentToken);
  13303 + setEndLocation(element, parser.currentToken, treeAdapter);
12993 13304 OpenElementStack.prototype.remove.call(this, element);
12994 13305 };
12995 13306 }
12996 13307  
12997 13308 exports.assign = function (parser) {
12998 13309 //NOTE: obtain Parser proto this way to avoid module circular references
12999   - var parserProto = Object.getPrototypeOf(parser);
  13310 + var parserProto = Object.getPrototypeOf(parser),
  13311 + treeAdapter = parser.treeAdapter;
  13312 +
13000 13313  
13001 13314 //NOTE: patch _reset method
13002 13315 parser._reset = function (html, document, fragmentContext) {
... ... @@ -13022,12 +13335,12 @@ exports.assign = function (parser) {
13022 13335 //their end location explicitly.
13023 13336 if (token.type === Tokenizer.END_TAG_TOKEN &&
13024 13337 (token.tagName === $.HTML ||
13025   - (token.tagName === $.BODY && this.openElements.hasInScope($.BODY)))) {
  13338 + (token.tagName === $.BODY && this.openElements.hasInScope($.BODY)))) {
13026 13339 for (var i = this.openElements.stackTop; i >= 0; i--) {
13027 13340 var element = this.openElements.items[i];
13028 13341  
13029 13342 if (this.treeAdapter.getTagName(element) === token.tagName) {
13030   - setEndLocation(element, token);
  13343 + setEndLocation(element, token, treeAdapter);
13031 13344 break;
13032 13345 }
13033 13346 }
... ... @@ -17312,7 +17625,7 @@ function endTagInForeignContent(p, token) {
17312 17625  
17313 17626  
17314 17627 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
17315   -
  17628 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pha2VhcmNoaWJhbGQvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMi4zLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5ID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkY3VzdG9tU2NoZWR1bGVyRm47XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuXSA9IGNhbGxiYWNrO1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2xpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKyAxXSA9IGFyZztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKz0gMjtcbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID09PSAyKSB7XG4gICAgICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAgICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAgICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcChhc2FwRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwID0gYXNhcEZuO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgfHwge307XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbiAgICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAvLyBub2RlXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCkge1xuICAgICAgdmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAgICAgLy8gc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW5zdGVhZFxuICAgICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14oPzooXFxkKylcXC4pPyg/OihcXGQrKVxcLik/KFxcKnxcXGQrKSQvKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJzaW9uWzJdID09PSAnMTAnKSB7XG4gICAgICAgIG5leHRUaWNrID0gc2V0SW1tZWRpYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBuZXh0VGljayhsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0eFxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB3ZWIgd29ya2VyXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoLCAxKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2goKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW47IGkrPTIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldO1xuICAgICAgICB2YXIgYXJnID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV07XG5cbiAgICAgICAgY2FsbGJhY2soYXJnKTtcblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByID0gcmVxdWlyZTtcbiAgICAgICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaDtcbiAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKCkge31cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCA9IDE7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICAgICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkge1xuICAgICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGhlbiA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4obWF5YmVUaGVuYWJsZSk7XG5cbiAgICAgICAgaWYgKHRoZW4gPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuXG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQ7XG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgICAgIHZhciBsZW5ndGggPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0aW9uO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHZhciBoYXNDYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICAgICAgdmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDtcblxuICAgICAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgICAgIHZhbHVlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoZW51bWVyYXRvci5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcbiAgICAgICAgZW51bWVyYXRvci5faW5wdXQgICAgID0gaW5wdXQ7XG4gICAgICAgIGVudW1lcmF0b3IubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGVudW1lcmF0b3IuX2luaXQoKTtcblxuICAgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7XG4gICAgICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl92YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoaW5wdXQpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgbGVuZ3RoICA9IGVudW1lcmF0b3IubGVuZ3RoO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG4gICAgICB2YXIgaW5wdXQgICA9IGVudW1lcmF0b3IuX2lucHV0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkge1xuICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxsO1xuICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG4gICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsKGVudHJpZXMpIHtcbiAgICAgIHJldHVybiBuZXcgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQodGhpcywgZW50cmllcykucHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2UoZW50cmllcykge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgZnVuY3Rpb24gb25GdWxmaWxsbWVudCh2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlKG9iamVjdCkge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmU7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3QocmVhc29uKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2U7XG4gICAgLyoqXG4gICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gICAgICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gICAgICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICAgICAgVGVybWlub2xvZ3lcbiAgICAgIC0tLS0tLS0tLS0tXG5cbiAgICAgIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gICAgICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gICAgICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgICAgIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gICAgICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gICAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gICAgICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICAgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gICAgICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gICAgICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgICAgIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgICAgIEJhc2ljIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tXG5cbiAgICAgIGBgYGpzXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBvbiBzdWNjZXNzXG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgICAgIC8vIG9uIGZhaWx1cmVcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9KTtcblxuICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgLy8gb24gcmVqZWN0aW9uXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBZHZhbmNlZCBVc2FnZTpcbiAgICAgIC0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gICAgICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgICAgIGBgYGpzXG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgICAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICAgICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgICAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQGNsYXNzIFByb21pc2VcbiAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAY29uc3RydWN0b3JcbiAgICAqL1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgICB0aGlzLl9pZCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyKys7XG4gICAgICB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wICE9PSByZXNvbHZlcikge1xuICAgICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihyZXNvbHZlcikpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLmFsbCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZXNvbHZlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZWplY3QgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldFNjaGVkdWxlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXI7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldEFzYXAgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fYXNhcCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwO1xuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLFxuXG4gICAgLyoqXG4gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQ2hhaW5pbmdcbiAgICAgIC0tLS0tLS0tXG5cbiAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gICAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIHJlamVjdGVkLCBgcmVhc29uYCB3aWxsIGJlICdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jy5cbiAgICAgIH0pO1xuICAgICAgYGBgXG4gICAgICBJZiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIGRvZXMgbm90IHNwZWNpZnkgYSByZWplY3Rpb24gaGFuZGxlciwgcmVqZWN0aW9uIHJlYXNvbnMgd2lsbCBiZSBwcm9wYWdhdGVkIGZ1cnRoZXIgZG93bnN0cmVhbS5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBc3NpbWlsYXRpb25cbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgICAgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlIGluIHRoZVxuICAgICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgZnVsZmlsbHMsIHdlJ2xsIGhhdmUgdGhlIHZhbHVlIGhlcmVcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgU2ltcGxlIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgICAgLS0tLS0tLS0tLS0tLS1cblxuICAgICAgU3luY2hyb25vdXMgRXhhbXBsZVxuXG4gICAgICBgYGBqYXZhc2NyaXB0XG4gICAgICB2YXIgYXV0aG9yLCBib29rcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgICBib29rcyAgPSBmaW5kQm9va3NCeUF1dGhvcihhdXRob3IpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG5cbiAgICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuXG4gICAgICB9XG5cbiAgICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZEF1dGhvcigpLlxuICAgICAgICB0aGVuKGZpbmRCb29rc0J5QXV0aG9yKS5cbiAgICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAbWV0aG9kIHRoZW5cbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICB0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudC5fcmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9LFxuXG4gICAgLyoqXG4gICAgICBgY2F0Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdoaWNoIG1ha2VzIGl0IHRoZSBzYW1lXG4gICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3luY2hyb25vdXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRBdXRob3IoKTtcbiAgICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9XG5cbiAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXNcbiAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCBjYXRjaFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICAgKi9cbiAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbCgpIHtcbiAgICAgIHZhciBsb2NhbDtcblxuICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gc2VsZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgICAgaWYgKFAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKSA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2NhbC5Qcm9taXNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQ7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJHBvbHlmaWxsO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2UgPSB7XG4gICAgICAnUHJvbWlzZSc6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0LFxuICAgICAgJ3BvbHlmaWxsJzogbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0XG4gICAgfTtcblxuICAgIC8qIGdsb2JhbCBkZWZpbmU6dHJ1ZSBtb2R1bGU6dHJ1ZSB3aW5kb3c6IHRydWUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlOyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7XG4gICAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbJ0VTNlByb21pc2UnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0KCk7XG59KS5jYWxsKHRoaXMpO1xuXG4iXX0=
17316 17629 },{"_process":21}],61:[function(require,module,exports){
17317 17630 /*
17318 17631 Copyright (C) 2015 Fred K. Schott <fkschott@gmail.com>
... ... @@ -17896,6 +18209,7 @@ function scanPunctuator() {
17896 18209 // The ... operator (spread, restParams, JSX, etc.)
17897 18210 if (extra.ecmaFeatures.spread ||
17898 18211 extra.ecmaFeatures.restParams ||
  18212 + extra.ecmaFeatures.experimentalObjectRestSpread ||
17899 18213 (extra.ecmaFeatures.jsx && state.inJSXSpreadAttribute)
17900 18214 ) {
17901 18215 if (ch1 === "." && ch2 === "." && ch3 === ".") {
... ... @@ -19385,7 +19699,7 @@ function throwError(token, messageFormat) {
19385 19699 error = new Error("Line " + token.lineNumber + ": " + msg);
19386 19700 error.index = token.range[0];
19387 19701 error.lineNumber = token.lineNumber;
19388   - error.column = token.range[0] - lineStart + 1;
  19702 + error.column = token.range[0] - token.lineStart + 1;
19389 19703 } else {
19390 19704 error = new Error("Line " + lineNumber + ": " + msg);
19391 19705 error.index = index;
... ... @@ -19433,7 +19747,7 @@ function throwUnexpected(token) {
19433 19747 if (token.type === Token.Keyword) {
19434 19748 if (syntax.isFutureReservedWord(token.value)) {
19435 19749 throwError(token, Messages.UnexpectedReserved);
19436   - } else if (strict && syntax.isStrictModeReservedWord(token.value)) {
  19750 + } else if (strict && syntax.isStrictModeReservedWord(token.value, extra.ecmaFeatures)) {
19437 19751 throwErrorTolerant(token, Messages.StrictReservedWord);
19438 19752 return;
19439 19753 }
... ... @@ -19780,6 +20094,7 @@ function parseObjectProperty() {
19780 20094 allowShorthand = extra.ecmaFeatures.objectLiteralShorthandProperties,
19781 20095 allowGenerators = extra.ecmaFeatures.generators,
19782 20096 allowDestructuring = extra.ecmaFeatures.destructuring,
  20097 + allowSpread = extra.ecmaFeatures.experimentalObjectRestSpread,
19783 20098 marker = markerCreate();
19784 20099  
19785 20100 token = lookahead;
... ... @@ -19928,6 +20243,12 @@ function parseObjectProperty() {
19928 20243 );
19929 20244 }
19930 20245  
  20246 + // object spread property
  20247 + if (allowSpread && match("...")) {
  20248 + lex();
  20249 + return markerApply(marker, astNodeFactory.createExperimentalSpreadProperty(parseAssignmentExpression()));
  20250 + }
  20251 +
19931 20252 // only possibility in this branch is a shorthand generator
19932 20253 if (token.type === Token.EOF || token.type === Token.Punctuator) {
19933 20254 if (!allowGenerators || !match("*") || !allowMethod) {
... ... @@ -20012,7 +20333,7 @@ function parseObjectInitialiser() {
20012 20333  
20013 20334 property = parseObjectProperty();
20014 20335  
20015   - if (!property.computed) {
  20336 + if (!property.computed && property.type.indexOf("Experimental") === -1) {
20016 20337  
20017 20338 name = getFieldName(property.key);
20018 20339 propertyFn = (property.kind === "get") ? PropertyKind.Get : PropertyKind.Set;
... ... @@ -20275,6 +20596,19 @@ function parseNewExpression() {
20275 20596 marker = markerCreate();
20276 20597  
20277 20598 expectKeyword("new");
  20599 +
  20600 + if (extra.ecmaFeatures.newTarget && match(".")) {
  20601 + lex();
  20602 + if (lookahead.type === Token.Identifier && lookahead.value === "target") {
  20603 + if (state.inFunctionBody) {
  20604 + lex();
  20605 + return markerApply(marker, astNodeFactory.createMetaProperty("new", "target"));
  20606 + }
  20607 + }
  20608 +
  20609 + throwUnexpected(lookahead);
  20610 + }
  20611 +
20278 20612 callee = parseLeftHandSideExpression();
20279 20613 args = match("(") ? parseArguments() : [];
20280 20614  
... ... @@ -20604,7 +20938,7 @@ function reinterpretAsCoverFormalsList(expressions) {
20604 20938 throwError({}, Messages.UnexpectedToken, ".");
20605 20939 }
20606 20940  
20607   - reinterpretAsDestructuredParameter(options, param.argument);
  20941 + validateParam(options, param.argument, param.argument.name);
20608 20942 param.type = astNodeTypes.RestElement;
20609 20943 params.push(param);
20610 20944 } else if (param.type === astNodeTypes.RestElement) {
... ... @@ -20616,6 +20950,17 @@ function reinterpretAsCoverFormalsList(expressions) {
20616 20950 param.type = astNodeTypes.AssignmentPattern;
20617 20951 delete param.operator;
20618 20952  
  20953 + if (param.right.type === astNodeTypes.YieldExpression) {
  20954 + if (param.right.argument) {
  20955 + throwUnexpected(lookahead);
  20956 + }
  20957 +
  20958 + param.right.type = astNodeTypes.Identifier;
  20959 + param.right.name = "yield";
  20960 + delete param.right.argument;
  20961 + delete param.right.delegate;
  20962 + }
  20963 +
20619 20964 params.push(param);
20620 20965 validateParam(options, param.left, param.left.name);
20621 20966 } else {
... ... @@ -20640,10 +20985,15 @@ function reinterpretAsCoverFormalsList(expressions) {
20640 20985  
20641 20986 function parseArrowFunctionExpression(options, marker) {
20642 20987 var previousStrict, body;
  20988 + var arrowStart = lineNumber;
20643 20989  
20644 20990 expect("=>");
20645 20991 previousStrict = strict;
20646 20992  
  20993 + if (lineNumber > arrowStart) {
  20994 + throwError({}, Messages.UnexpectedToken, "=>");
  20995 + }
  20996 +
20647 20997 body = parseConciseBody();
20648 20998  
20649 20999 if (strict && options.firstRestricted) {
... ... @@ -20667,7 +21017,8 @@ function parseArrowFunctionExpression(options, marker) {
20667 21017  
20668 21018 function reinterpretAsAssignmentBindingPattern(expr) {
20669 21019 var i, len, property, element,
20670   - allowDestructuring = extra.ecmaFeatures.destructuring;
  21020 + allowDestructuring = extra.ecmaFeatures.destructuring,
  21021 + allowRest = extra.ecmaFeatures.experimentalObjectRestSpread;
20671 21022  
20672 21023 if (!allowDestructuring) {
20673 21024 throwUnexpected(lex());
... ... @@ -20677,6 +21028,18 @@ function reinterpretAsAssignmentBindingPattern(expr) {
20677 21028 expr.type = astNodeTypes.ObjectPattern;
20678 21029 for (i = 0, len = expr.properties.length; i < len; i += 1) {
20679 21030 property = expr.properties[i];
  21031 +
  21032 + if (allowRest && property.type === astNodeTypes.ExperimentalSpreadProperty) {
  21033 +
  21034 + // only allow identifiers
  21035 + if (property.argument.type !== astNodeTypes.Identifier) {
  21036 + throwErrorTolerant({}, "Invalid object rest.");
  21037 + }
  21038 +
  21039 + property.type = astNodeTypes.ExperimentalRestProperty;
  21040 + return;
  21041 + }
  21042 +
20680 21043 if (property.kind !== "init") {
20681 21044 throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
20682 21045 }
... ... @@ -20791,7 +21154,6 @@ function parseAssignmentExpression() {
20791 21154 if (match("=>") &&
20792 21155 (state.parenthesisCount === oldParenthesisCount ||
20793 21156 state.parenthesisCount === (oldParenthesisCount + 1))) {
20794   -
20795 21157 if (node.type === astNodeTypes.Identifier) {
20796 21158 params = reinterpretAsCoverFormalsList([ node ]);
20797 21159 } else if (node.type === astNodeTypes.AssignmentExpression ||
... ... @@ -20806,6 +21168,7 @@ function parseAssignmentExpression() {
20806 21168 }
20807 21169  
20808 21170 if (params) {
  21171 + state.parenthesisCount--;
20809 21172 return parseArrowFunctionExpression(params, marker);
20810 21173 }
20811 21174 }
... ... @@ -20826,6 +21189,7 @@ function parseAssignmentExpression() {
20826 21189  
20827 21190 token = lex();
20828 21191 right = parseAssignmentExpression();
  21192 +
20829 21193 node = markerApply(marker, astNodeFactory.createAssignmentExpression(token.value, left, right));
20830 21194 }
20831 21195  
... ... @@ -20910,7 +21274,7 @@ function parseVariableIdentifier() {
20910 21274 token = lex();
20911 21275  
20912 21276 if (token.type !== Token.Identifier) {
20913   - if (strict && token.type === Token.Keyword && syntax.isStrictModeReservedWord(token.value)) {
  21277 + if (strict && token.type === Token.Keyword && syntax.isStrictModeReservedWord(token.value, extra.ecmaFeatures)) {
20914 21278 throwErrorTolerant(token, Messages.StrictReservedWord);
20915 21279 } else {
20916 21280 throwUnexpected(token);
... ... @@ -21162,6 +21526,11 @@ function parseForStatement(opts) {
21162 21526 init = parseExpression();
21163 21527 state.allowIn = true;
21164 21528  
  21529 + if (init.type === astNodeTypes.ArrayExpression) {
  21530 + init.type = astNodeTypes.ArrayPattern;
  21531 + }
  21532 +
  21533 +
21165 21534 if (allowForOf && matchContextualKeyword("of")) {
21166 21535 operator = lex();
21167 21536 left = init;
... ... @@ -21669,7 +22038,7 @@ function parseFunctionSourceElements() {
21669 22038 oldInIteration = state.inIteration;
21670 22039 oldInSwitch = state.inSwitch;
21671 22040 oldInFunctionBody = state.inFunctionBody;
21672   - oldParenthesisCount = state.parenthesizedCount;
  22041 + oldParenthesisCount = state.parenthesisCount;
21673 22042  
21674 22043 state.labelSet = new StringMap();
21675 22044 state.inIteration = false;
... ... @@ -21697,7 +22066,7 @@ function parseFunctionSourceElements() {
21697 22066 state.inIteration = oldInIteration;
21698 22067 state.inSwitch = oldInSwitch;
21699 22068 state.inFunctionBody = oldInFunctionBody;
21700   - state.parenthesizedCount = oldParenthesisCount;
  22069 + state.parenthesisCount = oldParenthesisCount;
21701 22070  
21702 22071 return markerApply(marker, astNodeFactory.createBlockStatement(sourceElements));
21703 22072 }
... ... @@ -21718,7 +22087,7 @@ function validateParam(options, param, name) {
21718 22087 if (syntax.isRestrictedWord(name)) {
21719 22088 options.firstRestricted = param;
21720 22089 options.message = Messages.StrictParamName;
21721   - } else if (syntax.isStrictModeReservedWord(name)) {
  22090 + } else if (syntax.isStrictModeReservedWord(name, extra.ecmaFeatures)) {
21722 22091 options.firstRestricted = param;
21723 22092 options.message = Messages.StrictReservedWord;
21724 22093 } else if (options.paramSet.has(name)) {
... ... @@ -21848,7 +22217,7 @@ function parseFunctionDeclaration(identifierIsOptional) {
21848 22217 if (syntax.isRestrictedWord(token.value)) {
21849 22218 firstRestricted = token;
21850 22219 message = Messages.StrictFunctionName;
21851   - } else if (syntax.isStrictModeReservedWord(token.value)) {
  22220 + } else if (syntax.isStrictModeReservedWord(token.value, extra.ecmaFeatures)) {
21852 22221 firstRestricted = token;
21853 22222 message = Messages.StrictReservedWord;
21854 22223 }
... ... @@ -21913,7 +22282,7 @@ function parseFunctionExpression() {
21913 22282 if (syntax.isRestrictedWord(token.value)) {
21914 22283 firstRestricted = token;
21915 22284 message = Messages.StrictFunctionName;
21916   - } else if (syntax.isStrictModeReservedWord(token.value)) {
  22285 + } else if (syntax.isStrictModeReservedWord(token.value, extra.ecmaFeatures)) {
21917 22286 firstRestricted = token;
21918 22287 message = Messages.StrictReservedWord;
21919 22288 }
... ... @@ -22042,7 +22411,7 @@ function parseExportNamedDeclaration() {
22042 22411 do {
22043 22412 isExportFromIdentifier = isExportFromIdentifier || matchKeyword("default");
22044 22413 specifiers.push(parseExportSpecifier());
22045   - } while (match(",") && lex());
  22414 + } while (match(",") && lex() && !match("}"));
22046 22415 }
22047 22416 expect("}");
22048 22417  
... ... @@ -22172,7 +22541,7 @@ function parseNamedImports() {
22172 22541 if (!match("}")) {
22173 22542 do {
22174 22543 specifiers.push(parseImportSpecifier());
22175   - } while (match(",") && lex());
  22544 + } while (match(",") && lex() && !match("}"));
22176 22545 }
22177 22546 expect("}");
22178 22547 return specifiers;
... ... @@ -22719,7 +23088,8 @@ function parse(code, options) {
22719 23088 generators: true,
22720 23089 destructuring: true,
22721 23090 classes: true,
22722   - modules: true
  23091 + modules: true,
  23092 + newTarget: true
22723 23093 };
22724 23094 }
22725 23095  
... ... @@ -23006,6 +23376,14 @@ module.exports = {
23006 23376 };
23007 23377 },
23008 23378  
  23379 + createMetaProperty: function(meta, property) {
  23380 + return {
  23381 + type: astNodeTypes.MetaProperty,
  23382 + meta: meta,
  23383 + property: property
  23384 + };
  23385 + },
  23386 +
23009 23387 /**
23010 23388 * Create an ASTNode representation of a conditional expression
23011 23389 * @param {ASTNode} test The conditional to evaluate
... ... @@ -23293,6 +23671,30 @@ module.exports = {
23293 23671 },
23294 23672  
23295 23673 /**
  23674 + * Create an ASTNode representation of an experimental rest property
  23675 + * @param {ASTNode} argument The identifier being rested
  23676 + * @returns {ASTNode} An ASTNode representing a rest element
  23677 + */
  23678 + createExperimentalRestProperty: function(argument) {
  23679 + return {
  23680 + type: astNodeTypes.ExperimentalRestProperty,
  23681 + argument: argument
  23682 + };
  23683 + },
  23684 +
  23685 + /**
  23686 + * Create an ASTNode representation of an experimental spread property
  23687 + * @param {ASTNode} argument The identifier being spread
  23688 + * @returns {ASTNode} An ASTNode representing a spread element
  23689 + */
  23690 + createExperimentalSpreadProperty: function(argument) {
  23691 + return {
  23692 + type: astNodeTypes.ExperimentalSpreadProperty,
  23693 + argument: argument
  23694 + };
  23695 + },
  23696 +
  23697 + /**
23296 23698 * Create an ASTNode tagged template expression
23297 23699 * @param {ASTNode} tag The tag expression
23298 23700 * @param {ASTNode} quasi A TemplateLiteral ASTNode representing
... ... @@ -23784,6 +24186,8 @@ module.exports = {
23784 24186 DoWhileStatement: "DoWhileStatement",
23785 24187 DebuggerStatement: "DebuggerStatement",
23786 24188 EmptyStatement: "EmptyStatement",
  24189 + ExperimentalRestProperty: "ExperimentalRestProperty",
  24190 + ExperimentalSpreadProperty: "ExperimentalSpreadProperty",
23787 24191 ExpressionStatement: "ExpressionStatement",
23788 24192 ForStatement: "ForStatement",
23789 24193 ForInStatement: "ForInStatement",
... ... @@ -23796,6 +24200,7 @@ module.exports = {
23796 24200 LabeledStatement: "LabeledStatement",
23797 24201 LogicalExpression: "LogicalExpression",
23798 24202 MemberExpression: "MemberExpression",
  24203 + MetaProperty: "MetaProperty",
23799 24204 MethodDefinition: "MethodDefinition",
23800 24205 NewExpression: "NewExpression",
23801 24206 ObjectExpression: "ObjectExpression",
... ... @@ -23955,9 +24360,21 @@ module.exports = {
23955 24360 }
23956 24361  
23957 24362 if (lastChild) {
23958   - if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
23959   - node.leadingComments = lastChild.leadingComments;
23960   - delete lastChild.leadingComments;
  24363 + if (lastChild.leadingComments) {
  24364 + if (lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
  24365 + node.leadingComments = lastChild.leadingComments;
  24366 + delete lastChild.leadingComments;
  24367 + } else {
  24368 + // A leading comment for an anonymous class had been stolen by its first MethodDefinition,
  24369 + // so this takes back the leading comment.
  24370 + // See Also: https://github.com/eslint/espree/issues/158
  24371 + for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {
  24372 + if (lastChild.leadingComments[i].range[1] <= node.range[0]) {
  24373 + node.leadingComments = lastChild.leadingComments.splice(0, i + 1);
  24374 + break;
  24375 + }
  24376 + }
  24377 + }
23961 24378 }
23962 24379 } else if (extra.leadingComments.length > 0) {
23963 24380  
... ... @@ -24119,6 +24536,9 @@ module.exports = {
24119 24536 // enable parsing of classes
24120 24537 classes: false,
24121 24538  
  24539 + // enable parsing of new.target
  24540 + newTarget: false,
  24541 +
24122 24542 // enable parsing of modules
24123 24543 modules: false,
24124 24544  
... ... @@ -24126,7 +24546,10 @@ module.exports = {
24126 24546 jsx: false,
24127 24547  
24128 24548 // allow return statement in global scope
24129   - globalReturn: false
  24549 + globalReturn: false,
  24550 +
  24551 + // allow experimental object rest/spread
  24552 + experimentalObjectRestSpread: false
24130 24553 };
24131 24554  
24132 24555 },{}],66:[function(require,module,exports){
... ... @@ -24403,7 +24826,7 @@ module.exports = {
24403 24826 }
24404 24827 },
24405 24828  
24406   - isStrictModeReservedWord: function(id) {
  24829 + isStrictModeReservedWord: function(id, ecmaFeatures) {
24407 24830 switch (id) {
24408 24831 case "implements":
24409 24832 case "interface":
... ... @@ -24415,6 +24838,8 @@ module.exports = {
24415 24838 case "yield":
24416 24839 case "let":
24417 24840 return true;
  24841 + case "await":
  24842 + return ecmaFeatures.modules;
24418 24843 default:
24419 24844 return false;
24420 24845 }
... ... @@ -24428,7 +24853,7 @@ module.exports = {
24428 24853  
24429 24854 isKeyword: function(id, strict, ecmaFeatures) {
24430 24855  
24431   - if (strict && this.isStrictModeReservedWord(id)) {
  24856 + if (strict && this.isStrictModeReservedWord(id, ecmaFeatures)) {
24432 24857 return true;
24433 24858 }
24434 24859  
... ... @@ -24877,7 +25302,7 @@ module.exports={
24877 25302 "esparse": "./bin/esparse.js",
24878 25303 "esvalidate": "./bin/esvalidate.js"
24879 25304 },
24880   - "version": "2.0.3",
  25305 + "version": "2.2.5",
24881 25306 "files": [
24882 25307 "bin",
24883 25308 "lib",
... ... @@ -24893,7 +25318,7 @@ module.exports={
24893 25318 },
24894 25319 "repository": {
24895 25320 "type": "git",
24896   - "url": "http://github.com/eslint/espree.git"
  25321 + "url": "git+ssh://git@github.com/eslint/espree.git"
24897 25322 },
24898 25323 "bugs": {
24899 25324 "url": "http://github.com/eslint/espree.git"
... ... @@ -24910,7 +25335,7 @@ module.exports={
24910 25335 "complexity-report": "~0.6.1",
24911 25336 "dateformat": "^1.0.11",
24912 25337 "eslint": "^0.9.2",
24913   - "esprima": "git://github.com/jquery/esprima",
  25338 + "esprima": "git://github.com/jquery/esprima.git",
24914 25339 "esprima-fb": "^8001.2001.0-dev-harmony-fb",
24915 25340 "istanbul": "~0.2.6",
24916 25341 "json-diff": "~0.3.1",
... ... @@ -24949,9 +25374,9 @@ module.exports={
24949 25374 "benchmark-quick": "node test/benchmarks.js quick"
24950 25375 },
24951 25376 "dependencies": {},
24952   - "gitHead": "b60b597cfe4834aacd16c90179ce73e22705c132",
24953   - "_id": "espree@2.0.3",
24954   - "_shasum": "1fbdff60a410bd0d416b1ab3d6230d34b7a450e1",
  25377 + "gitHead": "eeeeb05b879783901ff2308efcbd0cda76753cbe",
  25378 + "_id": "espree@2.2.5",
  25379 + "_shasum": "df691b9310889402aeb29cc066708c56690b854b",
24955 25380 "_from": "espree@>=2.0.1 <3.0.0",
24956 25381 "_npmVersion": "1.4.28",
24957 25382 "_npmUser": {
... ... @@ -24965,11 +25390,11 @@ module.exports={
24965 25390 }
24966 25391 ],
24967 25392 "dist": {
24968   - "shasum": "1fbdff60a410bd0d416b1ab3d6230d34b7a450e1",
24969   - "tarball": "http://registry.npmjs.org/espree/-/espree-2.0.3.tgz"
  25393 + "shasum": "df691b9310889402aeb29cc066708c56690b854b",
  25394 + "tarball": "http://registry.npmjs.org/espree/-/espree-2.2.5.tgz"
24970 25395 },
24971 25396 "directories": {},
24972   - "_resolved": "https://registry.npmjs.org/espree/-/espree-2.0.3.tgz",
  25397 + "_resolved": "https://registry.npmjs.org/espree/-/espree-2.2.5.tgz",
24973 25398 "readme": "ERROR: No README data found!"
24974 25399 }
24975 25400  
... ... @@ -25838,7 +26263,7 @@ module.exports={
25838 26263 ],
25839 26264 "repository": {
25840 26265 "type": "git",
25841   - "url": "http://github.com/estools/estraverse.git"
  26266 + "url": "git+ssh://git@github.com/estools/estraverse.git"
25842 26267 },
25843 26268 "devDependencies": {
25844 26269 "chai": "^2.1.1",
... ... @@ -25884,187 +26309,7 @@ module.exports={
25884 26309 "readme": "ERROR: No README data found!"
25885 26310 }
25886 26311  
25887   -},{}],74:[function(require,module,exports){
25888   -(function (process){
25889   -(function (global, undefined) {
25890   - "use strict";
25891   -
25892   - if (global.setImmediate) {
25893   - return;
25894   - }
25895   -
25896   - var nextHandle = 1; // Spec says greater than zero
25897   - var tasksByHandle = {};
25898   - var currentlyRunningATask = false;
25899   - var doc = global.document;
25900   - var setImmediate;
25901   -
25902   - function addFromSetImmediateArguments(args) {
25903   - tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);
25904   - return nextHandle++;
25905   - }
25906   -
25907   - // This function accepts the same arguments as setImmediate, but
25908   - // returns a function that requires no arguments.
25909   - function partiallyApplied(handler) {
25910   - var args = [].slice.call(arguments, 1);
25911   - return function() {
25912   - if (typeof handler === "function") {
25913   - handler.apply(undefined, args);
25914   - } else {
25915   - (new Function("" + handler))();
25916   - }
25917   - };
25918   - }
25919   -
25920   - function runIfPresent(handle) {
25921   - // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
25922   - // So if we're currently running a task, we'll need to delay this invocation.
25923   - if (currentlyRunningATask) {
25924   - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
25925   - // "too much recursion" error.
25926   - setTimeout(partiallyApplied(runIfPresent, handle), 0);
25927   - } else {
25928   - var task = tasksByHandle[handle];
25929   - if (task) {
25930   - currentlyRunningATask = true;
25931   - try {
25932   - task();
25933   - } finally {
25934   - clearImmediate(handle);
25935   - currentlyRunningATask = false;
25936   - }
25937   - }
25938   - }
25939   - }
25940   -
25941   - function clearImmediate(handle) {
25942   - delete tasksByHandle[handle];
25943   - }
25944   -
25945   - function installNextTickImplementation() {
25946   - setImmediate = function() {
25947   - var handle = addFromSetImmediateArguments(arguments);
25948   - process.nextTick(partiallyApplied(runIfPresent, handle));
25949   - return handle;
25950   - };
25951   - }
25952   -
25953   - function canUsePostMessage() {
25954   - // The test against `importScripts` prevents this implementation from being installed inside a web worker,
25955   - // where `global.postMessage` means something completely different and can't be used for this purpose.
25956   - if (global.postMessage && !global.importScripts) {
25957   - var postMessageIsAsynchronous = true;
25958   - var oldOnMessage = global.onmessage;
25959   - global.onmessage = function() {
25960   - postMessageIsAsynchronous = false;
25961   - };
25962   - global.postMessage("", "*");
25963   - global.onmessage = oldOnMessage;
25964   - return postMessageIsAsynchronous;
25965   - }
25966   - }
25967   -
25968   - function installPostMessageImplementation() {
25969   - // Installs an event handler on `global` for the `message` event: see
25970   - // * https://developer.mozilla.org/en/DOM/window.postMessage
25971   - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
25972   -
25973   - var messagePrefix = "setImmediate$" + Math.random() + "$";
25974   - var onGlobalMessage = function(event) {
25975   - if (event.source === global &&
25976   - typeof event.data === "string" &&
25977   - event.data.indexOf(messagePrefix) === 0) {
25978   - runIfPresent(+event.data.slice(messagePrefix.length));
25979   - }
25980   - };
25981   -
25982   - if (global.addEventListener) {
25983   - global.addEventListener("message", onGlobalMessage, false);
25984   - } else {
25985   - global.attachEvent("onmessage", onGlobalMessage);
25986   - }
25987   -
25988   - setImmediate = function() {
25989   - var handle = addFromSetImmediateArguments(arguments);
25990   - global.postMessage(messagePrefix + handle, "*");
25991   - return handle;
25992   - };
25993   - }
25994   -
25995   - function installMessageChannelImplementation() {
25996   - var channel = new MessageChannel();
25997   - channel.port1.onmessage = function(event) {
25998   - var handle = event.data;
25999   - runIfPresent(handle);
26000   - };
26001   -
26002   - setImmediate = function() {
26003   - var handle = addFromSetImmediateArguments(arguments);
26004   - channel.port2.postMessage(handle);
26005   - return handle;
26006   - };
26007   - }
26008   -
26009   - function installReadyStateChangeImplementation() {
26010   - var html = doc.documentElement;
26011   - setImmediate = function() {
26012   - var handle = addFromSetImmediateArguments(arguments);
26013   - // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
26014   - // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
26015   - var script = doc.createElement("script");
26016   - script.onreadystatechange = function () {
26017   - runIfPresent(handle);
26018   - script.onreadystatechange = null;
26019   - html.removeChild(script);
26020   - script = null;
26021   - };
26022   - html.appendChild(script);
26023   - return handle;
26024   - };
26025   - }
26026   -
26027   - function installSetTimeoutImplementation() {
26028   - setImmediate = function() {
26029   - var handle = addFromSetImmediateArguments(arguments);
26030   - setTimeout(partiallyApplied(runIfPresent, handle), 0);
26031   - return handle;
26032   - };
26033   - }
26034   -
26035   - // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
26036   - var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
26037   - attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
26038   -
26039   - // Don't get fooled by e.g. browserify environments.
26040   - if ({}.toString.call(global.process) === "[object process]") {
26041   - // For Node.js before 0.9
26042   - installNextTickImplementation();
26043   -
26044   - } else if (canUsePostMessage()) {
26045   - // For non-IE10 modern browsers
26046   - installPostMessageImplementation();
26047   -
26048   - } else if (global.MessageChannel) {
26049   - // For web workers, where supported
26050   - installMessageChannelImplementation();
26051   -
26052   - } else if (doc && "onreadystatechange" in doc.createElement("script")) {
26053   - // For IE 6โ€“8
26054   - installReadyStateChangeImplementation();
26055   -
26056   - } else {
26057   - // For older browsers
26058   - installSetTimeoutImplementation();
26059   - }
26060   -
26061   - attachTo.setImmediate = setImmediate;
26062   - attachTo.clearImmediate = clearImmediate;
26063   -}(new Function("return this")()));
26064   -
26065   -}).call(this,require('_process'))
26066   -
26067   -},{"_process":21}],"hydrolysis":[function(require,module,exports){
  26312 +},{}],"hydrolysis":[function(require,module,exports){
26068 26313 /**
26069 26314 * @license
26070 26315 * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
... ... @@ -26094,4 +26339,4 @@ module.exports = {
26094 26339 };
26095 26340  
26096 26341 },{"./lib/analyzer":1,"./lib/ast-utils/docs":5,"./lib/ast-utils/import-parse":10,"./lib/ast-utils/js-parse":11,"./lib/ast-utils/jsdoc":12,"./lib/loader/file-loader":13,"./lib/loader/fs-resolver":14,"./lib/loader/noop-resolver":15,"./lib/loader/xhr-resolver":16}]},{},[])
26097   -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci94aHItcmVzb2x2ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Fzc2VydC9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9saWIvZG9jdHJpbmUuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbGliL3R5cGVkLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL2xpYi91dGlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9hc3QuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL2NvZGUuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL2tleXdvcmQuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9kb201L2RvbTUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2RvY3R5cGUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZm9yZWlnbl9jb250ZW50LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2h0bWwuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdW5pY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2pzZG9tL2pzZG9tX3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2pzZG9tL3BhcnNpbmdfdW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NlcmlhbGl6YXRpb24vc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NpbXBsZV9hcGkvc2ltcGxlX2FwaV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3Rva2VuaXplcl9wcm94eS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9sb2NhdGlvbl9pbmZvX21peGluLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL25hbWVkX2VudGl0eV90cmllLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL3ByZXByb2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi90b2tlbml6ZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2FkYXB0ZXJzL2RlZmF1bHQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2FkYXB0ZXJzL2h0bWxwYXJzZXIyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9sb2NhdGlvbl9pbmZvX21peGluLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vb3Blbl9lbGVtZW50X3N0YWNrLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2VzcHJlZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2FzdC1ub2RlLWZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9hc3Qtbm9kZS10eXBlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2NvbW1lbnQtYXR0YWNobWVudC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2ZlYXR1cmVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvbWVzc2FnZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9zdHJpbmctbWFwLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvc3ludGF4LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvdG9rZW4taW5mby5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3hodG1sLWVudGl0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZS9lc3RyYXZlcnNlLmpzIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNybkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcllBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzd0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNThCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3AyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3A2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG4vLyBqc2hpbnQgLVcwNzlcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIGpzaGludCArVzA3OVxuXG52YXIgZG9tNSA9IHJlcXVpcmUoJ2RvbTUnKTtcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcblxudmFyIGRvY3MgPSByZXF1aXJlKCcuL2FzdC11dGlscy9kb2NzJyk7XG52YXIgRmlsZUxvYWRlciA9IHJlcXVpcmUoJy4vbG9hZGVyL2ZpbGUtbG9hZGVyJyk7XG52YXIgaW1wb3J0UGFyc2UgPSByZXF1aXJlKCcuL2FzdC11dGlscy9pbXBvcnQtcGFyc2UnKTtcbnZhciBqc1BhcnNlID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvanMtcGFyc2UnKTtcbnZhciBOb29wUmVzb2x2ZXIgPSByZXF1aXJlKCcuL2xvYWRlci9ub29wLXJlc29sdmVyJyk7XG5cbmZ1bmN0aW9uIHJlZHVjZU1ldGFkYXRhKG0xLCBtMikge1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiAgbTEuZWxlbWVudHMuY29uY2F0KG0yLmVsZW1lbnRzKSxcbiAgICBmZWF0dXJlczogIG0xLmZlYXR1cmVzLmNvbmNhdChtMi5mZWF0dXJlcyksXG4gICAgYmVoYXZpb3JzOiBtMS5iZWhhdmlvcnMuY29uY2F0KG0yLmJlaGF2aW9ycyksXG4gIH07XG59XG5cbnZhciBFTVBUWV9NRVRBREFUQSA9IHtlbGVtZW50czogW10sIGZlYXR1cmVzOiBbXSwgYmVoYXZpb3JzOiBbXX07XG5cbi8qKlxuICogUGFyc2U1J3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnRBU1RcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHBvbHltZXIgZWxlbWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRWxlbWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBmZWF0dXJlLlxuICogQHR5cGVkZWYge09iamVjdH0gRmVhdHVyZURlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBiZWhhdmlvciBtaXhpbi5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJlaGF2aW9yRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYWxsIGZlYXR1cmVzIGFuZCBlbGVtZW50cyBkZWZpbmVkIGluIG9uZSBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnREZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtBcnJheTxFbGVtZW50RGVzY3JpcHRvcj59IGVsZW1lbnRzIFRoZSBlbGVtZW50cyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSAgYmVoYXZpb3JzIFRoZSBiZWhhdmlvcnMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBvZiBhbiBlbnRpcmUgSFRNTCBkb2N1bWVudCwgaW4gcHJvbWlzZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmFseXplZERvY3VtZW50XG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWYgVGhlIHVybCBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcHJvcGVydHkge1Byb21pc2U8UGFyc2VkSW1wb3J0Pn0gIGh0bWxMb2FkZWQgVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZlxuICogICAgIHRoZSBkb2MuIFVzZSB0aGUgYGFzdGAgcHJvcGVydHkgdG8gZ2V0IHRoZSBmdWxsIGBwYXJzZTVgIGFzdFxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxBcnJheTxzdHJpbmc+Pn0gZGVwc0xvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZiB0aGlzXG4gKiAgICAgRG9jdW1lbnQncyB0cmFuc2l0aXZlIGltcG9ydCBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGRlcEhyZWZzIFRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9mIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAcHJvcGVydHkge1Byb21pc2U8RG9jdW1lbnREZXNjcmlwdG9yPn0gbWV0YWRhdGFMb2FkZWQgUmVzb2x2ZXMgdG8gdGhlIGxpc3Qgb2ZcbiAqICAgICB0aGlzIERvY3VtZW50J3MgaW1wb3J0IGRlcGVuZGVuY2llc1xuICovXG5cbi8qKlxuICogQSBkYXRhYmFzZSBvZiBQb2x5bWVyIG1ldGFkYXRhIGRlZmluZWQgaW4gSFRNTFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGF0dGFjaEFTVCAgSWYgdHJ1ZSwgYXR0YWNoIGEgcGFyc2U1IGNvbXBsaWFudCBBU1RcbiAqIEBwYXJhbSAge0ZpbGVMb2FkZXI9fSBsb2FkZXIgQW4gb3B0aW9uYWwgYEZpbGVMb2FkZXJgIHVzZWQgdG8gbG9hZCBleHRlcm5hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNcbiAqL1xudmFyIEFuYWx5emVyID0gZnVuY3Rpb24gQW5hbHl6ZXIoYXR0YWNoQVNULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKSB7XG4gIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIHRoZSBgQW5hbHl6ZXJgIGhhcyBtZXRhZGF0YSBmb3IuXG4gICAqIEBtZW1iZXIge0FycmF5LjxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIEEgdmlldyBpbnRvIGBlbGVtZW50c2AsIGtleWVkIGJ5IHRhZyBuYW1lLlxuICAgKiBAbWVtYmVyIHtPYmplY3QuPHN0cmluZyxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lID0ge307XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBBUEkgZmVhdHVyZXMgYWRkZWQgdG8gYFBvbHltZXIuQmFzZWAgZW5jb3VudGVyZWQgYnkgdGhlXG4gICAqIGFuYWx5emVyLlxuICAgKiBAbWVtYmVyIHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmZlYXR1cmVzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvcnMgY29sbGVjdGVkIGJ5IHRoZSBhbmFseXNpcyBwYXNzLlxuICAgKlxuICAgKiBAbWVtYmVyIHtBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnMgPSBbXTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IGFic29sdXRlIHBhdGgsIG9mIERvY3VtZW50IG1ldGFkYXRhLlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEFuYWx5emVkRG9jdW1lbnQ+fVxuICAgKi9cbiAgdGhpcy5odG1sID0ge307XG5cbiAgdGhpcy5fcGFyc2VkRG9jdW1lbnRzID0ge307XG4gIFxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIEhUTUwgZG9jdW1lbnQgQVNUcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBkb2N1bWVudCBjb250ZW50LlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fY29udGVudCA9IHt9O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgQW5hbHl6ZXIuYW5hbHp5ZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvYWRPcHRpb25zXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtib29sZWFufSBub0Fubm90YXRpb25zIFdoZXRoZXIgYGFubm90YXRlKClgIHNob3VsZCBiZSBza2lwcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjbGVhbiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgZGVzY3JpcHRvcnMgc2hvdWxkIGJlIGNsZWFuZWRcbiAqICAgICBvZiByZWR1bmRhbnQgZGF0YS5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gZmlsdGVyIEEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXRcbiAqICAgICBpbmRpY2F0ZXMgd2hpY2ggZmlsZXMgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGxvYWRlci4gQnkgZGVmYXVsdCBhbGxcbiAqICAgICBmaWxlcyBub3QgbG9jYXRlZCB1bmRlciB0aGUgZGlybmFtZSBvZiBgaHJlZmAgd2lsbCBiZSBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogU2hvcnRoYW5kIGZvciB0cmFuc2l0aXZlbHkgbG9hZGluZyBhbmQgcHJvY2Vzc2luZyBhbGwgaW1wb3J0cyBiZWdpbm5pbmcgYXRcbiAqIGBocmVmYC5cbiAqXG4gKiBJbiBvcmRlciB0byBwcm9wZXJseSBmaWx0ZXIgcGF0aHMsIGBocmVmYCBfbXVzdF8gYmUgYW4gYWJzb2x1dGUgVVJJLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFRoZSByb290IGltcG9ydCB0byBiZWdpbiBsb2FkaW5nIGZyb20uXG4gKiBAcGFyYW0ge0xvYWRPcHRpb25zPX0gb3B0aW9ucyBBbnkgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEByZXR1cm4ge1Byb21pc2U8QW5hbHl6ZXI+fSBBIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSBgaHJlZmAgYW5kIGl0c1xuICogICAgIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gbG9hZGVkIGFuZCBhbmFseXplZC5cbiAqL1xuQW5hbHl6ZXIuYW5hbHl6ZSA9IGZ1bmN0aW9uIGFuYWx5emUoaHJlZiwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmZpbHRlciB8fCBfZGVmYXVsdEZpbHRlcihocmVmKTtcblxuICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoKTtcbiAgdmFyIFByaW1hcnlSZXNvbHZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyL2ZzLXJlc29sdmVyJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIveGhyLXJlc29sdmVyJyk7XG4gIGxvYWRlci5hZGRSZXNvbHZlcihuZXcgUHJpbWFyeVJlc29sdmVyKG9wdGlvbnMpKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBOb29wUmVzb2x2ZXIoe3Rlc3Q6IG9wdGlvbnMuZmlsdGVyfSkpO1xuXG4gIHZhciBhbmFseXplciA9IG5ldyB0aGlzKG51bGwsIGxvYWRlcik7XG4gIHJldHVybiBhbmFseXplci5tZXRhZGF0YVRyZWUoaHJlZikudGhlbihmdW5jdGlvbihyb290KSB7XG4gICAgaWYgKCFvcHRpb25zLm5vQW5ub3RhdGlvbnMpIHtcbiAgICAgIGFuYWx5emVyLmFubm90YXRlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICBhbmFseXplci5jbGVhbigpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFuYWx5emVyKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZlxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gX2RlZmF1bHRGaWx0ZXIoaHJlZikge1xuICAvLyBFdmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0IGAvYCBvciBgXFxgLlxuICB2YXIgYmFzZSA9IGhyZWYubWF0Y2goL14oLio/KVteXFwvXFxcXF0qJC8pWzFdO1xuICByZXR1cm4gZnVuY3Rpb24odXJpKSB7XG4gICAgcmV0dXJuIHVyaS5pbmRleE9mKGJhc2UpICE9PSAwO1xuICB9O1xufVxuXG5BbmFseXplci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkZXIucmVxdWVzdChocmVmKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRbaHJlZl0gPSBjb250ZW50O1xuICAgICAgICByZXNvbHZlKHRoaXMuX3BhcnNlSFRNTChjb250ZW50LCBocmVmKSk7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYEFuYWx5emVkRG9jdW1lbnRgIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWxJbXBvcnQgUmF3IHRleHQgb2YgYW4gSFRNTCBkb2N1bWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBocmVmICAgICAgIFRoZSBkb2N1bWVudCdzIFVSTC5cbiAqIEByZXR1cm4ge0FuYWx5emVkRG9jdW1lbnR9ICAgICAgIEFuICBgQW5hbHl6ZWREb2N1bWVudGBcbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9wYXJzZUhUTUwgPSBmdW5jdGlvbiBfcGFyc2VIVE1MKGh0bWxJbXBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYpIHtcbiAgaWYgKGhyZWYgaW4gdGhpcy5odG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbiAgfVxuICB2YXIgZGVwc0xvYWRlZCA9IFtdO1xuICB2YXIgZGVwSHJlZnMgPSBbXTtcbiAgdmFyIG1ldGFkYXRhTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgdmFyIHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBpbXBvcnRQYXJzZShodG1sSW1wb3J0LCBocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyEnKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIGh0bWxMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUocGFyc2VkKTtcbiAgaWYgKHBhcnNlZC5zY3JpcHQpIHtcbiAgICBtZXRhZGF0YUxvYWRlZCA9IHRoaXMuX3Byb2Nlc3NTY3JpcHRzKHBhcnNlZC5zY3JpcHQsIGhyZWYpO1xuICAgIGRlcHNMb2FkZWQucHVzaChtZXRhZGF0YUxvYWRlZCk7XG4gIH1cblxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgYmFzZVVyaSA9IGhyZWY7XG4gICAgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPbmx5IG9uZSBiYXNlIHRhZyBwZXIgZG9jdW1lbnQhXCIpO1xuICAgICAgdGhyb3cgXCJNdWx0aXBsZSBiYXNlIHRhZ3MgaW4gXCIgKyBocmVmO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID09IDEpIHtcbiAgICAgIHZhciBiYXNlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHBhcnNlZC5iYXNlWzBdLCBcImhyZWZcIik7XG4gICAgICBpZiAoYmFzZUhyZWYpIHtcbiAgICAgICAgYmFzZUhyZWYgPSBiYXNlSHJlZiArIFwiL1wiO1xuICAgICAgICBiYXNlVXJpID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgYmFzZUhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZWQuaW1wb3J0LmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgICAgdmFyIGxpbmt1cmwgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgICAgaWYgKGxpbmt1cmwpIHtcbiAgICAgICAgdmFyIHJlc29sdmVkVXJsID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgbGlua3VybCk7XG4gICAgICAgIGRlcEhyZWZzLnB1c2gocmVzb2x2ZWRVcmwpO1xuICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yKHJlc29sdmVkVXJsLCBocmVmKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICBwYXJzZWQuc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzdHlsZUVsZW1lbnQpIHtcbiAgICAgIGlmIChwb2x5bWVyRXh0ZXJuYWxTdHlsZShzdHlsZUVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBzdHlsZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzdHlsZUVsZW1lbnQsICdocmVmJyk7XG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgc3R5bGVIcmVmID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgc3R5bGVIcmVmKTtcbiAgICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5sb2FkZXIucmVxdWVzdChzdHlsZUhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCl7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50W3N0eWxlSHJlZl0gPSBjb250ZW50O1xuICAgICAgICAgIH0uYmluZCh0aGlzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfVxuICBkZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoZGVwc0xvYWRlZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7cmV0dXJuIGRlcEhyZWZzO30pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIHRoaXMuX3BhcnNlZERvY3VtZW50c1tocmVmXSA9IHBhcnNlZDtcbiAgdGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0gPSBwYXJzZWQuYXN0O1xuICB0aGlzLmh0bWxbaHJlZl0gPSB7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgaHRtbExvYWRlZDogaHRtbExvYWRlZCxcbiAgICAgIG1ldGFkYXRhTG9hZGVkOiBtZXRhZGF0YUxvYWRlZCxcbiAgICAgIGRlcEhyZWZzOiBkZXBIcmVmcyxcbiAgICAgIGRlcHNMb2FkZWQ6IGRlcHNMb2FkZWRcbiAgfTtcbiAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdHMgPSBmdW5jdGlvbiBfcHJvY2Vzc1NjcmlwdHMoc2NyaXB0cywgaHJlZikge1xuICB2YXIgc2NyaXB0UHJvbWlzZXMgPSBbXTtcbiAgc2NyaXB0cy5mb3JFYWNoKGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHNjcmlwdFByb21pc2VzLnB1c2godGhpcy5fcHJvY2Vzc1NjcmlwdChzY3JpcHQsIGhyZWYpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHNjcmlwdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhTGlzdCkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3QucmVkdWNlKHJlZHVjZU1ldGFkYXRhLCBFTVBUWV9NRVRBREFUQSk7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9wcm9jZXNzU2NyaXB0ID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSB7XG4gIHZhciBzcmMgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgdmFyIHBhcnNlZEpzO1xuICBpZiAoIXNyYykge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRKcyA9IGpzUGFyc2Uoc2NyaXB0LmNoaWxkTm9kZXNbMF0udmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRmlndXJlIG91dCB0aGUgY29ycmVjdCBsaW5lIG51bWJlciBmb3IgdGhlIGVycm9yLlxuICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgdmFyIGNvbCA9IDA7XG4gICAgICBpZiAoc2NyaXB0Ll9fb3duZXJEb2N1bWVudCAmJiBzY3JpcHQuX19vd25lckRvY3VtZW50ID09IGhyZWYpIHtcbiAgICAgICAgbGluZSA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgICBjb2wgPSBzY3JpcHQuX19sb2NhdGlvbkRldGFpbC5saW5lIC0gMTtcbiAgICAgIH1cbiAgICAgIGxpbmUgKz0gZXJyLmxpbmVOdW1iZXI7XG4gICAgICBjb2wgKz0gZXJyLmNvbHVtbjtcbiAgICAgIHZhciBtZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIHNjcmlwdCBpbiBcIiArIGhyZWYgKyBcIiBhdCBcIiArIGxpbmUgKyBcIjpcIiArIGNvbDtcbiAgICAgIG1lc3NhZ2UgKz0gXCJcXG5cIiArIGVyci5kZXNjcmlwdGlvbjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmVsZW1lbnRzKSB7XG4gICAgICBwYXJzZWRKcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgICAgICBlbGVtZW50LmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5pcyBpbiB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBkdXBsaWNhdGUgZWxlbWVudCBkZWZpbml0aW9uOiAnICsgZWxlbWVudC5pcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5mZWF0dXJlcykge1xuICAgICAgcGFyc2VkSnMuZmVhdHVyZXMuZm9yRWFjaChmdW5jdGlvbihmZWF0dXJlKXtcbiAgICAgICAgZmVhdHVyZS5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIGZlYXR1cmUuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuY29uY2F0KHBhcnNlZEpzLmZlYXR1cmVzKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmJlaGF2aW9ycykge1xuICAgICAgcGFyc2VkSnMuYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgICAgICBiZWhhdmlvci5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYmVoYXZpb3JzID0gdGhpcy5iZWhhdmlvcnMuY29uY2F0KHBhcnNlZEpzLmJlaGF2aW9ycyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRKcztcbiAgfVxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgcmVzb2x2ZWRTcmMgPSB1cmwucmVzb2x2ZShocmVmLCBzcmMpO1xuICAgIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KHJlc29sdmVkU3JjKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRlbnRbcmVzb2x2ZWRTcmNdID0gY29udGVudDtcbiAgICAgIHZhciByZXNvbHZlZFNjcmlwdCA9IE9iamVjdC5jcmVhdGUoc2NyaXB0KTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmNoaWxkTm9kZXMgPSBbe3ZhbHVlOiBjb250ZW50fV07XG4gICAgICByZXNvbHZlZFNjcmlwdC5hdHRycyA9IHJlc29sdmVkU2NyaXB0LmF0dHJzLnNsaWNlKCk7XG4gICAgICBkb201LnJlbW92ZUF0dHJpYnV0ZShyZXNvbHZlZFNjcmlwdCwgJ3NyYycpO1xuICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTY3JpcHQocmVzb2x2ZWRTY3JpcHQsIHJlc29sdmVkU3JjKTtcbiAgICB9LmJpbmQodGhpcykpLmNhdGNoKGZ1bmN0aW9uKGVycikge3Rocm93IGVycjt9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgfVxufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9kZXBlbmRlbmNpZXNMb2FkZWRGb3IgPSBmdW5jdGlvbiBfZGVwZW5kZW5jaWVzTG9hZGVkRm9yKGhyZWYsIHJvb3QpIHtcbiAgdmFyIGZvdW5kID0ge307XG4gIGlmIChyb290ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3VuZFtyb290XSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2dldERlcGVuZGVuY2llcyhocmVmLCBmb3VuZCkudGhlbihmdW5jdGlvbihkZXBzKSB7XG4gICAgdmFyIGRlcE1ldGFkYXRhTG9hZGVkID0gW107XG4gICAgdmFyIGRlcFByb21pc2VzID0gZGVwcy5tYXAoZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkKGRlcEhyZWYpLnRoZW4oZnVuY3Rpb24oaHRtbE1vbm9tZXIpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxNb25vbWVyLm1ldGFkYXRhTG9hZGVkO1xuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwUHJvbWlzZXMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBMaXN0IGFsbCB0aGUgaHRtbCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBkb2N1bWVudCBhdCBgaHJlZmAuXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgIGhyZWYgICAgICBUaGUgaHJlZiB0byBnZXQgZGVwZW5kZW5jaWVzIGZvci5cbiAqIEBwYXJhbSAge09iamVjdC48c3RyaW5nLGJvb2xlYW4+PX0gZm91bmQgICAgIEFuIG9iamVjdCBrZXllZCBieSBVUkwgb2YgdGhlXG4gKiAgICAgYWxyZWFkeSByZXNvbHZlZCBkZXBlbmRlbmNpZXMuXG4gKiBAcGFyYW0gIHtib29sZWFuPX0gICAgICAgICAgICAgICAgdHJhbnNpdGl2ZSBXaGV0aGVyIHRvIGxvYWQgdHJhbnNpdGl2ZVxuICogICAgIGRlcGVuZGVuY2llcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSAgQSBsaXN0IG9mIGFsbCB0aGUgaHRtbCBkZXBlbmRlbmNpZXMuXG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5fZ2V0RGVwZW5kZW5jaWVzID0gZnVuY3Rpb24gX2dldERlcGVuZGVuY2llcyhocmVmLCBmb3VuZCwgdHJhbnNpdGl2ZSkge1xuICBpZiAoZm91bmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kID0ge307XG4gICAgZm91bmRbaHJlZl0gPSB0cnVlO1xuICB9XG4gIGlmICh0cmFuc2l0aXZlID09PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2l0aXZlID0gdHJ1ZTtcbiAgfVxuICB2YXIgZGVwcyA9IFtdO1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24oaHRtbE1vbm9tZXIpIHtcbiAgICB2YXIgdHJhbnNpdGl2ZURlcHMgPSBbXTtcbiAgICBodG1sTW9ub21lci5kZXBIcmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGRlcEhyZWYpe1xuICAgICAgaWYgKGZvdW5kW2RlcEhyZWZdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlcHMucHVzaChkZXBIcmVmKTtcbiAgICAgIGZvdW5kW2RlcEhyZWZdID0gdHJ1ZTtcbiAgICAgIGlmICh0cmFuc2l0aXZlKSB7XG4gICAgICAgIHRyYW5zaXRpdmVEZXBzLnB1c2godGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGRlcEhyZWYsIGZvdW5kKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodHJhbnNpdGl2ZURlcHMpO1xuICB9LmJpbmQodGhpcykpLnRoZW4oZnVuY3Rpb24odHJhbnNpdGl2ZURlcHMpIHtcbiAgICB2YXIgYWxsZGVwcyA9IHRyYW5zaXRpdmVEZXBzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pLmNvbmNhdChkZXBzKTtcbiAgICByZXR1cm4gYWxsZGVwcztcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBQT0pPIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbXBvcnRcbiAqIHRyZWUsIGluIGEgZm9ybWF0IHRoYXQgbWFpbnRhaW5zIHRoZSBvcmRlcmluZyBvZiB0aGUgSFRNTCBpbXBvcnRzIHNwZWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiB0aGUgaW1wb3J0IHRvIGdldCBtZXRhZGF0YSBmb3IuXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BbmFseXplci5wcm90b3R5cGUubWV0YWRhdGFUcmVlID0gZnVuY3Rpb24gbWV0YWRhdGFUcmVlKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMubG9hZChocmVmKS50aGVuKGZ1bmN0aW9uKG1vbm9tZXIpe1xuICAgIHZhciBsb2FkZWRIcmVmcyA9IHt9O1xuICAgIGxvYWRlZEhyZWZzW2hyZWZdID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKG1vbm9tZXIsIGxvYWRlZEhyZWZzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fbWV0YWRhdGFUcmVlID0gZnVuY3Rpb24gX21ldGFkYXRhVHJlZShodG1sTW9ub21lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRIcmVmcykge1xuICBpZiAobG9hZGVkSHJlZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvYWRlZEhyZWZzID0ge307XG4gIH1cbiAgcmV0dXJuIGh0bWxNb25vbWVyLm1ldGFkYXRhTG9hZGVkLnRoZW4oZnVuY3Rpb24obWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YSA9IHtcbiAgICAgIGVsZW1lbnRzOiBtZXRhZGF0YS5lbGVtZW50cyxcbiAgICAgIGZlYXR1cmVzOiBtZXRhZGF0YS5mZWF0dXJlcyxcbiAgICAgIGhyZWY6IGh0bWxNb25vbWVyLmhyZWZcbiAgICB9O1xuICAgIHJldHVybiBodG1sTW9ub21lci5kZXBzTG9hZGVkLnRoZW4oZnVuY3Rpb24oaHJlZnMpIHtcbiAgICAgIHZhciBkZXBNZXRhZGF0YSA9IFtdO1xuICAgICAgaHJlZnMuZm9yRWFjaChmdW5jdGlvbihocmVmKSB7XG4gICAgICAgIHZhciBtZXRhZGF0YVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgIGlmIChkZXBNZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbWV0YWRhdGFQcm9taXNlID0gZGVwTWV0YWRhdGFbZGVwTWV0YWRhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGFQcm9taXNlID0gbWV0YWRhdGFQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFsb2FkZWRIcmVmc1tocmVmXSkge1xuICAgICAgICAgICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVHJlZSh0aGlzLmh0bWxbaHJlZl0sIGxvYWRlZEhyZWZzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICBkZXBNZXRhZGF0YS5wdXNoKG1ldGFkYXRhUHJvbWlzZSk7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcE1ldGFkYXRhKS50aGVuKGZ1bmN0aW9uKGltcG9ydE1ldGFkYXRhKSB7XG4gICAgICAgIG1ldGFkYXRhLmltcG9ydHMgPSBpbXBvcnRNZXRhZGF0YTtcbiAgICAgICAgcmV0dXJuIGh0bWxNb25vbWVyLmh0bWxMb2FkZWQudGhlbihmdW5jdGlvbihwYXJzZWRIdG1sKSB7XG4gICAgICAgICAgbWV0YWRhdGEuaHRtbCA9IHBhcnNlZEh0bWw7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYXR0YWNoRG9tTW9kdWxlKHBhcnNlZEh0bWwsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gbWF0Y2hpbmdJbXBvcnQoaW1wb3J0RWxlbWVudCkge1xuICB2YXIgbWF0Y2hlc1RhZyA9IGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKGltcG9ydEVsZW1lbnQudGFnTmFtZSk7XG4gIHZhciBtYXRjaGVzSHJlZiA9IGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ2hyZWYnLCBkb201LmdldEF0dHJpYnV0ZShpbXBvcnRFbGVtZW50LCAnaHJlZicpKTtcbiAgdmFyIG1hdGNoZXNSZWwgPSBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCBkb201LmdldEF0dHJpYnV0ZShpbXBvcnRFbGVtZW50LCAncmVsJykpO1xuICByZXR1cm4gZG9tNS5wcmVkaWNhdGVzLkFORChtYXRjaGVzVGFnLCBtYXRjaGVzSHJlZiwgbWF0Y2hlc1JlbCk7XG59XG5cbi8vIFRPRE8oYWpvKTogUmVmYWN0b3Igb3V0IG9mIHZ1bGNhbml6ZSBpbnRvIGRvbTUuXG52YXIgcG9seW1lckV4dGVybmFsU3R5bGUgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnbGluaycpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbik7XG5cbnZhciBleHRlcm5hbFNjcmlwdCA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdzY3JpcHQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHIoJ3NyYycpXG4pO1xuXG52YXIgaXNIdG1sSW1wb3J0Tm9kZSA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLk5PVChcbiAgICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lU3R5bGVzID0gZnVuY3Rpb24gX2lubGluZVN0eWxlcyhhc3QsIGhyZWYpIHtcbiAgdmFyIGNzc0xpbmtzID0gZG9tNS5xdWVyeUFsbChhc3QsIHBvbHltZXJFeHRlcm5hbFN0eWxlKTtcbiAgY3NzTGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7XG4gICAgdmFyIGxpbmtIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgbGlua0hyZWYpO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5fY29udGVudFt1cmldO1xuICAgIHZhciBzdHlsZSA9IGRvbTUuY29uc3RydWN0b3JzLmVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgZG9tNS5zZXRUZXh0Q29udGVudChzdHlsZSwgJ1xcbicgKyBjb250ZW50ICsgJ1xcbicpO1xuICAgIGRvbTUucmVwbGFjZShsaW5rLCBzdHlsZSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBjc3NMaW5rcy5sZW5ndGggPiAwO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVTY3JpcHRzID0gZnVuY3Rpb24gX2lubGluZVNjcmlwdHMoYXN0LCBocmVmKSB7XG4gIHZhciBzY3JpcHRzID0gZG9tNS5xdWVyeUFsbChhc3QsIGV4dGVybmFsU2NyaXB0KTtcbiAgc2NyaXB0cy5mb3JFYWNoKGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHZhciBzY3JpcHRIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIHNjcmlwdEhyZWYpO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5fY29udGVudFt1cmldO1xuICAgIHZhciBpbmxpbmVkID0gZG9tNS5jb25zdHJ1Y3RvcnMuZWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgZG9tNS5zZXRUZXh0Q29udGVudChpbmxpbmVkLCAnXFxuJyArIGNvbnRlbnQgKyAnXFxuJyk7XG4gICAgZG9tNS5yZXBsYWNlKHNjcmlwdCwgaW5saW5lZCk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBzY3JpcHRzLmxlbmd0aCA+IDA7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZUltcG9ydHMgPSBmdW5jdGlvbiBfaW5saW5lSW1wb3J0cyhhc3QsIGhyZWYsIGxvYWRlZCkge1xuICB2YXIgaW1wb3J0cyA9IGRvbTUucXVlcnlBbGwoYXN0LCBpc0h0bWxJbXBvcnROb2RlKTtcbiAgaW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKGh0bWxJbXBvcnQpIHtcbiAgICB2YXIgaW1wb3J0SHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKGh0bWxJbXBvcnQsICdocmVmJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIGltcG9ydEhyZWYpO1xuICAgIGlmIChsb2FkZWRbdXJpXSkge1xuICAgICAgZG9tNS5yZW1vdmUoaHRtbEltcG9ydCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRMb2FkZWRBc3QodXJpLCBsb2FkZWQpO1xuICAgIGRvbTUucmVwbGFjZShodG1sSW1wb3J0LCBjb250ZW50KTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIGltcG9ydHMubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgZm9ybSBvZiB0aGUgQVNUIHdpdGggYWxsIGxpbmtzIHJlcGxhY2VkXG4gKiB3aXRoIHRoZSBkb2N1bWVudCB0aGV5IGxpbmsgdG8uIC5jc3MgYW5kIC5zY3JpcHQgZmlsZXMgYmVjb21lIDxzdHlsZT4gYW5kXG4gKiA8c2NyaXB0PiwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFRoZSBlbGVtZW50cyBpbiB0aGUgbG9hZGVkIGRvY3VtZW50IGFyZSB1bm1vZGlmaWVkIGZyb20gdGhlaXIgb3JpZ2luYWxcbiAqIGRvY3VtZW50cy5cbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIGRvY3VtZW50IHRvIGxvYWQuXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLGJvb2xlYW4+PX0gbG9hZGVkIEFuIG9iamVjdCBrZXllZCBieSBhbHJlYWR5IGxvYWRlZCBkb2N1bWVudHMuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxEb2N1bWVudEFTVD59XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5nZXRMb2FkZWRBc3QgPSBmdW5jdGlvbiBnZXRMb2FkZWRBc3QoaHJlZiwgbG9hZGVkKSB7XG4gIGlmICghbG9hZGVkKSB7XG4gICAgbG9hZGVkID0ge307XG4gIH1cbiAgbG9hZGVkW2hyZWZdID0gdHJ1ZTtcbiAgdmFyIGRvY3VtZW50ID0gdGhpcy5fcGFyc2VkRG9jdW1lbnRzW2hyZWZdO1xuICB2YXIgYW5hbHl6ZWREb2N1bWVudCA9IHRoaXMuaHRtbFtocmVmXTtcbiAgdmFyIGFzdENvcHkgPSBkb201LnBhcnNlKGRvbTUuc2VyaWFsaXplKGRvY3VtZW50LmFzdCkpO1xuICAvLyBXaGVuZXZlciB3ZSBpbmxpbmUgc29tZXRoaW5nLCByZXNldCBpbmxpbmVkIHRvIHRydWUgdG8ga25vdyB0aGF0IGFub2F0aGVyXG4gIC8vIGlubGluaW5nIHBhc3MgaXMgbmVlZGVkO1xuICB0aGlzLl9pbmxpbmVTdHlsZXMoYXN0Q29weSwgaHJlZik7XG4gIHRoaXMuX2lubGluZVNjcmlwdHMoYXN0Q29weSwgaHJlZik7XG4gIHRoaXMuX2lubGluZUltcG9ydHMoYXN0Q29weSwgaHJlZiwgbG9hZGVkKTtcbiAgcmV0dXJuIGFzdENvcHk7XG59O1xuXG4vKipcbiAqIENhbGxzIGBkb201Lm5vZGVXYWxrQWxsYCBvbiBlYWNoIGRvY3VtZW50IHRoYXQgYEFuYXl6bGVyYCBoYXMgbGFvZGVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwcmVkaWNhdGUgQSBkb201IHByZWRpY2F0ZS5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm5vZGVXYWxrRG9jdW1lbnRzID0gZnVuY3Rpb24gbm9kZVdhbGtEb2N1bWVudHMocHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGhyZWYgaW4gdGhpcy5fcGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG1hdGNoID0gZG9tNS5ub2RlV2Fsayh0aGlzLl9wYXJzZWREb2N1bWVudHNbaHJlZl0uYXN0LCBwcmVkaWNhdGUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtBbGxgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtBbGxEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLl9wYXJzZWREb2N1bWVudHMpIHtcbiAgICB2YXIgbmV3Tm9kZXMgPSBkb201Lm5vZGVXYWxrQWxsKHRoaXMuX3BhcnNlZERvY3VtZW50c1tocmVmXS5hc3QsIHByZWRpY2F0ZSk7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KG5ld05vZGVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKiBBbm5vdGF0ZXMgYWxsIGxvYWRlZCBtZXRhZGF0YSB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmFubm90YXRlID0gZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIGlmICh0aGlzLmZlYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZmVhdHVyZUVsID0gZG9jcy5mZWF0dXJlRWxlbWVudCh0aGlzLmZlYXR1cmVzKTtcbiAgICB0aGlzLmVsZW1lbnRzLnVuc2hpZnQoZmVhdHVyZUVsKTtcbiAgICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lW2ZlYXR1cmVFbC5pc10gPSBmZWF0dXJlRWw7XG4gIH1cblxuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZG9jcy5hbm5vdGF0ZUVsZW1lbnQpO1xuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGRvY3MuYW5ub3RhdGVFbGVtZW50KTsgLy8gU2FtZSBzaGFwZS5cbn07XG5cbmZ1bmN0aW9uIGF0dGFjaERvbU1vZHVsZShwYXJzZWRJbXBvcnQsIGVsZW1lbnQpIHtcbiAgdmFyIGRvbU1vZHVsZXMgPSBwYXJzZWRJbXBvcnRbJ2RvbS1tb2R1bGUnXTtcbiAgZm9yICh2YXIgaSA9IDAsIGRvbU1vZHVsZTsgaSA8IGRvbU1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBkb21Nb2R1bGUgPSBkb21Nb2R1bGVzW2ldO1xuICAgIGlmIChkb201LmdldEF0dHJpYnV0ZShkb21Nb2R1bGUsICdpZCcpID09PSBlbGVtZW50LmlzKSB7XG4gICAgICBlbGVtZW50LmRvbU1vZHVsZSA9IGRvbU1vZHVsZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlbW92ZXMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSB0aGUgY29sbGVjdGVkIGRlc2NyaXB0b3JzLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmNsZWFuID0gZnVuY3Rpb24gY2xlYW4oKSB7XG4gIHRoaXMuZWxlbWVudHMuZm9yRWFjaChkb2NzLmNsZWFuRWxlbWVudCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFuYWx5emVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlJyk7XG5cbnZhciBhbmFseXplUHJvcGVydGllcyA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICB2YXIgYW5hbHl6ZWRQcm9wcyA9IFtdO1xuXG4gIGlmIChub2RlLnR5cGUgIT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIGFuYWx5emVkUHJvcHM7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcGVydHkgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgdmFyIHByb3AgPSBlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydHkpO1xuICAgIHByb3AucHVibGlzaGVkID0gdHJ1ZTtcblxuICAgIGlmIChwcm9wZXJ0eS52YWx1ZS50eXBlID09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgLyoqXG4gICAgICAgKiBQYXJzZSB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgYSBwcm9wZXJ0eSBvYmplY3QgYmxvY2suXG4gICAgICAgKiBwcm9wZXJ0eToge1xuICAgICAgICogICBrZXk6IHtcbiAgICAgICAqICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgKiAgICAgbm90aWZ5OiB0cnVlLFxuICAgICAgICogICAgIHZhbHVlOiAtMSxcbiAgICAgICAqICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAqICAgICByZWZsZWN0VG9BdHRyaWJ1dGU6IHRydWVcbiAgICAgICAqICAgfVxuICAgICAgICogfVxuICAgICAgICovXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BlcnR5LnZhbHVlLnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5QXJnID0gcHJvcGVydHkudmFsdWUucHJvcGVydGllc1tqXTtcbiAgICAgICAgdmFyIHByb3BlcnR5S2V5ID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLmtleSk7XG5cbiAgICAgICAgc3dpdGNoKHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgY2FzZSAndHlwZSc6IHtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHR5cGUgaW4gcHJvcGVydHkgb2JqZWN0LicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHByb3BlcnR5QXJnLmxvYy5zdGFydFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdub3RpZnknOiB7XG4gICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLm5vdGlmeSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb2JzZXJ2ZXInOiB7XG4gICAgICAgICAgICBwcm9wLm9ic2VydmVyID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgcHJvcC5vYnNlcnZlck5vZGUgPSBwcm9wZXJ0eUFyZy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wLm9ic2VydmVyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3Aub2JzZXJ2ZXIgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlYWRPbmx5Jzoge1xuICAgICAgICAgICAgcHJvcC5yZWFkT25seSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnJlYWRPbmx5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3AucmVhZE9ubHkgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlZmxlY3RUb0F0dHJpYnV0ZSc6IHtcbiAgICAgICAgICAgIHByb3AucmVmbGVjdFRvQXR0cmlidXRlID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcpO1xuICAgICAgICAgICAgaWYgKHByb3AucmVmbGVjdFRvQXR0cmlidXRlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3AucmVmbGVjdFRvQXR0cmlidXRlID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgICAgICAgIHByb3AuZGVmYXVsdCA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLmRlZmF1bHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5kZWZhdWx0ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wLnR5cGUpIHtcbiAgICAgIHRocm93IHtcbiAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhbmFseXplZFByb3BzLnB1c2gocHJvcCk7XG4gIH1cbiAgcmV0dXJuIGFuYWx5emVkUHJvcHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYW5hbHl6ZVByb3BlcnRpZXM7XG5cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxuLy8gdXNlZnVsIHRvb2wgdG8gdmlzdWFsaXplIEFTVDogaHR0cDovL2VzcHJpbWEub3JnL2RlbW8vcGFyc2UuaHRtbFxuXG4vKipcbiAqIGNvbnZlcnRzIGxpdGVyYWw6IHtcInR5cGVcIjogXCJMaXRlcmFsXCIsIFwidmFsdWVcIjogNSwgIFwicmF3XCI6IFwiNVwiIH1cbiAqIHRvIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9WYWx1ZShsaXRlcmFsKSB7XG4gIHJldHVybiBsaXRlcmFsLnZhbHVlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIHVuYXJ5IHRvIHN0cmluZ1xuICogdW5hcnk6IHsgdHlwZTogJ1VuYXJ5RXhwcmVzc2lvbicsIG9wZXJhdG9yOiAnLScsIGFyZ3VtZW50OiB7IC4uLiB9IH1cbiAqL1xuZnVuY3Rpb24gdW5hcnlUb1ZhbHVlKHVuYXJ5KSB7XG4gIHZhciBhcmdWYWx1ZSA9IGV4cHJlc3Npb25Ub1ZhbHVlKHVuYXJ5LmFyZ3VtZW50KTtcbiAgaWYgKGFyZ1ZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuO1xuICByZXR1cm4gdW5hcnkub3BlcmF0b3IgKyBhcmdWYWx1ZTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBpZGVudGlmaWVyIHRvIGl0cyB2YWx1ZVxuICogaWRlbnRpZmllciB7IFwidHlwZVwiOiBcIklkZW50aWZpZXJcIiwgXCJuYW1lXCI6IFwiTnVtYmVyIH1cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllclRvVmFsdWUoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci5uYW1lO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGlzIGEgYmxvY2sgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uVG9WYWx1ZShmbikge1xuICBpZiAoZm4uYm9keS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIilcbiAgICByZXR1cm4gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGZuLmJvZHkpO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvbkV4cHJlc3Npb25Ub1ZhbHVlKGZuKSB7XG4gIGlmIChmbi5ib2R5LnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiKVxuICAgIHJldHVybiBibG9ja1N0YXRlbWVudFRvVmFsdWUoZm4uYm9keSk7XG59XG4vKipcbiAqIEJsb2NrIHN0YXRlbWVudDogZmluZCBsYXN0IHJldHVybiBzdGF0ZW1lbnQsIGFuZCByZXR1cm4gaXRzIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShibG9jaykge1xuICBmb3IgKHZhciBpPWJsb2NrLmJvZHkubGVuZ3RoIC0gMTsgaT49IDA7IGktLSkge1xuICAgIGlmIChibG9jay5ib2R5W2ldLnR5cGUgPT09IFwiUmV0dXJuU3RhdGVtZW50XCIpXG4gICAgICByZXR1cm4gcmV0dXJuU3RhdGVtZW50VG9WYWx1ZShibG9jay5ib2R5W2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyByZXR1cm4ncyBhcmd1bWVudFxuICovXG5mdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRUb1ZhbHVlKHJldCkge1xuICByZXR1cm4gZXhwcmVzc2lvblRvVmFsdWUocmV0LmFyZ3VtZW50KTtcbn1cblxuLyoqXG4gKiBFbmNsb3NlIGNvbnRhaW5pbmcgdmFsdWVzIGluIFtdXG4gKi9cbmZ1bmN0aW9uIGFycmF5RXhwcmVzc2lvblRvVmFsdWUoYXJyeSkge1xuICB2YXIgdmFsdWUgPSAnWyc7XG4gIGZvciAodmFyIGk9MDsgaTxhcnJ5LmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHYgPSBleHByZXNzaW9uVG9WYWx1ZShhcnJ5LmVsZW1lbnRzW2ldKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgdiA9IENBTlRfQ09OVkVSVDtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gdjtcbiAgfVxuICB2YWx1ZSArPSAnXSc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBNYWtlIGl0IGxvb2sgbGlrZSBhbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUob2JqKSB7XG4gIHZhciB2YWx1ZSA9ICd7JztcbiAgZm9yICh2YXIgaT0wOyBpPG9iai5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGsgPSBleHByZXNzaW9uVG9WYWx1ZShvYmoucHJvcGVydGllc1tpXS5rZXkpO1xuICAgIHZhciB2ID0gZXhwcmVzc2lvblRvVmFsdWUob2JqLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICB2ID0gQ0FOVF9DT05WRVJUO1xuICAgIGlmIChpICE9PSAwKVxuICAgICAgdmFsdWUgKz0gJywgJztcbiAgICB2YWx1ZSArPSAnXCInICsgayArICdcIjogJyArIHY7XG4gIH1cbiAgdmFsdWUgKz0gJ30nO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTWVtYmVyRXhwcmVzc2lvbiByZWZlcmVuY2VzIGEgdmFyaWFibGUgd2l0aCBuYW1lXG4gKi9cbmZ1bmN0aW9uIG1lbWJlckV4cHJlc3Npb25Ub1ZhbHVlKG1lbWJlcikge1xuICByZXR1cm4gZXhwcmVzc2lvblRvVmFsdWUobWVtYmVyLm9iamVjdCkgKyBcIi5cIiArIGV4cHJlc3Npb25Ub1ZhbHVlKG1lbWJlci5wcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogVHJpZXMgdG8gZ2V0IGEgdmFsdWUgZnJvbSBleHByZXNzaW9uLiBIYW5kbGVzIExpdGVyYWwsIFVuYXJ5RXhwcmVzc2lvblxuICogcmV0dXJucyB1bmRlZmluZWQgb24gZmFpbHVyZVxuICogdmFsdWVFeHByZXNzaW9uIGV4YW1wbGU6XG4gKiB7IHR5cGU6IFwiTGl0ZXJhbFwiLFxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pIHtcbiAgc3dpdGNoKHZhbHVlRXhwcmVzc2lvbi50eXBlKSB7XG4gICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICByZXR1cm4gbGl0ZXJhbFRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIHVuYXJ5VG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6XG4gICAgICByZXR1cm4gZnVuY3Rpb25EZWNsYXJhdGlvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdGdW5jdGlvbkV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIGZ1bmN0aW9uRXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIGFycmF5RXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdPYmplY3RFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBvYmplY3RFeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gbWVtYmVyRXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciBDQU5UX0NPTlZFUlQgPSAnVU5LTk9XTic7XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ0FOVF9DT05WRVJUOiBDQU5UX0NPTlZFUlQsXG4gIGV4cHJlc3Npb25Ub1ZhbHVlOiBleHByZXNzaW9uVG9WYWx1ZVxufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZG9jcyAgID0gcmVxdWlyZSgnLi9kb2NzJyk7XG52YXIgZXN1dGlsID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBqc2RvYyAgPSByZXF1aXJlKCcuL2pzZG9jJyk7XG52YXIgYW5hbHl6ZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2FuYWx5emUtcHJvcGVydGllcycpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiZWhhdmlvckZpbmRlcigpIHtcbiAgLyoqIEB0eXBlIHshQXJyYXk8QmVoYXZpb3JEZXNjcmlwdG9yPn0gVGhlIGJlaGF2aW9ycyB3ZSd2ZSBmb3VuZC4gKi9cbiAgdmFyIGJlaGF2aW9ycyA9IFtdO1xuXG4gIHZhciBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBzcGVjaWFsLWNhc2UgcHJvcGVydGllc1xuICAgKi9cbiAgdmFyIHByb3BlcnR5SGFuZGxlcnMgPSB7XG4gICAgcHJvcGVydGllczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIHByb3BzID0gYW5hbHl6ZVByb3BlcnRpZXMobm9kZSk7XG5cbiAgICAgIGZvciAodmFyIGk9MDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzLnB1c2gocHJvcHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogbWVyZ2VzIGJlaGF2aW9yIHdpdGggcHJlZXhpc3RpbmcgYmVoYXZpb3Igd2l0aCB0aGUgc2FtZSBuYW1lLlxuICAgKiBoZXJlIHRvIHN1cHBvcnQgbXVsdGlwbGUgQHBvbHltZXJCZWhhdmlvciB0YWdzIHJlZmVycmluZ1xuICAgKiB0byBzYW1lIGJlaGF2aW9yLiBTZWUgaXJvbi1tdWx0aS1zZWxlY3RhYmxlIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VCZWhhdmlvcihuZXdCZWhhdmlvcikge1xuICAgIHZhciBpc0JlaGF2aW9ySW1wbCA9IGZ1bmN0aW9uKGIpIHsgLy8gZmlsdGVyIG91dCBCZWhhdmlvckltcGxcbiAgICAgIHJldHVybiBiLmluZGV4T2YobmV3QmVoYXZpb3IuaXMpID09PSAtMTtcbiAgICB9O1xuICAgIGZvciAodmFyIGk9MDsgaTxiZWhhdmlvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuZXdCZWhhdmlvci5pcyAhPT0gYmVoYXZpb3JzW2ldLmlzKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIC8vIG1lcmdlIGRlc2MsIGxvbmdlc3QgZGVzYyB3aW5zXG4gICAgICBpZiAobmV3QmVoYXZpb3IuZGVzYykge1xuICAgICAgICBpZiAoYmVoYXZpb3JzW2ldLmRlc2MpIHtcbiAgICAgICAgICBpZiAobmV3QmVoYXZpb3IuZGVzYy5sZW5ndGggPiBiZWhhdmlvcnNbaV0uZGVzYy5sZW5ndGgpXG4gICAgICAgICAgICBiZWhhdmlvcnNbaV0uZGVzYyA9IG5ld0JlaGF2aW9yLmRlc2M7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYmVoYXZpb3JzW2ldLmRlc2MgPSBuZXdCZWhhdmlvci5kZXNjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBtZXJnZSBkZW1vc1xuICAgICAgYmVoYXZpb3JzW2ldLmRlbW9zID0gKGJlaGF2aW9yc1tpXS5kZW1vcyB8fCBbXSkuY29uY2F0KG5ld0JlaGF2aW9yLmRlbW9zIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIGV2ZW50cyxcbiAgICAgIGJlaGF2aW9yc1tpXS5ldmVudHMgPSAoYmVoYXZpb3JzW2ldLmV2ZW50cyB8fCBbXSkuY29uY2F0KG5ld0JlaGF2aW9yLmV2ZW50cyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBwcm9wZXJ0aWVzXG4gICAgICBiZWhhdmlvcnNbaV0ucHJvcGVydGllcyA9IChiZWhhdmlvcnNbaV0ucHJvcGVydGllcyB8fCBbXSkuY29uY2F0KG5ld0JlaGF2aW9yLnByb3BlcnRpZXMgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgYmVoYXZpb3JzXG4gICAgICBiZWhhdmlvcnNbaV0uYmVoYXZpb3JzID1cbiAgICAgICAgKGJlaGF2aW9yc1tpXS5iZWhhdmlvcnMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5iZWhhdmlvcnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoaXNCZWhhdmlvckltcGwpO1xuICAgICAgcmV0dXJuIGJlaGF2aW9yc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0JlaGF2aW9yO1xuICB9XG5cbiAgdmFyIHZpc2l0b3JzID0ge1xuXG4gICAgLyoqXG4gICAgICogTG9vayBmb3Igb2JqZWN0IGRlY2xhcmF0aW9ucyB3aXRoIEBiZWhhdmlvciBpbiB0aGUgZG9jcy5cbiAgICAgKi9cbiAgICBlbnRlclZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCAhPT0gMSkgcmV0dXJuOyAgLy8gQW1iaWd1b3VzLlxuICAgICAgdGhpcy5faW5pdEJlaGF2aW9yKG5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhub2RlLmRlY2xhcmF0aW9uc1swXS5pZCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9vayBmb3Igb2JqZWN0IGFzc2lnbm1lbnRzIHdpdGggQHBvbHltZXJCZWhhdmlvciBpbiB0aGUgZG9jcy5cbiAgICAgKi9cbiAgICBlbnRlckFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHRoaXMuX2luaXRCZWhhdmlvcihwYXJlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhub2RlLmxlZnQpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9wYXJzZUNoYWluZWRCZWhhdmlvcnM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIC8vIGlmIGN1cnJlbnQgYmVoYXZpb3IgaXMgcGFydCBvZiBhbiBhcnJheSwgaXQgZ2V0cyBleHRlbmRlZCBieSBvdGhlciBiZWhhdmlvcnNcbiAgICAgIC8vIGluc2lkZSB0aGUgYXJyYXkuIEV4OlxuICAgICAgLy8gUG9seW1lci5Jcm9uTXVsdGlTZWxlY3RhYmxlQmVoYXZpb3IgPSBbIHsuLi4ufSwgUG9seW1lci5Jcm9uU2VsZWN0YWJsZUJlaGF2aW9yXVxuICAgICAgLy8gV2UgYWRkIHRoZXNlIHRvIGJlaGF2aW9ycyBhcnJheVxuICAgICAgdmFyIGV4cHJlc3Npb247XG4gICAgICBzd2l0Y2gobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0V4cHJlc3Npb25TdGF0ZW1lbnQnOlxuICAgICAgICAgIGV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb24ucmlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICBleHByZXNzaW9uID0gbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMCA/IG5vZGUuZGVjbGFyYXRpb25zWzBdLmluaXQgOiBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbmVkID0gW107XG4gICAgICBpZiAoZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGV4cHJlc3Npb24uZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5lbGVtZW50c1tpXS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpXG4gICAgICAgICAgICBjaGFpbmVkLnB1c2goYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUoZXhwcmVzc2lvbi5lbGVtZW50c1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFpbmVkLmxlbmd0aCA+IDApXG4gICAgICAgICAgY3VycmVudEJlaGF2aW9yLmJlaGF2aW9ycyA9IGNoYWluZWQ7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0QmVoYXZpb3I6IGZ1bmN0aW9uKG5vZGUsIGdldE5hbWUpIHtcbiAgICAgIHZhciBjb21tZW50ID0gZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChub2RlKTtcbiAgICAgIC8vIFF1aWNrbHkgZmlsdGVyIGRvd24gdG8gcG90ZW50aWFsIGNhbmRpZGF0ZXMuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgY29tbWVudC5pbmRleE9mKCdAcG9seW1lckJlaGF2aW9yJykgPT09IC0xKSByZXR1cm47XG5cblxuICAgICAgY3VycmVudEJlaGF2aW9yID0ge1xuICAgICAgICB0eXBlOiAnYmVoYXZpb3InLFxuICAgICAgICBkZXNjOiBjb21tZW50LFxuICAgICAgICBldmVudHM6IGVzdXRpbC5nZXRFdmVudENvbW1lbnRzKG5vZGUpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4geyBkZXNjOiBldmVudH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuXG4gICAgICBkb2NzLmFubm90YXRlQmVoYXZpb3IoY3VycmVudEJlaGF2aW9yKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IHBhcnNlZCBhIGJlaGF2aW9yIHRhZyFcbiAgICAgIGlmICghanNkb2MuaGFzVGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicpKSB7XG4gICAgICAgIGN1cnJlbnRCZWhhdmlvciA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBqc2RvYy5nZXRUYWcoY3VycmVudEJlaGF2aW9yLmpzZG9jLCAncG9seW1lckJlaGF2aW9yJywgJ25hbWUnKTtcbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICBuYW1lID0gZ2V0TmFtZSgpO1xuICAgICAgfVxuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBAcG9seW1lckJlaGF2aW9yOicsIGNvbW1lbnQpO1xuICAgICAgfVxuICAgICAgY3VycmVudEJlaGF2aW9yLmlzID0gbmFtZTtcblxuICAgICAgdGhpcy5fcGFyc2VDaGFpbmVkQmVoYXZpb3JzKG5vZGUpO1xuXG4gICAgICBjdXJyZW50QmVoYXZpb3IgPSBtZXJnZUJlaGF2aW9yKGN1cnJlbnRCZWhhdmlvcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBvYmplY3QgZXhwcmVzc2lvbiBhZnRlciBzdWNoIGFuIGFzc2lnbm1lbnQgaXMgdGhlXG4gICAgICogYmVoYXZpb3IncyBkZWNsYXJhdGlvbi4gU2VlbXMgdG8gYmUgYSBkZWNlbnQgYXNzdW1wdGlvbiBmb3Igbm93LlxuICAgICAqL1xuICAgIGVudGVyT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAoIWN1cnJlbnRCZWhhdmlvciB8fCBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcykgcmV0dXJuO1xuXG4gICAgICBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcyA9IGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzIHx8IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgICAgIHZhciBuYW1lID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3Aua2V5KTtcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbWVzc2FnZTogJ0NhbnQgZGV0ZXJtaW5lIG5hbWUgZm9yIHByb3BlcnR5IGtleS4nLFxuICAgICAgICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSBpbiBwcm9wZXJ0eUhhbmRsZXJzKSB7XG4gICAgICAgICAgcHJvcGVydHlIYW5kbGVyc1tuYW1lXShwcm9wLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcy5wdXNoKGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJlaGF2aW9ycy5wdXNoKGN1cnJlbnRCZWhhdmlvcik7XG4gICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgIH0sXG5cbiAgfTtcblxuICByZXR1cm4ge3Zpc2l0b3JzOiB2aXNpdG9ycywgYmVoYXZpb3JzOiBiZWhhdmlvcnN9O1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG5cbnZhciBqc2RvYyA9IHJlcXVpcmUoJy4vanNkb2MnKTtcblxudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG5cbi8qKiBQcm9wZXJ0aWVzIG9uIGVsZW1lbnQgcHJvdG90eXBlcyB0aGF0IGFyZSBwdXJlbHkgY29uZmlndXJhdGlvbi4gKi9cbnZhciBFTEVNRU5UX0NPTkZJR1VSQVRJT04gPSBbXG4gICdhdHRhY2hlZCcsXG4gICdhdHRyaWJ1dGVDaGFuZ2VkJyxcbiAgJ2NvbmZpZ3VyZScsXG4gICdjb25zdHJ1Y3RvcicsXG4gICdjcmVhdGVkJyxcbiAgJ2RldGFjaGVkJyxcbiAgJ2VuYWJsZUN1c3RvbVN0eWxlUHJvcGVydGllcycsXG4gICdleHRlbmRzJyxcbiAgJ2hvc3RBdHRyaWJ1dGVzJyxcbiAgJ2lzJyxcbiAgJ2xpc3RlbmVycycsXG4gICdtaXhpbnMnLFxuICAnb2JzZXJ2ZXJzJyxcbiAgJ3Byb3BlcnRpZXMnLFxuICAncmVhZHknLFxuICAncmVnaXN0ZXJlZCdcbl07XG5cbi8qKiBUYWdzIHVuZGVyc3Rvb2QgYnkgdGhlIGFubm90YXRpb24gcHJvY2VzcywgdG8gYmUgcmVtb3ZlZCBkdXJpbmcgYGNsZWFuYC4gKi9cbnZhciBIQU5ETEVEX1RBR1MgPSBbXG4gICdwYXJhbScsXG4gICdyZXR1cm4nLFxuICAndHlwZScsXG5dO1xuXG4vKipcbiAqIEFubm90YXRlcyBIeWRyb2x5c2lzIGRlc2NyaXB0b3JzLCBwcm9jZXNzaW5nIGFueSBgZGVzY2AgcHJvcGVydGllcyBhcyBKU0RvYy5cbiAqXG4gKiBZb3UgcHJvYmFibHkgd2FudCB0byB1c2UgYSBtb3JlIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhpcywgc3VjaCBhc1xuICogYGFubm90YXRlRWxlbWVudGAuXG4gKlxuICogUHJvY2Vzc2VkIEpTRG9jIHZhbHVlcyB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHZpYSB0aGUgYGpzZG9jYCBwcm9wZXJ0eSBvbiBhXG4gKiBkZXNjcmlwdG9yIG5vZGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igbm9kZSB0byBwcm9jZXNzLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZGVzY3JpcHRvciB0aGF0IHdhcyBnaXZlbi5cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGUoZGVzY3JpcHRvcikge1xuICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5qc2RvYykgcmV0dXJuIGRlc2NyaXB0b3I7XG5cbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmRlc2MgPT09ICdzdHJpbmcnKSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYyA9IGpzZG9jLnBhcnNlSnNkb2MoZGVzY3JpcHRvci5kZXNjKTtcbiAgICAvLyBXZSB3YW50IHRvIHByZXNlbnQgdGhlIG5vcm1hbGl6ZWQgZm9ybSBvZiBhIGRlc2NyaXB0b3IuXG4gICAgZGVzY3JpcHRvci5qc2RvYy5vcmlnID0gZGVzY3JpcHRvci5kZXNjO1xuICAgIGRlc2NyaXB0b3IuZGVzYyAgICAgICA9IGRlc2NyaXB0b3IuanNkb2MuZGVzY3JpcHRpb247XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgQGV2ZW50LCBAaGVybywgJiBAZGVtbyB0YWdzXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmV2ZW50cykge1xuICAgIGRlc2NyaXB0b3IuZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIF9hbm5vdGF0ZUV2ZW50KGV2ZW50KTtcbiAgICB9KTtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5zb3J0KCBmdW5jdGlvbihhLGIpIHtcbiAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgIH0pO1xuICB9XG4gIGRlc2NyaXB0b3IuZGVtb3MgPSBbXTtcbiAgaWYgKGRlc2NyaXB0b3IuanNkb2MgJiYgZGVzY3JpcHRvci5qc2RvYy50YWdzKSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzLmZvckVhY2goIGZ1bmN0aW9uKHRhZykge1xuICAgICAgc3dpdGNoKHRhZy50YWcpIHtcbiAgICAgICAgY2FzZSAnaGVybyc6XG4gICAgICAgICAgZGVzY3JpcHRvci5oZXJvID0gdGFnLm5hbWUgfHwgJ2hlcm8ucG5nJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVtbyc6XG4gICAgICAgICAgZGVzY3JpcHRvci5kZW1vcy5wdXNoKHtcbiAgICAgICAgICAgIGRlc2M6IHRhZy5kZXNjcmlwdGlvbiB8fCAnZGVtbycsXG4gICAgICAgICAgICBwYXRoOiB0YWcubmFtZSB8fCAnZGVtby9pbmRleC5odG1sJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGRvY3VtZW50YXRpb24gZm91bmQgd2l0aGluIGEgSHlkcm9seXNpcyBlbGVtZW50IGRlc2NyaXB0b3IuIEFsc29cbiAqIHN1cHBvcnRzIGJlaGF2aW9ycy5cbiAqXG4gKiBJZiB0aGUgZWxlbWVudCB3YXMgcHJvY2Vzc2VkIHZpYSBgaHlkcm9saXplYCwgdGhlIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uXG4gKiB3aWxsIGFsc28gYmUgZXh0cmFjdGVkIHZpYSBpdHMgPGRvbS1tb2R1bGU+LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBlbGVtZW50IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvcikge1xuICBpZiAoIWRlc2NyaXB0b3IuZGVzYyAmJiBkZXNjcmlwdG9yLnR5cGUgPT09ICdlbGVtZW50Jykge1xuICAgIGRlc2NyaXB0b3IuZGVzYyA9IF9maW5kRWxlbWVudERvY3MoZGVzY3JpcHRvci5pcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZG9tTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zY3JpcHRFbGVtZW50KTtcbiAgfVxuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcblxuICAvLyBUaGUgYDxkb20tbW9kdWxlPmAgaXMgdG9vIGxvdyBsZXZlbCBmb3IgbW9zdCBuZWVkcywgYW5kIGl0IGlzIF9ub3RfXG4gIC8vIHNlcmlhbGl6YWJsZS4gU28gd2UgZHJvcCBpdCBub3cgdGhhdCB3ZSd2ZSBleHRyYWN0ZWQgYWxsIHRoZSB1c2VmdWwgYml0c1xuICAvLyBmcm9tIGl0LlxuICBkZWxldGUgZGVzY3JpcHRvci5kb21Nb2R1bGU7XG5cbiAgLy8gRGVzY3JpcHRvcnMgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBgZGVzY2AgcHJvcGVydGllcyBwYXJzZWQgYXMgSlNEb2MuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgLy8gRmVhdHVyZSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWFsLCBjb25maWd1cmF0aW9uIGlzIHJlYWxseSBqdXN0IGEgbWF0dGVyIG9mXG4gICAgLy8gaW5oZXJpdGFuY2UuLi5cbiAgICBhbm5vdGF0ZVByb3BlcnR5KHByb3BlcnR5LCBkZXNjcmlwdG9yLmFic3RyYWN0KTtcbiAgfSk7XG5cbiAgLy8gSXQgbWF5IHNlZW0gbGlrZSBvdmVya2lsbCB0byBhbHdheXMgc29ydCwgYnV0IHdlIGhhdmUgYW4gYXNzdW1wdGlvbiB0aGF0XG4gIC8vIHRoZXNlIHByb3BlcnRpZXMgYXJlIHR5cGljYWxseSBiZWluZyBjb25zdW1lZCBieSB1c2VyLXZpc2libGUgdG9vbGluZy5cbiAgLy8gQXMgc3VjaCwgaXQncyBnb29kIHRvIGhhdmUgY29uc2lzdGVudCBvdXRwdXQvb3JkZXJpbmcgdG8gYWlkIHRoZSB1c2VyLlxuICBkZXNjcmlwdG9yLnByb3BlcnRpZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgbGFzdC5cbiAgICBpZiAoYS5wcml2YXRlICYmICFiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoIWEucHJpdmF0ZSAmJiBiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGp1c3Qgc29ydGluZyBhbHBoYWJldGljYWxseS5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGJlaGF2aW9yIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBiZWhhdmlvciBkZXNjcmlwdG9yXG4gKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3IgcGFzc2VkIGluIGFzIHBhcmFtXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlQmVoYXZpb3IoZGVzY3JpcHRvcikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcblxuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGV2ZW50IGRvY3VtZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gX2Fubm90YXRlRXZlbnQoZGVzY3JpcHRvcikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgLy8gcHJvY2VzcyBAZXZlbnRcbiAgdmFyIGV2ZW50VGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdldmVudCcpO1xuICBkZXNjcmlwdG9yLm5hbWUgPSBldmVudFRhZyA/IGV2ZW50VGFnLmRlc2NyaXB0aW9uIDogXCJOL0FcIjtcblxuICAvLyBwcm9jZXNzIEBwYXJhbXNcbiAgZGVzY3JpcHRvci5wYXJhbXMgPSAoZGVzY3JpcHRvci5qc2RvYy50YWdzIHx8IFtdKVxuICAgIC5maWx0ZXIoIGZ1bmN0aW9uKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy50YWcgPT09ICdwYXJhbSc7XG4gICAgfSlcbiAgICAubWFwKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHRhZy50eXBlIHx8IFwiTi9BXCIsXG4gICAgICAgIGRlc2M6IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgICAgbmFtZTogdGFnLm5hbWUgfHwgXCJOL0FcIlxuICAgICAgfTtcbiAgICB9KTtcbiAgLy8gcHJvY2VzcyBAcGFyYW1zXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIEFubm90YXRlcyBkb2N1bWVudGF0aW9uIGZvdW5kIGFib3V0IGEgSHlkcm9seXNpcyBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVDb25maWd1cmF0aW9uIElmIHRydWUsIGBjb25maWd1cmF0aW9uYCBpcyBub3Qgc2V0LlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZGVzY3JpcHRpb3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlUHJvcGVydHkoZGVzY3JpcHRvciwgaWdub3JlQ29uZmlndXJhdGlvbikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgaWYgKGRlc2NyaXB0b3IubmFtZVswXSA9PT0gJ18nIHx8IGpzZG9jLmhhc1RhZyhkZXNjcmlwdG9yLmpzZG9jLCAncHJpdmF0ZScpKSB7XG4gICAgZGVzY3JpcHRvci5wcml2YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ29uZmlndXJhdGlvbiAmJiBFTEVNRU5UX0NPTkZJR1VSQVRJT04uaW5kZXhPZihkZXNjcmlwdG9yLm5hbWUpICE9PSAtMSkge1xuICAgIGRlc2NyaXB0b3IucHJpdmF0ZSAgICAgICA9IHRydWU7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEB0eXBlIEpTRG9jIHdpbnNcbiAgZGVzY3JpcHRvci50eXBlID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICd0eXBlJywgJ3R5cGUnKSB8fCBkZXNjcmlwdG9yLnR5cGU7XG5cbiAgaWYgKGRlc2NyaXB0b3IudHlwZS5tYXRjaCgvXmZ1bmN0aW9uL2kpKSB7XG4gICAgX2Fubm90YXRlRnVuY3Rpb25Qcm9wZXJ0eShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIEBkZWZhdWx0IEpTRG9jIHdpbnNcbiAgdmFyIGRlZmF1bHRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2RlZmF1bHQnKTtcbiAgaWYgKGRlZmF1bHRUYWcgIT09IG51bGwpIHtcbiAgICBkZXNjcmlwdG9yLmRlZmF1bHQgPSAoZGVmYXVsdFRhZy5uYW1lIHx8ICcnKSArIChkZWZhdWx0VGFnLmRlc2NyaXB0aW9uIHx8ICcnKTtcbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKiogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIF9hbm5vdGF0ZUZ1bmN0aW9uUHJvcGVydHkoZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLmZ1bmN0aW9uID0gdHJ1ZTtcblxuICB2YXIgcmV0dXJuVGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdyZXR1cm4nKTtcbiAgaWYgKHJldHVyblRhZykge1xuICAgIGRlc2NyaXB0b3IucmV0dXJuID0ge1xuICAgICAgdHlwZTogcmV0dXJuVGFnLnR5cGUsXG4gICAgICBkZXNjOiByZXR1cm5UYWcuZGVzY3JpcHRpb24sXG4gICAgfTtcbiAgfVxuXG4gIHZhciBwYXJhbXNCeU5hbWUgPSB7fTtcbiAgKGRlc2NyaXB0b3IucGFyYW1zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgcGFyYW1zQnlOYW1lW3BhcmFtLm5hbWVdID0gcGFyYW07XG4gIH0pO1xuICAoZGVzY3JpcHRvci5qc2RvYyAmJiBkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgaWYgKHRhZy50YWcgIT09ICdwYXJhbScpIHJldHVybjtcbiAgICB2YXIgcGFyYW0gPSBwYXJhbXNCeU5hbWVbdGFnLm5hbWVdO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXJhbS50eXBlID0gdGFnLnR5cGUgfHwgcGFyYW0udHlwZTtcbiAgICBwYXJhbS5kZXNjID0gdGFnLmRlc2NyaXB0aW9uO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByYXcgZmVhdHVyZXMgaW50byBhbiBhYnN0cmFjdCBgUG9seW1lci5CYXNlYCBlbGVtZW50LlxuICpcbiAqIE5vdGUgdGhhdCBkb2NzIG9uIHRoaXMgZWxlbWVudCBfYXJlIG5vdCBwcm9jZXNzZWRfLiBZb3UgbXVzdCBjYWxsXG4gKiBgYW5ub3RhdGVFbGVtZW50YCBvbiBpdCB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCB0aGF0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBmZWF0dXJlc1xuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFbGVtZW50KGZlYXR1cmVzKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gZmVhdHVyZXMucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZmVhdHVyZSkge1xuICAgIHJldHVybiByZXN1bHQuY29uY2F0KGZlYXR1cmUucHJvcGVydGllcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICAgICAgICdlbGVtZW50JyxcbiAgICBpczogICAgICAgICAnUG9seW1lci5CYXNlJyxcbiAgICBhYnN0cmFjdDogICB0cnVlLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgZGVzYzogJ2BQb2x5bWVyLkJhc2VgIGFjdHMgYXMgYSBiYXNlIHByb3RvdHlwZSBmb3IgYWxsIFBvbHltZXIgJyArXG4gICAgICAgICAgJ2VsZW1lbnRzLiBJdCBpcyBjb21wb3NlZCB2aWEgdmFyaW91cyBjYWxscyB0byAnICtcbiAgICAgICAgICAnYFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSgpYC5cXG4nICtcbiAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgJ1RoZSBwcm9wZXJ0aWVzIHJlZmxlY3RlZCBoZXJlIGFyZSB0aGUgY29tYmluZWQgdmlldyBvZiBhbGwgJyArXG4gICAgICAgICAgJ2ZlYXR1cmVzIGZvdW5kIGluIHRoaXMgbGlicmFyeS4gVGhlcmUgbWF5IGJlIG1vcmUgcHJvcGVydGllcyAnICtcbiAgICAgICAgICAnYWRkZWQgdmlhIG90aGVyIGxpYnJhcmllcywgYXMgd2VsbC4nLFxuICB9O1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgZGVzY3JpcHRvciwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBjbGVhbihkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvci5qc2RvYykgcmV0dXJuO1xuICAvLyBUaGUgZG9jdGV4dCB3YXMgd3JpdHRlbiB0byBgZGVzY3JpcHRvci5kZXNjYFxuICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYy5kZXNjcmlwdGlvbjtcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2Mub3JpZztcblxuICB2YXIgY2xlYW5UYWdzID0gW107XG4gIChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgLy8gRHJvcCBhbnkgdGFncyB3ZSd2ZSBjb25zdW1lZC5cbiAgICBpZiAoSEFORExFRF9UQUdTLmluZGV4T2YodGFnLnRhZykgIT09IC0xKSByZXR1cm47XG4gICAgY2xlYW5UYWdzLnB1c2godGFnKTtcbiAgfSk7XG5cbiAgaWYgKGNsZWFuVGFncy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyB0YWdzPyBubyBkb2NzIGxlZnQhXG4gICAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2M7XG4gIH0gZWxzZSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzID0gY2xlYW5UYWdzO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gYW4gZWxlbWVudCwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlRWxlbWVudGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcnxCZWhhdmlvckRlc2NyaXB0b3J9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2xlYW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgY2xlYW4oZWxlbWVudCk7XG4gIGVsZW1lbnQucHJvcGVydGllcy5mb3JFYWNoKGNsZWFuUHJvcGVydHkpO1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHksIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZVByb3BlcnR5YC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2xlYW5Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICBjbGVhbihwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRJZFxuICogQHBhcmFtIHtEb2N1bWVudEFTVH0gZG9tTW9kdWxlXG4gKiBAcGFyYW0ge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IFRoZSBzY3JpcHQgdGhhdCB0aGUgZWxlbWVudCB3YXMgZGVmaW5lZCBpbi5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRFbGVtZW50RG9jcyhlbGVtZW50SWQsIGRvbU1vZHVsZSwgc2NyaXB0RWxlbWVudCkge1xuICAvLyBOb3RlIHRoYXQgd2UgY29uY2F0ZW5hdGUgZG9jcyBmcm9tIGFsbCBzb3VyY2VzIGlmIHdlIGZpbmQgdGhlbS5cbiAgLy8gZWxlbWVudCBjYW4gYmUgZGVmaW5lZCBpbjpcbiAgLy8gaHRtbCBjb21tZW50IHJpZ2h0IGJlZm9yZSBkb20tbW9kdWxlXG4gIC8vIGh0bWwgY29tbW5ldCByaWdodCBiZWZvcmUgc2NyaXB0IGRlZmluaW5nIHRoZSBtb2R1bGUsIGlmIGRvbS1tb2R1bGUgaXMgZW1wdHlcblxuICB2YXIgZm91bmQgPSBbXTtcblxuICAvLyBEbyB3ZSBoYXZlIGEgSFRNTCBjb21tZW50IG9uIHRoZSBgPGRvbS1tb2R1bGU+YCBvciBgPHNjcmlwdD5gP1xuICAvL1xuICAvLyBDb25mdXNpbmdseSwgd2l0aCBvdXIgY3VycmVudCBzdHlsZSwgdGhlIGNvbW1lbnQgd2lsbCBiZSBhdHRhY2hlZCB0b1xuICAvLyBgPGhlYWQ+YCwgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaWJsaW5nIHRvIHRoZSBgPGRvbS1tb2R1bGU+YFxuICB2YXIgc2VhcmNoUm9vdCA9IGRvbU1vZHVsZSB8fCBzY3JpcHRFbGVtZW50O1xuICB2YXIgcGFyZW50cyA9IGRvbTUubm9kZVdhbGtBbGxQcmlvcihzZWFyY2hSb290LCBkb201LmlzQ29tbWVudE5vZGUpO1xuICB2YXIgY29tbWVudCA9IHBhcmVudHMubGVuZ3RoID4gMCA/IHBhcmVudHNbMF0gOiBudWxsO1xuICBpZiAoY29tbWVudCAmJiBjb21tZW50LmRhdGEpIHtcbiAgICBmb3VuZC5wdXNoKGNvbW1lbnQuZGF0YSk7XG4gIH1cbiAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBmb3VuZFxuICAgIC5maWx0ZXIoZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgLy8gc2tpcCBAbGljZW5zZSBjb21tZW50c1xuICAgICAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5pbmRleE9mKCdAbGljZW5zZScgPT09IC0xKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgICAubWFwKGpzZG9jLnVuaW5kZW50KS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRMYXN0Q2hpbGROYW1lZChuYW1lLCBwYXJlbnQpIHtcbiAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7XG4gIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxLCBjaGlsZDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gbmFtZSkgcmV0dXJuIGNoaWxkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUT0RPKG5ldmlyKTogcGFyc2U1LXV0aWxzIVxuZnVuY3Rpb24gX2dldE5vZGVBdHRyaWJ1dGUobm9kZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgYXR0cjsgaSA8IG5vZGUuYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBhdHRyID0gbm9kZS5hdHRyc1tpXTtcbiAgICBpZiAoYXR0ci5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYXR0ci52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFubm90YXRlOiAgICAgICAgYW5ub3RhdGUsXG4gIGFubm90YXRlRWxlbWVudDogYW5ub3RhdGVFbGVtZW50LFxuICBhbm5vdGF0ZUJlaGF2aW9yOiBhbm5vdGF0ZUJlaGF2aW9yLFxuICBjbGVhbjogICAgICAgICAgIGNsZWFuLFxuICBjbGVhbkVsZW1lbnQ6ICAgIGNsZWFuRWxlbWVudCxcbiAgZmVhdHVyZUVsZW1lbnQ6ICBmZWF0dXJlRWxlbWVudCxcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGVzdXRpbCAgICA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIgZmluZEFsaWFzID0gcmVxdWlyZSgnLi9maW5kLWFsaWFzJyk7XG52YXIgYW5hbHl6ZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2FuYWx5emUtcHJvcGVydGllcycpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUnKTtcblxudmFyIGVsZW1lbnRGaW5kZXIgPSBmdW5jdGlvbiBlbGVtZW50RmluZGVyKCkge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZWxlbWVudHMgZXhwb3J0ZWQgYnkgZWFjaCB0cmF2ZXJzZWQgc2NyaXB0LlxuICAgKi9cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGJlaW5nIGJ1aWx0IGR1cmluZyBhIHRyYXZlcnNhbDtcbiAgICovXG4gIHZhciBlbGVtZW50O1xuXG4gIC8qKlxuICAgKiBhIHNldCBvZiBzcGVjaWFsIGNhc2UgcHJvcGVydGllcy4gdGhlc2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkXG4gICAqIHdoZW4gd2Uga25vdyB3ZSdyZSBpbnNpZGUgYW4gZWxlbWVudCBkZWZpbml0aW9uLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIHByb3BlcnR5SGFuZGxlcnMgPSB7XG4gICAgaXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgIGVsZW1lbnQuaXMgPSBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcGVydGllczogZnVuY3Rpb24obm9kZSkge1xuXG4gICAgICB2YXIgcHJvcHMgPSBhbmFseXplUHJvcGVydGllcyhub2RlKTtcblxuICAgICAgZm9yICh2YXIgaT0wOyBpPHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJlaGF2aW9yczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LmJlaGF2aW9ycyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8bm9kZS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdiA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKG5vZGUuZWxlbWVudHNbaV0pO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHYgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgIGVsZW1lbnQuYmVoYXZpb3JzLnB1c2godik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcbiAgICBlbnRlckNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlckNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgaWYgKGNhbGxlZS50eXBlID09ICdJZGVudGlmaWVyJykge1xuXG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBlbGVtZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgZGVzYzogZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpLFxuICAgICAgICAgICAgZXZlbnRzOiBlc3V0aWwuZ2V0RXZlbnRDb21tZW50cyhwYXJlbnQpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtkZXNjOiBldmVudH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxlYXZlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGxlYXZlQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICBpZiAoY2FsbGVlLnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyT2JqZWN0RXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmICFlbGVtZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByb3AgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgICAgICAgdmFyIG5hbWUgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcC5rZXkpO1xuICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2FudCBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmFtZSBpbiBwcm9wZXJ0eUhhbmRsZXJzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUhhbmRsZXJzW25hbWVdKHByb3AudmFsdWUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5wdXNoKGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzdHJhdmVyc2UuVmlzaXRvck9wdGlvbi5Ta2lwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGVsZW1lbnRzOiBlbGVtZW50c307XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVsZW1lbnRGaW5kZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoXCJlc3RyYXZlcnNlXCIpO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhbiBFc3ByZWUgbm9kZSBtYXRjaGVzIGEgcGFydGljdWxhciBvYmplY3QgcGF0aC5cbiAqXG4gKiBlLmcuIHlvdSBoYXZlIGEgTWVtYmVyRXhwcmVzc2lvbiBub2RlLCBhbmQgd2FudCB0byBzZWUgd2hldGhlciBpdCByZXByZXNlbnRzXG4gKiBgRm9vLkJhci5CYXpgOlxuICpcbiAqICAgICBtYXRjaGVzQ2FsbEV4cHJlc3Npb24obm9kZSwgWydGb28nLCAnQmFyJywgJ0JheiddKVxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gZXhwcmVzc2lvbiBUaGUgRXNwcmVlIG5vZGUgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gcGF0aCBUaGUgcGF0aCB0byBsb29rIGZvci5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24sIHBhdGgpIHtcbiAgaWYgKCFleHByZXNzaW9uLnByb3BlcnR5IHx8ICFleHByZXNzaW9uLm9iamVjdCkgcmV0dXJuO1xuICBjb25zb2xlLmFzc2VydChwYXRoLmxlbmd0aCA+PSAyKTtcblxuICAvLyBVbnJhdmVsIGJhY2t3YXJkcywgbWFrZSBzdXJlIHByb3BlcnRpZXMgbWF0Y2ggZWFjaCBzdGVwIG9mIHRoZSB3YXkuXG4gIGlmIChleHByZXNzaW9uLnByb3BlcnR5Lm5hbWUgIT09IHBhdGhbcGF0aC5sZW5ndGggLSAxXSkgcmV0dXJuIGZhbHNlO1xuICAvLyBXZSd2ZSBnb3Qgb3Vyc2VsdmVzIGEgZmluYWwgbWVtYmVyIGV4cHJlc3Npb24uXG4gIGlmIChwYXRoLmxlbmd0aCA9PSAyICYmIGV4cHJlc3Npb24ub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9iamVjdC5uYW1lID09PSBwYXRoWzBdO1xuICB9XG4gIC8vIE5lc3RlZCBleHByZXNzaW9ucy5cbiAgaWYgKHBhdGgubGVuZ3RoID4gMiAmJiBleHByZXNzaW9uLm9iamVjdC50eXBlID09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBtYXRjaGVzQ2FsbEV4cHJlc3Npb24oZXhwcmVzc2lvbi5vYmplY3QsIHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBrZXkgVGhlIG5vZGUgcmVwcmVzZW50aW5nIGFuIG9iamVjdCBrZXkgb3IgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhhdCBrZXkuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdEtleVRvU3RyaW5nKGtleSkge1xuICBpZiAoa2V5LnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIGtleS5uYW1lO1xuICB9XG4gIGlmIChrZXkudHlwZSA9PSAnTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4ga2V5LnZhbHVlO1xuICB9XG4gIGlmIChrZXkudHlwZSA9PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gb2JqZWN0S2V5VG9TdHJpbmcoa2V5Lm9iamVjdCkgKyAnLicgKyBvYmplY3RLZXlUb1N0cmluZyhrZXkucHJvcGVydHkpO1xuICB9XG59XG5cbnZhciBDTE9TVVJFX0NPTlNUUlVDVE9SX01BUCA9IHtcbiAgJ0Jvb2xlYW4nOiAnYm9vbGVhbicsXG4gICdOdW1iZXInOiAgJ251bWJlcicsXG4gICdTdHJpbmcnOiAgJ3N0cmluZycsXG59O1xuXG4vKipcbiAqIEFTVCBleHByZXNzaW9uIC0+IENsb3N1cmUgdHlwZS5cbiAqXG4gKiBBY2NlcHRzIGxpdGVyYWwgdmFsdWVzLCBhbmQgbmF0aXZlIGNvbnN0cnVjdG9ycy5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgQW4gRXNwcmVlIGV4cHJlc3Npb24gbm9kZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgb2YgdGhhdCBleHByZXNzaW9uLCBpbiBDbG9zdXJlIHRlcm1zLlxuICovXG5mdW5jdGlvbiBjbG9zdXJlVHlwZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUubWF0Y2goL0V4cHJlc3Npb24kLykpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlLnN1YnN0cigwLCBub2RlLnR5cGUubGVuZ3RoIC0gMTApO1xuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlLnZhbHVlO1xuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIENMT1NVUkVfQ09OU1RSVUNUT1JfTUFQW25vZGUubmFtZV0gfHwgbm9kZS5uYW1lO1xuICB9IGVsc2Uge1xuICAgIHRocm93IHtcbiAgICAgIG1lc3NhZ2U6ICdVbmtub3duIENsb3N1cmUgdHlwZSBmb3Igbm9kZTogJyArIG5vZGUudHlwZSxcbiAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRBdHRhY2hlZENvbW1lbnQobm9kZSkge1xuICB2YXIgY29tbWVudHMgPSBnZXRMZWFkaW5nQ29tbWVudHMobm9kZSkgfHwgZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUua2V5KTtcbiAgaWYgKCFjb21tZW50cykge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gY29tbWVudHNbY29tbWVudHMubGVuZ3RoIC0gMV07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgY29tbWVudHMgZnJvbSBhIHRyZWUgZGVmaW5lZCB3aXRoIEBldmVudC5cbiAqIEBwYXJhbSAge05vZGV9IG5vZGUgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDb21tZW50cyhub2RlKSB7XG4gIHZhciBldmVudENvbW1lbnRzID0gW107XG4gIGVzdHJhdmVyc2UudHJhdmVyc2Uobm9kZSwge1xuICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGNvbW1lbnRzID0gKG5vZGUubGVhZGluZ0NvbW1lbnRzIHx8IFtdKS5jb25jYXQobm9kZS50cmFpbGluZ0NvbW1lbnRzIHx8IFtdKVxuICAgICAgICAubWFwKCBmdW5jdGlvbihjb21tZW50QVNUKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1lbnRBU1QudmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoIGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gY29tbWVudC5pbmRleE9mKFwiQGV2ZW50XCIpICE9IC0xO1xuICAgICAgICB9KTtcbiAgICAgIGV2ZW50Q29tbWVudHMgPSBldmVudENvbW1lbnRzLmNvbmNhdChjb21tZW50cyk7XG4gICAgfVxuICB9KTtcbiAgLy8gZGVkdXBcbiAgcmV0dXJuIGV2ZW50Q29tbWVudHMuZmlsdGVyKCBmdW5jdGlvbihlbCwgaW5kZXgsIGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LmluZGV4T2YoZWwpID09PSBpbmRleDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW1cbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRMZWFkaW5nQ29tbWVudHMobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHM7XG4gIGlmICghY29tbWVudHMgfHwgY29tbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHJldHVybiBjb21tZW50cy5tYXAoZnVuY3Rpb24oY29tbWVudCkge1xuICAgIHJldHVybiBjb21tZW50LnZhbHVlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhcnNlNSBQcm9wZXJ0eSBBU1Qgbm9kZSBpbnRvIGl0cyBIeWRyb2x5c2lzIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7UHJvcGVydHlEZXNjcmlwdG9yfVxuICovXG5mdW5jdGlvbiB0b1Byb3BlcnR5RGVzY3JpcHRvcihub2RlKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgbmFtZTogb2JqZWN0S2V5VG9TdHJpbmcobm9kZS5rZXkpLFxuICAgIHR5cGU6IGNsb3N1cmVUeXBlKG5vZGUudmFsdWUpLFxuICAgIGRlc2M6IGdldEF0dGFjaGVkQ29tbWVudChub2RlKSxcbiAgICBqYXZhc2NyaXB0Tm9kZTogbm9kZVxuICB9O1xuXG4gIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgcmVzdWx0LnBhcmFtcyA9IChub2RlLnZhbHVlLnBhcmFtcyB8fCBbXSkubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICByZXR1cm4ge25hbWU6IHBhcmFtLm5hbWV9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNsb3N1cmVUeXBlOiAgICAgICAgICAgY2xvc3VyZVR5cGUsXG4gIGdldEF0dGFjaGVkQ29tbWVudDogICAgZ2V0QXR0YWNoZWRDb21tZW50LFxuICBnZXRFdmVudENvbW1lbnRzOiAgICAgIGdldEV2ZW50Q29tbWVudHMsXG4gIG1hdGNoZXNDYWxsRXhwcmVzc2lvbjogbWF0Y2hlc0NhbGxFeHByZXNzaW9uLFxuICBvYmplY3RLZXlUb1N0cmluZzogICAgIG9iamVjdEtleVRvU3RyaW5nLFxuICB0b1Byb3BlcnR5RGVzY3JpcHRvcjogIHRvUHJvcGVydHlEZXNjcmlwdG9yLFxufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcblxudmFyIG51bUZlYXR1cmVzID0gMDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmZWF0dXJlRmluZGVyKCkge1xuICAvKiogQHR5cGUgeyFBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59IFRoZSBmZWF0dXJlcyB3ZSd2ZSBmb3VuZC4gKi9cbiAgdmFyIGZlYXR1cmVzID0gW107XG5cbiAgdmFyIHZpc2l0b3JzID0ge1xuXG4gICAgZW50ZXJDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmICghZXN1dGlsLm1hdGNoZXNDYWxsRXhwcmVzc2lvbihub2RlLmNhbGxlZSwgWydQb2x5bWVyJywgJ0Jhc2UnLCAnX2FkZEZlYXR1cmUnXSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLyoqIEB0eXBlIHshRmVhdHVyZURlc2NyaXB0b3J9ICovXG4gICAgICB2YXIgZmVhdHVyZSA9IHt9O1xuICAgICAgdGhpcy5fZXh0cmFjdERlc2MoZmVhdHVyZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgIHRoaXMuX2V4dHJhY3RQcm9wZXJ0aWVzKGZlYXR1cmUsIG5vZGUsIHBhcmVudCk7XG5cbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfSxcblxuICAgIF9leHRyYWN0RGVzYzogZnVuY3Rpb24gX2V4dHJhY3REZXNjKGZlYXR1cmUsIG5vZGUsIHBhcmVudCkge1xuICAgICAgZmVhdHVyZS5kZXNjID0gZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpO1xuICAgIH0sXG5cbiAgICBfZXh0cmFjdFByb3BlcnRpZXM6IGZ1bmN0aW9uIF9leHRyYWN0UHJvcGVydGllcyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBmZWF0dXJlTm9kZSA9IG5vZGUuYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKGZlYXR1cmVOb2RlLnR5cGUgIT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gUG9seW1lci5CYXNlLl9hZGRGZWF0dXJlIHRvIGJlIGFuIG9iamVjdC4nLFxuICAgICAgICAgICAgJ0dvdCcsIGZlYXR1cmVOb2RlLnR5cGUsICdpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWZlYXR1cmVOb2RlLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzID0gZmVhdHVyZU5vZGUucHJvcGVydGllcy5tYXAoZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGZlYXR1cmVzOiBmZWF0dXJlc307XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGZpbmRBbGlhcyA9IGZ1bmN0aW9uIGZpbmRBbGlhcyhuYW1lcywgYWxpYXNlcywgbmFtZSkge1xuICBpZiAoIW5hbWVzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGFsaWFzZXNbbmFtZXMuaW5kZXhPZihuYW1lKV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRBbGlhcztcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG52YXIgcCA9IGRvbTUucHJlZGljYXRlcztcblxudmFyIGlzSHRtbEltcG9ydE5vZGUgPSBwLkFORChcbiAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIHAuTk9UKFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbnZhciBpc1N0eWxlTm9kZSA9IHAuT1IoXG4gIC8vIGlubGluZSBzdHlsZVxuICBwLmhhc1RhZ05hbWUoJ3N0eWxlJyksXG4gIC8vIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgcC5BTkQoXG4gICAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3JlbCcsICdzdHlsZXNoZWV0JylcbiAgKSxcbiAgLy8gcG9seW1lciBzcGVjaWZpYyBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIHAuQU5EKFxuICAgIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICAgIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxuZnVuY3Rpb24gYWRkTm9kZShub2RlLCByZWdpc3RyeSkge1xuICBpZiAoaXNIdG1sSW1wb3J0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LmltcG9ydC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU3R5bGVOb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuc3R5bGUucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChyZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShub2RlLnRhZ05hbWUpKSB7XG4gICAgcmVnaXN0cnlbbm9kZS50YWdOYW1lXS5wdXNoKG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpbmVBbmRDb2x1bW4oc3RyaW5nLCBjaGFyTnVtYmVyKSB7XG4gIGlmIChjaGFyTnVtYmVyID4gc3RyaW5nLmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVE9ETyhham8pOiBDYWNoaW5nIHRoZSBsaW5lIGxlbmd0aHMgb2YgZWFjaCBkb2N1bWVudCBjb3VsZCBiZSBtdWNoIGZhc3Rlci5cbiAgdmFyIHNsaWNlZCA9IHN0cmluZy5zbGljZSgwLGNoYXJOdW1iZXIrMSk7XG4gIHZhciBzcGxpdCA9IHNsaWNlZC5zcGxpdCgnXFxuJyk7XG4gIHZhciBsaW5lID0gc3BsaXQubGVuZ3RoO1xuICB2YXIgY29sdW1uID0gc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICByZXR1cm4ge2xpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1ufTtcbn1cblxuLyoqXG4qIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnQuXG4qIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4qL1xuXG4vKipcbiogVGhlIEFTVHMgb2YgdGhlIEhUTUwgZWxlbWVudHMgbmVlZGVkIHRvIHJlcHJlc2VudCBQb2x5bWVyIGVsZW1lbnRzLlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZWRJbXBvcnRcbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHRlbXBsYXRlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBlYWNoIG91dGVybW9zdCB0ZW1wbGF0ZSB0YWcuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzY3JpcHQgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggc2NyaXB0IHRhZyBub3QgaW5zaWRlIGEgdGVtcGxhdGUuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzdHlsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgc3R5bGUgdGFnIG91dHNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IGRvbS1tb2R1bGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IGRvbS1tb2R1bGUgZWxlbWVudC5cbiogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gYXN0IFRoZSBmdWxsIHBhcnNlNSBhc3QgZm9yIHRoZSBkb2N1bWVudC5cbiovXG5cbi8qKlxuKiBQYXJzZSBodG1sIGludG8gQVNUcy5cbiogQHBhcmFtIHtzdHJpbmd9IGh0bWxTdHJpbmcgQSB1dGY4LCBodG1sNSBkb2N1bWVudCBjb250YWluaW5nIHBvbHltZXIgZWxlbWVudCBvciBtb2R1bGUgZGVmaW5pdG9ucy5cbiogQHBhcmFtIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuKiBAcmV0dXJuIHtQYXJzZWRJbXBvcnR9XG4qL1xudmFyIGltcG9ydFBhcnNlID0gZnVuY3Rpb24gaW1wb3J0UGFyc2UoaHRtbFN0cmluZywgaHJlZikge1xuICB2YXIgZG9jO1xuICB0cnkge1xuICAgIGRvYyA9IGRvbTUucGFyc2UoaHRtbFN0cmluZywge2xvY2F0aW9uSW5mbzogdHJ1ZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWRkIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uXG4gIGRvbTUudHJlZU1hcChkb2MsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5fX2xvY2F0aW9uICYmIG5vZGUuX19sb2NhdGlvbi5zdGFydCA+PSAwKSB7XG4gICAgICBub2RlLl9fbG9jYXRpb25EZXRhaWwgPSBnZXRMaW5lQW5kQ29sdW1uKGh0bWxTdHJpbmcsIG5vZGUuX19sb2NhdGlvbi5zdGFydCk7XG4gICAgICBpZiAoaHJlZikge1xuICAgICAgICBub2RlLl9fb3duZXJEb2N1bWVudCA9IGhyZWY7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVnaXN0cnkgPSB7XG4gICAgICBiYXNlOiBbXSxcbiAgICAgIHRlbXBsYXRlOiBbXSxcbiAgICAgIHNjcmlwdDogW10sXG4gICAgICBzdHlsZTogW10sXG4gICAgICBpbXBvcnQ6IFtdLFxuICAgICAgJ2RvbS1tb2R1bGUnOiBbXX07XG5cbiAgdmFyIHF1ZXVlID0gW10uY29uY2F0KGRvYy5jaGlsZE5vZGVzKTtcbiAgdmFyIG5leHROb2RlO1xuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIG5leHROb2RlID0gcXVldWUuc2hpZnQoKTtcbiAgICBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudGFnTmFtZSkge1xuICAgICAgcXVldWUgPSBxdWV1ZS5jb25jYXQobmV4dE5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICBhZGROb2RlKG5leHROb2RlLCByZWdpc3RyeSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdHJ5LmFzdCA9IGRvYztcbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbXBvcnRQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLyoqXG4qIEZpbmRzIGFuZCBhbm5vdGF0ZXMgdGhlIFBvbHltZXIoKSBhbmQgbW9kdWxhdGUoKSBjYWxscyBpbiBqYXZhc2NyaXB0LlxuKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXNwcmVlID0gcmVxdWlyZSgnZXNwcmVlJyk7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGJlaGF2aW9yRmluZGVyID0gcmVxdWlyZSgnLi9iZWhhdmlvci1maW5kZXInKTtcbnZhciBlbGVtZW50RmluZGVyICA9IHJlcXVpcmUoJy4vZWxlbWVudC1maW5kZXInKTtcbnZhciBmZWF0dXJlRmluZGVyICA9IHJlcXVpcmUoJy4vZmVhdHVyZS1maW5kZXInKTtcblxuZnVuY3Rpb24gdHJhdmVyc2UodmlzaXRvclJlZ2lzdHJpZXMpIHtcbiAgdmFyIHZpc2l0b3I7XG4gIGZ1bmN0aW9uIGFwcGx5VmlzaXRvcnMobmFtZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgdmFyIHJldHVyblZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JSZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSBpbiB2aXNpdG9yUmVnaXN0cmllc1tpXSkge1xuICAgICAgICByZXR1cm5WYWwgPSB2aXNpdG9yUmVnaXN0cmllc1tpXVtuYW1lXShub2RlLCBwYXJlbnQpO1xuICAgICAgICBpZiAocmV0dXJuVmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnZW50ZXInICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnbGVhdmUnICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBqc1BhcnNlID0gZnVuY3Rpb24ganNQYXJzZShqc1N0cmluZykge1xuICB2YXIgc2NyaXB0ID0gZXNwcmVlLnBhcnNlKGpzU3RyaW5nLCB7XG4gICAgYXR0YWNoQ29tbWVudDogdHJ1ZSxcbiAgICBjb21tZW50OiB0cnVlLFxuICAgIGxvYzogdHJ1ZSxcbiAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgIGFycm93RnVuY3Rpb25zOiB0cnVlLFxuICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICByZWdleFlGbGFnOiB0cnVlLFxuICAgICAgcmVnZXhVRmxhZzogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlU3RyaW5nczogdHJ1ZSxcbiAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgcmVzdFBhcmFtczogdHJ1ZSxcbiAgICAgIGZvck9mOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRNZXRob2RzOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZFByb3BlcnRpZXM6IHRydWUsXG4gICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIGdlbmVyYXRvcnM6IHRydWUsXG4gICAgICBzcHJlYWQ6IHRydWUsXG4gICAgICBjbGFzc2VzOiB0cnVlLFxuICAgICAgbW9kdWxlczogdHJ1ZSxcbiAgICAgIGpzeDogdHJ1ZSxcbiAgICAgIGdsb2JhbFJldHVybjogdHJ1ZSxcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBmZWF0dXJlSW5mbyA9IGZlYXR1cmVGaW5kZXIoKTtcbiAgdmFyIGJlaGF2aW9ySW5mbyA9IGJlaGF2aW9yRmluZGVyKCk7XG4gIHZhciBlbGVtZW50SW5mbyA9IGVsZW1lbnRGaW5kZXIoKTtcblxuICB2YXIgdmlzaXRvcnMgPSBbZmVhdHVyZUluZm8sIGJlaGF2aW9ySW5mbywgZWxlbWVudEluZm9dLm1hcChmdW5jdGlvbihpbmZvKSB7XG4gICAgcmV0dXJuIGluZm8udmlzaXRvcnM7XG4gIH0pO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKHNjcmlwdCwgdHJhdmVyc2UodmlzaXRvcnMpKTtcblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yczogYmVoYXZpb3JJbmZvLmJlaGF2aW9ycyxcbiAgICBlbGVtZW50czogIGVsZW1lbnRJbmZvLmVsZW1lbnRzLFxuICAgIGZlYXR1cmVzOiAgZmVhdHVyZUluZm8uZmVhdHVyZXMsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzUGFyc2U7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG5cbnZhciBkb2N0cmluZSA9IHJlcXVpcmUoJ2RvY3RyaW5lJyk7XG5cbi8qKlxuICogQW4gYW5ub3RhdGVkIEpTRG9jIGJsb2NrIHRhZywgYWxsIGZpZWxkcyBhcmUgb3B0aW9uYWxseSBwcm9jZXNzZWQgZXhjZXB0IGZvclxuICogdGhlIHRhZzpcbiAqXG4gKiAgICAgQFRBRyB7VFlQRX0gTkFNRSBERVNDXG4gKlxuICogYGxpbmVgIGFuZCBgY29sYCBpbmRpY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IHRoYXRcbiAqIHRoZSB0YWcgd2FzIGV4dHJhY3RlZCBmcm9tIC0gcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY29tbWVudFxuICogY29udGVudHMgKGUuZy4gdGhlIHZhbHVlIG9mIGBkZXNjYCBvbiBhIGRlc2NyaXB0b3Igbm9kZSkuIExpbmVzIGFyZVxuICogMS1pbmRleGVkLlxuICpcbiAqIEB0eXBlZGVmIHt7XG4gKiAgIHRhZzogICBzdHJpbmcsXG4gKiAgIHR5cGU6ID9zdHJpbmcsXG4gKiAgIG5hbWU6ID9zdHJpbmcsXG4gKiAgIGRlc2NyaXB0aW9uOiA/c3RyaW5nLFxuICogfX1cbiAqL1xudmFyIEpzZG9jVGFnO1xuXG4vKipcbiAqIFRoZSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgYSBKU0RvYyBjb21tZW50LlxuICpcbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGRlc2NyaXB0aW9uOiA/c3RyaW5nLFxuICogICB0YWdzOiBBcnJheTxKc2RvY1RhZz4sXG4gKiB9fVxuICovXG52YXIgSnNkb2NBbm5vdGF0aW9uO1xuXG4vKipcbiAqIGRvY3RyaW5lIGNvbmZpZ3VyYXRpb24sXG4gKiBDVVJSRU5UTFkgVU5VU0VEIEJFQ0FVU0UgUFJJVkFURVxuICovXG4vLyBmdW5jdGlvbiBjb25maWd1cmVEb2N0cmluZSgpIHtcblxuLy8gICAvLyBAaGVybyBbcGF0aC90by9pbWFnZV1cbi8vICAgZG9jdHJpbmUuUnVsZXNbJ2hlcm8nXSA9IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddO1xuXG4vLyAgIC8vIC8vIEBkZW1vIFtwYXRoL3RvL2RlbW9dIFtEZW1vIHRpdGxlXVxuLy8gICBkb2N0cmluZS5SdWxlc1snZGVtbyddID0gWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAncGFyc2VEZXNjcmlwdGlvbicsICdlbnN1cmVFbmQnXTtcblxuLy8gICAvLyAvLyBAcG9seW1lckJlaGF2aW9yIFtQb2x5bWVyLkJlaGF2aW9yTmFtZV1cbi8vICAgZG9jdHJpbmUuUnVsZXNbJ3BvbHltZXJCZWhhdmlvciddID0gWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ107XG4vLyB9XG4vLyBjb25maWd1cmVEb2N0cmluZSgpO1xuXG4vLyBAZGVtbyBbcGF0aF0gW3RpdGxlXVxuZnVuY3Rpb24gcGFyc2VEZW1vKHRhZykge1xuICB2YXIgbWF0Y2ggPSAodGFnLmRlc2NyaXB0aW9uIHx8IFwiXCIpLm1hdGNoKC9eXFxzKihcXFMqKVxccyooLiopJC8pO1xuICByZXR1cm4ge1xuICAgIHRhZzogJ2RlbW8nLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGwsXG4gICAgZGVzY3JpcHRpb246IG1hdGNoID8gbWF0Y2hbMl0gOiBudWxsXG4gIH07XG59XG5cbi8vIEBoZXJvIFtwYXRoXVxuZnVuY3Rpb24gcGFyc2VIZXJvKHRhZykge1xuICByZXR1cm4ge1xuICAgIHRhZzogIHRhZy50aXRsZSxcbiAgICB0eXBlOiBudWxsLFxuICAgIG5hbWU6IHRhZy5kZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbjogbnVsbFxuICB9O1xufVxuXG4vLyBAcG9seW1lckJlaGF2aW9yIFtuYW1lXVxuZnVuY3Rpb24gcGFyc2VQb2x5bWVyQmVoYXZpb3IodGFnKSB7XG4gIHJldHVybiB7XG4gICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogdGFnLmRlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsXG4gIH07XG59XG5cbi8vIEBwc2V1ZG9FbGVtZW50IG5hbWVcbmZ1bmN0aW9uIHBhcnNlUHNldWRvRWxlbWVudCh0YWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWc6ICB0YWcudGl0bGUsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiB0YWcuZGVzY3JpcHRpb24sXG4gICAgZGVzY3JpcHRpb246IG51bGxcbiAgfTtcbn1cblxudmFyIENVU1RPTV9UQUdTID0ge1xuICBkZW1vOiBwYXJzZURlbW8sXG4gIGhlcm86IHBhcnNlSGVybyxcbiAgcG9seW1lckJlaGF2aW9yOiBwYXJzZVBvbHltZXJCZWhhdmlvcixcbiAgcHNldWRvRWxlbWVudDogcGFyc2VQc2V1ZG9FbGVtZW50XG59O1xuXG4vKipcbiAqIENvbnZlcnQgZG9jdHJpbmUgdGFncyB0byBoeWRyb2x5c2lzIHRhZyBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gX3RhZ3NUb0h5ZHJvVGFncyh0YWdzKSB7XG4gIGlmICghdGFncylcbiAgICByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHRhZ3MubWFwKCBmdW5jdGlvbih0YWcpIHtcbiAgICBpZiAodGFnLnRpdGxlIGluIENVU1RPTV9UQUdTKSB7XG4gICAgICByZXR1cm4gQ1VTVE9NX1RBR1NbdGFnLnRpdGxlXSh0YWcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogIHRhZy50aXRsZSxcbiAgICAgICAgdHlwZTogdGFnLnR5cGUgPyBkb2N0cmluZS50eXBlLnN0cmluZ2lmeSh0YWcudHlwZSkgOiBudWxsLFxuICAgICAgICBuYW1lOiB0YWcubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiByZW1vdmVzIGxlYWRpbmcgKiwgYW5kIGFueSBzcGFjZSBiZWZvcmUgaXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiAtLSBqcyBkb2MgZGVzY3JpcHRpb25cbiAqL1xuZnVuY3Rpb24gX3JlbW92ZUxlYWRpbmdBc3Rlcmlza3MoZGVzY3JpcHRpb24pIHtcbiAgaWYgKCh0eXBlb2YgZGVzY3JpcHRpb24pICE9PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XG5cbiAgcmV0dXJuIGRlc2NyaXB0aW9uXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIC8vIHJlbW92ZSBsZWFkaW5nICdcXHMqJyBmcm9tIGVhY2ggbGluZVxuICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXltcXHNdKlxcKlxccz8oLiopJC8pO1xuICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBsaW5lO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgSlNEb2Mgc3RyaW5nIChtaW51cyBvcGVuaW5nL2Nsb3NpbmcgY29tbWVudCBkZWxpbWl0ZXJzKSwgZXh0cmFjdCBpdHNcbiAqIGRlc2NyaXB0aW9uIGFuZCB0YWdzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb2NzXG4gKiBAcmV0dXJuIHs/SnNkb2NBbm5vdGF0aW9ufVxuICovXG5mdW5jdGlvbiBwYXJzZUpzZG9jKGRvY3MpIHtcbiAgZG9jcyA9IF9yZW1vdmVMZWFkaW5nQXN0ZXJpc2tzKGRvY3MpO1xuICB2YXIgZCA9IGRvY3RyaW5lLnBhcnNlKGRvY3MsIHtcbiAgICB1bndyYXA6IGZhbHNlLFxuICAgIGxpbmVOdW1iZXI6IHRydWUsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRlc2NyaXB0aW9uOiBkLmRlc2NyaXB0aW9uLFxuICAgIHRhZ3M6IF90YWdzVG9IeWRyb1RhZ3MoZC50YWdzKVxuICB9O1xufVxuXG4vLyBVdGlsaXR5XG5cbi8qKlxuICogQHBhcmFtIHtKc2RvY0Fubm90YXRpb259IGpzZG9jXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzVGFnKGpzZG9jLCB0YWdOYW1lKSB7XG4gIGlmICghanNkb2MgfHwgIWpzZG9jLnRhZ3MpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGpzZG9jLnRhZ3Muc29tZShmdW5jdGlvbih0YWcpIHsgcmV0dXJuIHRhZy50YWcgPT09IHRhZ05hbWU7IH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBKU0RvYyB0YWcgbWF0Y2hpbmcgYG5hbWVgIGFuZCByZXR1cm5zIGl0cyB2YWx1ZSBhdCBga2V5YC5cbiAqXG4gKiBAcGFyYW0ge0pzZG9jQW5ub3RhdGlvbn0ganNkb2NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZz19IGtleSBJZiBvbWl0dGVkLCB0aGUgZW50aXJlIHRhZyBvYmplY3QgaXMgcmV0dXJuZWQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfE9iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFnKGpzZG9jLCB0YWdOYW1lLCBrZXkpIHtcbiAgaWYgKCFqc2RvYyB8fCAhanNkb2MudGFncykgcmV0dXJuIGZhbHNlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzZG9jLnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdGFnID0ganNkb2MudGFnc1tpXTtcbiAgICBpZiAodGFnLnRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgcmV0dXJuIGtleSA/IHRhZ1trZXldIDogdGFnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez9zdHJpbmd9IHRleHRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHVuaW5kZW50KHRleHQpIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgdmFyIGxpbmVzICA9IHRleHQucmVwbGFjZSgvXFx0L2csICcgICcpLnNwbGl0KCdcXG4nKTtcbiAgdmFyIGluZGVudCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBsaW5lKSB7XG4gICAgaWYgKC9eXFxzKiQvLnRlc3QobGluZSkpIHJldHVybiBwcmV2OyAgLy8gQ29tcGxldGVseSBpZ25vcmUgYmxhbmsgbGluZXMuXG5cbiAgICB2YXIgbGluZUluZGVudCA9IGxpbmUubWF0Y2goL14oXFxzKikvKVswXS5sZW5ndGg7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHJldHVybiBsaW5lSW5kZW50O1xuICAgIHJldHVybiBsaW5lSW5kZW50IDwgcHJldiA/IGxpbmVJbmRlbnQgOiBwcmV2O1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uKGwpIHsgcmV0dXJuIGwuc3Vic3RyKGluZGVudCk7IH0pLmpvaW4oJ1xcbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0VGFnOiAgICAgZ2V0VGFnLFxuICBoYXNUYWc6ICAgICBoYXNUYWcsXG4gIHBhcnNlSnNkb2M6IHBhcnNlSnNkb2MsXG4gIHVuaW5kZW50OiAgIHVuaW5kZW50XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxuLy8ganNoaW50IC1XMDc5XG4vLyBQcm9taXNlIHBvbHlmaWxsXG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlIHx8IHJlcXVpcmUoJ2VzNi1wcm9taXNlJykuUHJvbWlzZTtcbi8vIGpzaGludCArVzA3OVxuXG5mdW5jdGlvbiBEZWZlcnJlZCgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBzZWxmLnJlc29sdmUgPSByZXNvbHZlO1xuICAgIHNlbGYucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBrbm93cyBob3cgdG8gcmVzb2x2ZSByZXNvdXJjZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZXNvbHZlclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nLCBEZWZlcnJlZCk6IGJvb2xlYW59IGFjY2VwdCBBdHRlbXB0IHRvIHJlc29sdmVcbiAqICAgICBgZGVmZXJyZWRgIHdpdGggdGhlIGNvbnRlbnRzIHRoZSBzcGVjaWZpZWQgVVJMLiBSZXR1cm5zIGZhbHNlIGlmIHRoZVxuICogICAgIFJlc29sdmVyIGlzIHVuYWJsZSB0byByZXNvbHZlIHRoZSBVUkwuXG4gKi9cblxuXG4vKipcbiAqIEEgRmlsZUxvYWRlciBsZXRzIHlvdSByZXNvbHZlIFVSTHMgd2l0aCBhIHNldCBvZiBwb3RlbnRpYWwgcmVzb2x2ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5mdW5jdGlvbiBGaWxlTG9hZGVyKCkge1xuICB0aGlzLnJlc29sdmVycyA9IFtdO1xuICAvLyBtYXAgdXJsIC0+IERlZmVycmVkXG4gIHRoaXMucmVxdWVzdHMgPSB7fTtcbn1cbkZpbGVMb2FkZXIucHJvdG90eXBlID0ge1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW5zdGFuY2Ugb2YgYSBSZXNvbHZlciBjbGFzcyB0byB0aGUgbGlzdCBvZiB1cmwgcmVzb2x2ZXJzXG4gICAqXG4gICAqIE9yZGVyaW5nIG9mIHJlc29sdmVycyBpcyBtb3N0IHRvIGxlYXN0IHJlY2VudGx5IGFkZGVkXG4gICAqIFRoZSBmaXJzdCByZXNvbHZlciB0byBcImFjY2VwdFwiIHRoZSB1cmwgd2lucy5cbiAgICogQHBhcmFtIHtSZXNvbHZlcn0gcmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZC5cbiAgICovXG4gIGFkZFJlc29sdmVyOiBmdW5jdGlvbihyZXNvbHZlcikge1xuICAgIHRoaXMucmVzb2x2ZXJzLnB1c2gocmVzb2x2ZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBwcm9taXNlIGZvciBhbiBhYnNvbHV0ZSB1cmxcbiAgICpcbiAgICogVXJsIHJlcXVlc3RzIGFyZSBkZWR1cGxpY2F0ZWQgYnkgdGhlIGxvYWRlciwgcmV0dXJuaW5nIHRoZSBzYW1lIFByb21pc2UgZm9yXG4gICAqIGlkZW50aWNhbCB1cmxzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgIFRoZSBhYnNvbHV0ZSB1cmwgdG8gcmVxdWVzdC5cbiAgICogQHJldHVybiB7UHJvbWlzZS48c3RyaW5nPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBVUkwuXG4gICAqL1xuICByZXF1ZXN0OiBmdW5jdGlvbih1cmkpIHtcbiAgICB2YXIgcHJvbWlzZTtcblxuICAgIGlmICghKHVyaSBpbiB0aGlzLnJlcXVlc3RzKSkge1xuICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTtcbiAgICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgdGhpcy5yZXF1ZXN0c1t1cmldID0gZGVmZXJyZWQ7XG5cbiAgICAgIC8vIGxvb3AgYmFja3dhcmRzIHRocm91Z2ggcmVzb2x2ZXJzIHVudGlsIG9uZSBcImFjY2VwdHNcIiB0aGUgcmVxdWVzdFxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucmVzb2x2ZXJzLmxlbmd0aCAtIDEsIHI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHIgPSB0aGlzLnJlc29sdmVyc1tpXTtcbiAgICAgICAgaWYgKHIuYWNjZXB0KHVyaSwgZGVmZXJyZWQpKSB7XG4gICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFoYW5kbGVkKSB7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdCgnbm8gcmVzb2x2ZXIgZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RzW3VyaV0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlTG9hZGVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG5mdW5jdGlvbiBnZXRGaWxlKGZpbGVQYXRoLCBkZWZlcnJlZCwgc2Vjb25kUGF0aCkge1xuICBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04JywgZnVuY3Rpb24oZXJyLCBjb250ZW50KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKHNlY29uZFBhdGgpIHtcbiAgICAgICAgZ2V0RmlsZShzZWNvbmRQYXRoLCBkZWZlcnJlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIGZpbmRpbmcgXCIgKyBmaWxlUGF0aCk7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKGNvbnRlbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBwYXRoYWAgaXMgYSBzaWJsaW5nIG9yIGF1bnQgb2YgYHBhdGhiYC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU2libGluZ09yQXVudChwYXRoYSwgcGF0aGIpIHtcbiAgdmFyIHBhcmVudCA9IHBhdGguZGlybmFtZShwYXRoYSk7XG4gIGlmIChwYXRoYi5pbmRleE9mKHBhdGhhKSA9PT0gLTEgJiYgcGF0aGIuaW5kZXhPZihwYXJlbnQpID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoYW5nZSBgbG9jYWxQYXRoYCBmcm9tIGEgc2libGluZyBvZiBgYmFzZVBhdGhgIHRvIGJlIGEgY2hpbGQgb2ZcbiAqIGBiYXNlUGF0aGAgam9pbmVkIHdpdGggYHJlZGlyZWN0YC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RTaWJsaW5nKGJhc2VQYXRoLCBsb2NhbFBhdGgsIHJlZGlyZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBwYXRoLmRpcm5hbWUoYmFzZVBhdGgpO1xuICB2YXIgcmVkaXJlY3RlZCA9IHBhdGguam9pbihiYXNlUGF0aCwgcmVkaXJlY3QsIGxvY2FsUGF0aC5zbGljZShwYXJlbnQubGVuZ3RoKSk7XG4gIHJldHVybiByZWRpcmVjdGVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHJlcXVlc3RzIHZpYSB0aGUgZmlsZSBzeXN0ZW0uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnICBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmhvc3QgSG9zdG5hbWUgdG8gbWF0Y2ggZm9yIGFic29sdXRlIHVybHMuXG4gKiAgICAgTWF0Y2hlcyBcIi9cIiBieSBkZWZhdWx0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmJhc2VQYXRoIFByZWZpeCBkaXJlY3RvcnkgZm9yIGNvbXBvbmVudHMgaW4gdXJsLlxuICogICAgIERlZmF1bHRzIHRvIFwiL1wiLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yb290IEZpbGVzeXN0ZW0gcm9vdCB0byBzZWFyY2guIERlZmF1bHRzIHRvIHRoZVxuICogICAgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlZGlyZWN0IFdoZXJlIHRvIHJlZGlyZWN0IGxvb2t1cHMgdG8gc2libGluZ3MuXG4gKi9cbmZ1bmN0aW9uIEZTUmVzb2x2ZXIoY29uZmlnKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xufVxuRlNSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UodXJpKTtcbiAgICB2YXIgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdmFyIGJhc2UgPSB0aGlzLmNvbmZpZy5iYXNlUGF0aCAmJiBkZWNvZGVVUklDb21wb25lbnQodGhpcy5jb25maWcuYmFzZVBhdGgpO1xuICAgIHZhciByb290ID0gdGhpcy5jb25maWcucm9vdCAmJiBwYXRoLm5vcm1hbGl6ZSh0aGlzLmNvbmZpZy5yb290KTtcbiAgICB2YXIgcmVkaXJlY3QgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdDtcblxuICAgIHZhciBsb2NhbDtcblxuICAgIGlmICghcGFyc2VkLmhvc3RuYW1lIHx8IHBhcnNlZC5ob3N0bmFtZSA9PT0gaG9zdCkge1xuICAgICAgbG9jYWwgPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsKSB7XG4gICAgICAvLyB1bi1lc2NhcGUgSFRNTCBlc2NhcGVzXG4gICAgICBsb2NhbCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhbCk7XG5cbiAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5yZWxhdGl2ZShiYXNlLCBsb2NhbCk7XG4gICAgICB9XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBsb2NhbCA9IHBhdGguam9pbihyb290LCBsb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiYWNrdXA7XG4gICAgICBpZiAocmVkaXJlY3QgJiYgaXNTaWJsaW5nT3JBdW50KHJvb3QsIGxvY2FsKSkge1xuICAgICAgICBiYWNrdXAgPSByZWRpcmVjdFNpYmxpbmcocm9vdCwgbG9jYWwsIHJlZGlyZWN0KTtcbiAgICAgIH1cblxuICAgICAgZ2V0RmlsZShsb2NhbCwgZGVmZXJyZWQsIGJhY2t1cCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRlNSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSByZXNvbHZlciB0aGF0IHJlc29sdmVzIHRvIG51bGwgYW55IHVyaSBtYXRjaGluZyBjb25maWcuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnIFRoZSB1cmwgdG8gYGFjY2VwdGAuXG4gKi9cbmZ1bmN0aW9uIE5vb3BSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbk5vb3BSZXNvbHZlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICB1cmkgICAgICBUaGUgYWJzb2x1dGUgVVJJIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIHshRGVmZXJyZWR9IGRlZmVycmVkIFRoZSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgc2hvdWxkIGJlIHJlc29sdmVkIGlmXG4gICAqICAgICB0aGlzIHJlc29sdmVyIGhhbmRsZXMgdGhlIFVSSS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgVVJJIGlzIGhhbmRsZWQgYnkgdGhpcyByZXNvbHZlci5cbiAgICovXG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGlmICghdGhpcy5jb25maWcudGVzdCkge1xuICAgICAgaWYgKHVyaS5zZWFyY2godGhpcy5jb25maWcpID09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy50ZXN0KHVyaSkpIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmVycmVkLnJlc29sdmUoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5vb3BSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldEZpbGUodXJsLCBkZWZlcnJlZCwgY29uZmlnKSB7XG4gIC8qIGdsb2JhbCBYTUxIdHRwUmVxdWVzdDpmYWxzZSAqL1xuICB2YXIgeCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB4Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0dXMgPSB4LnN0YXR1cyB8fCAwO1xuICAgIGlmIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSh4LnJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KCd4aHIgc3RhdHVzOiAnICsgc3RhdHVzKTtcbiAgICB9XG4gIH07XG4gIHgub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWZlcnJlZC5yZWplY3QoZSk7XG4gIH07XG4gIHgub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgeC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICB9XG4gIHguc2VuZCgpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHJlc29sdmVyIHRoYXQgcmVxdWVzdHMgcmVzb3VyY2VzIG92ZXIgWEhSLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlc3BvbnNlVHlwZSBUeXBlIG9mIG9iamVjdCB0byBiZSByZXR1cm5lZCBieSB0aGVcbiAqICAgICBYSFIuIERlZmF1bHRzIHRvICd0ZXh0JywgYWNjZXB0cyAnZG9jdW1lbnQnLCAnYXJyYXlidWZmZXInLCBhbmQgJ2pzb24nLlxuICovXG5mdW5jdGlvbiBYSFJSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5YSFJSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGdldEZpbGUodXJpLCBkZWZlcnJlZCwgdGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUlJlc29sdmVyO1xuIixudWxsLCIvLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gd2hlbiB1c2VkIGluIG5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBsb2FkIHRoZSB1dGlsIG1vZHVsZSB3ZSBkZXBlbmQgb25cbi8vIHZlcnN1cyBsb2FkaW5nIHRoZSBidWlsdGluIHV0aWwgbW9kdWxlIGFzIGhhcHBlbnMgb3RoZXJ3aXNlXG4vLyB0aGlzIGlzIGEgYnVnIGluIG5vZGUgbW9kdWxlIGxvYWRpbmcgYXMgZmFyIGFzIEkgYW0gY29uY2VybmVkXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG5cbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gc3RhY2tTdGFydEZ1bmN0aW9uLm5hbWU7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gIGlmICh1dGlsLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG4gIGlmICh1dGlsLmlzTnVtYmVyKHZhbHVlKSAmJiAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHV0aWwuaXNGdW5jdGlvbih2YWx1ZSkgfHwgdXRpbC5pc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocykpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmFjdHVhbCwgcmVwbGFjZXIpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoc2VsZi5leHBlY3RlZCwgcmVwbGFjZXIpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGFjdHVhbCkgJiYgdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICBpZiAoYWN0dWFsLmxlbmd0aCAhPSBleHBlY3RlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYWN0dWFsW2ldICE9PSBleHBlY3RlZFtpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghdXRpbC5pc09iamVjdChhY3R1YWwpICYmICF1dGlsLmlzT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYikge1xuICBpZiAodXRpbC5pc051bGxPclVuZGVmaW5lZChhKSB8fCB1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKSxcbiAgICAgIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYik7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgIGtiID0gb2JqZWN0S2V5cyhiKSxcbiAgICAgIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHV0aWwuaXNTdHJpbmcoZXhwZWN0ZWQpKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGFjdHVhbCA9IGU7XG4gIH1cblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICghc2hvdWxkVGhyb3cgJiYgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MuYXBwbHkodGhpcywgW3RydWVdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzLmFwcGx5KHRoaXMsIFtmYWxzZV0uY29uY2F0KHBTbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHt0aHJvdyBlcnI7fX07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gcmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIGFycmF5IHdpdGggZGlyZWN0b3J5IG5hbWVzIHRoZXJlXG4vLyBtdXN0IGJlIG5vIHNsYXNoZXMsIGVtcHR5IGVsZW1lbnRzLCBvciBkZXZpY2UgbmFtZXMgKGM6XFwpIGluIHRoZSBhcnJheVxuLy8gKHNvIGFsc28gbm8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyAtIGl0IGRvZXMgbm90IGRpc3Rpbmd1aXNoXG4vLyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMpXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheShwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHtcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbnZhciBzcGxpdFBhdGhSZSA9XG4gICAgL14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC87XG52YXIgc3BsaXRQYXRoID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpLnNsaWNlKDEpO1xufTtcblxuLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZXNvbHZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNvbHZlZFBhdGggPSAnJyxcbiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIHZhciBwYXRoID0gKGkgPj0gMCkgPyBhcmd1bWVudHNbaV0gOiBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBhbmQgaW52YWxpZCBlbnRyaWVzXG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHJlc29sdmVkUGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFyZXNvbHZlZEFic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgcmV0dXJuICgocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHJlc29sdmVkUGF0aCkgfHwgJy4nO1xufTtcblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMubm9ybWFsaXplID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKSxcbiAgICAgIHRyYWlsaW5nU2xhc2ggPSBzdWJzdHIocGF0aCwgLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFpc0Fic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFwYXRoICYmICFpc0Fic29sdXRlKSB7XG4gICAgcGF0aCA9ICcuJztcbiAgfVxuICBpZiAocGF0aCAmJiB0cmFpbGluZ1NsYXNoKSB7XG4gICAgcGF0aCArPSAnLyc7XG4gIH1cblxuICByZXR1cm4gKGlzQWJzb2x1dGUgPyAnLycgOiAnJykgKyBwYXRoO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuam9pbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGF0aHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gZXhwb3J0cy5ub3JtYWxpemUoZmlsdGVyKHBhdGhzLCBmdW5jdGlvbihwLCBpbmRleCkge1xuICAgIGlmICh0eXBlb2YgcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9KS5qb2luKCcvJykpO1xufTtcblxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZWxhdGl2ZSA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gIGZyb20gPSBleHBvcnRzLnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO1xuICB0byA9IGV4cG9ydHMucmVzb2x2ZSh0bykuc3Vic3RyKDEpO1xuXG4gIGZ1bmN0aW9uIHRyaW0oYXJyKSB7XG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgICBmb3IgKDsgZW5kID49IDA7IGVuZC0tKSB7XG4gICAgICBpZiAoYXJyW2VuZF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xuICB9XG5cbiAgdmFyIGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgdmFyIHRvUGFydHMgPSB0cmltKHRvLnNwbGl0KCcvJykpO1xuXG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLCB0b1BhcnRzLmxlbmd0aCk7XG4gIHZhciBzYW1lUGFydHNMZW5ndGggPSBsZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZnJvbVBhcnRzW2ldICE9PSB0b1BhcnRzW2ldKSB7XG4gICAgICBzYW1lUGFydHNMZW5ndGggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG91dHB1dFBhcnRzID0gW107XG4gIGZvciAodmFyIGkgPSBzYW1lUGFydHNMZW5ndGg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXRQYXJ0cy5wdXNoKCcuLicpO1xuICB9XG5cbiAgb3V0cHV0UGFydHMgPSBvdXRwdXRQYXJ0cy5jb25jYXQodG9QYXJ0cy5zbGljZShzYW1lUGFydHNMZW5ndGgpKTtcblxuICByZXR1cm4gb3V0cHV0UGFydHMuam9pbignLycpO1xufTtcblxuZXhwb3J0cy5zZXAgPSAnLyc7XG5leHBvcnRzLmRlbGltaXRlciA9ICc6JztcblxuZXhwb3J0cy5kaXJuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpLFxuICAgICAgcm9vdCA9IHJlc3VsdFswXSxcbiAgICAgIGRpciA9IHJlc3VsdFsxXTtcblxuICBpZiAoIXJvb3QgJiYgIWRpcikge1xuICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlclxuICAgIHJldHVybiAnLic7XG4gIH1cblxuICBpZiAoZGlyKSB7XG4gICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiByb290ICsgZGlyO1xufTtcblxuXG5leHBvcnRzLmJhc2VuYW1lID0gZnVuY3Rpb24ocGF0aCwgZXh0KSB7XG4gIHZhciBmID0gc3BsaXRQYXRoKHBhdGgpWzJdO1xuICAvLyBUT0RPOiBtYWtlIHRoaXMgY29tcGFyaXNvbiBjYXNlLWluc2Vuc2l0aXZlIG9uIHdpbmRvd3M/XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59O1xuXG5cbmV4cG9ydHMuZXh0bmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aChwYXRoKVszXTtcbn07XG5cbmZ1bmN0aW9uIGZpbHRlciAoeHMsIGYpIHtcbiAgICBpZiAoeHMuZmlsdGVyKSByZXR1cm4geHMuZmlsdGVyKGYpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmKHhzW2ldLCBpLCB4cykpIHJlcy5wdXNoKHhzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgLSBuZWdhdGl2ZSBpbmRleCBkb24ndCB3b3JrIGluIElFOFxudmFyIHN1YnN0ciA9ICdhYicuc3Vic3RyKC0xKSA9PT0gJ2InXG4gICAgPyBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7IHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pIH1cbiAgICA6IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSBzdHIubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pO1xuICAgIH1cbjtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudFF1ZXVlO1xuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICBjdXJyZW50UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG59XG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAoIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cDovL210aHMuYmUvcHVueWNvZGUgdjEuMi40IGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW14gLX5dLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1xceDJFfFxcdTMwMDJ8XFx1RkYwRXxcXHVGRjYxL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0YXJyYXlbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHJldHVybiBtYXAoc3RyaW5nLnNwbGl0KHJlZ2V4U2VwYXJhdG9ycyksIGZuKS5qb2luKCcuJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgdG8gYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gVW5pY29kZS4gT25seSB0aGVcblx0ICogUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLiBpdCBkb2Vzbid0XG5cdCAqIG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvXG5cdCAqIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBQdW55Y29kZSBkb21haW4gbmFtZSB0byBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoZG9tYWluKSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihkb21haW4sIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIHRvIFB1bnljb2RlLiBPbmx5IHRoZVxuXHQgKiBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW4gQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSB0byBjb252ZXJ0LCBhcyBhIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMi40Jyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0eXBlZCxcbiAgICAgICAgdXRpbGl0eSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAganNkb2MsXG4gICAgICAgIGVzdXRpbHMsXG4gICAgICAgIGhhc093blByb3BlcnR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuICAgIHR5cGVkID0gcmVxdWlyZSgnLi90eXBlZCcpO1xuICAgIHV0aWxpdHkgPSByZXF1aXJlKCcuL3V0aWxpdHknKTtcblxuICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3QpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShpbmRleCwgbGFzdCk7XG4gICAgfVxuXG4gICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPj0gMHg2MSAgLyogJ2EnICovICYmIGNoIDw9IDB4N0EgIC8qICd6JyAqLykgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDQxICAvKiAnQScgKi8gJiYgY2ggPD0gMHg1QSAgLyogJ1onICovKSB8fFxuICAgICAgICAgICAgKGNoID49IDB4MzAgIC8qICcwJyAqLyAmJiBjaCA8PSAweDM5ICAvKiAnOScgKi8pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRsZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09ICdhcmd1bWVudCcgfHwgdGl0bGUgPT09ICdhcmcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8IHRpdGxlID09PSAncHJvcCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgaXNQcm9wZXJ0eSh0aXRsZSkgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJlcyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5lc3RlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwgaXNQYXJhbVRpdGxlKHRpdGxlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fFxuICAgICAgICAgICAgdGl0bGUgPT09ICdpbXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5cGVkZWYnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHkodGl0bGUpO1xuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNpbmcgJ2lzVHlwZVBhcmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBwaWNrIHdoZW4gYSB0eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkXG4gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8gJ3BhcnNlVHlwZSdcbiAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBlKHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUgPT09ICdtZW1iZXInIHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3MnIHx8IHRpdGxlID09PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxlID09PSAncHJvdGVjdGVkJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVud3JhcENvbW1lbnQoZG9jKSB7XG4gICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm1cbiAgICAgICAgLy8gICAvKipcbiAgICAgICAgLy8gICAgKiAuLi4uLi4uXG4gICAgICAgIC8vICAgICovXG4gICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqXG4gICAgICAgIHZhciBCRUZPUkVfU1RBUiA9IDAsXG4gICAgICAgICAgICBTVEFSID0gMSxcbiAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAyLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2g7XG5cbiAgICAgICAgZG9jID0gZG9jLnJlcGxhY2UoL15cXC9cXCpcXCo/LywgJycpLnJlcGxhY2UoL1xcKlxcLyQvLCAnJyk7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGVuID0gZG9jLmxlbmd0aDtcbiAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNoID0gZG9jLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEJFRk9SRV9TVEFSOlxuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEgIC8qICcqJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gU1RBUjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTVEFSOlxuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlID0gZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIEpTRG9jIFRhZyBQYXJzZXJcblxuICAgIChmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICAgICB2YXIgUnVsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICByZWNvdmVyYWJsZSxcbiAgICAgICAgICAgIHNsb3BweSxcbiAgICAgICAgICAgIHN0cmljdDtcblxuICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgICAgICAgICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkgJiYgIShjaCA9PT0gMHgwRCAgLyogJ1xccicgKi8gJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykpIHtcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzY2FuVGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAnJztcbiAgICAgICAgICAgIC8vIHdhc3RlICdAJ1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHtcbiAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4O1xuXG4gICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQobGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSAmJiAhKGNoID09PSAweDBEICAvKiAnXFxyJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChsYXN0ICsgMSkgPT09IDB4MEEgIC8qICdcXG4nICovKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3QgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZlIG5lc3QgYnJhY2UsIHN1Y2ggYXMsXG4gICAgICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfVxuICAgICAgICAvL1xuICAgICAgICAvLyB0aGVyZWZvcmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3aXRoIGJhbGFuY2luZyBicmFjZXMuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwgbGFzdCkge1xuICAgICAgICAgICAgdmFyIGNoLCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgLy8gc2VhcmNoICd7J1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHg3QiAgLyogJ3snICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVyblxuICAgICAgICAgICAgICAgICAgICBkaXJlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZFxuICAgICAgICAgICAgYnJhY2UgPSAxO1xuICAgICAgICAgICAgdHlwZSA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg3RCAgLyogJ30nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDdCICAvKiAneycgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBicmFjZXMgaXMgbm90IGJhbGFuY2VkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxpdHkudGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VQYXJhbVR5cGUodHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VUeXBlKHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIobGFzdCkge1xuICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7XG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxhc3QpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgKGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2Uoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSAnJywgdXNlQnJhY2tldHM7XG5cbiAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3QpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0cyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLykge1xuICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7XG5cbiAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0EgLyogJzonICovICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDJFICAvKiAnLicgKi8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgyMyAgLyogJyMnICovIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4N0UgIC8qICd+JyAqLykge1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1c2VCcmFja2V0cykge1xuICAgICAgICAgICAgICAgIC8vIGRvIHdlIGhhdmUgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzP1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0QgIC8qICc9JyAqLykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgdGhlICc9Jycgc3ltYm9sXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIGluIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDVEICAvKiAnXScgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxhc3QgIHx8IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg1RCAgLyogJ10nICovKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5ldmVyIGZvdW5kIGEgY2xvc2luZyAnXSdcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY29sbGVjdCB0aGUgbGFzdCAnXSdcbiAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBza2lwVG9UYWcoKSB7XG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDQwICAvKiAnQCcgKi8pIHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXRpbGl0eS5hc3NlcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDQwICAvKiAnQCcgKi8pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIHRoaXMuX3RhZyA9IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5saW5lTnVtYmVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xhc3QgPSAwO1xuICAgICAgICAgICAgLy8gc3BhY2UgdG8gc2F2ZSBzcGVjaWFsIGluZm9ybWF0aW9uIGZvciB0aXRsZSBwYXJzZXJzLlxuICAgICAgICAgICAgdGhpcy5fZXh0cmEgPSB7IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGRFcnJvcihlcnIsIC4uLilcbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5hZGRFcnJvciA9IGZ1bmN0aW9uIGFkZEVycm9yKGVycm9yVGV4dCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgICAgIG1zZyA9IGVycm9yVGV4dC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvJShcXGQpL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkuYXNzZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhZy5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWcuZXJyb3JzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90YWcuZXJyb3JzLnB1c2gobXNnKTtcbiAgICAgICAgICAgIHJldHVybiByZWNvdmVyYWJsZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIHR5cGUgcmVxdWlyZWQgdGl0bGVzXG4gICAgICAgICAgICBpZiAoaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBwYXJzZVR5cGUodGhpcy5fdGl0bGUsIHRoaXMuX2xhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RhZy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgdHlwZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FsbG93ZWRUeXBlKHRoaXMuX3RpdGxlKSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIHR5cGVzXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBwYXJzZVR5cGUodGhpcy5fdGl0bGUsIHRoaXMuX2xhc3QpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Gb3Igb3B0aW9uYWwgdHlwZXMsIGxldHMgZHJvcCB0aGUgdGhyb3duIGVycm9yIHdoZW4gd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGZpbGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLl9wYXJzZU5hbWVQYXRoID0gZnVuY3Rpb24gKG9wdGlvbmFsKSB7XG4gICAgICAgICAgICB2YXIgbmFtZTtcbiAgICAgICAgICAgIG5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIHRydWUpO1xuICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VOYW1lUGF0aChmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVQYXRoT3B0aW9uYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VOYW1lUGF0aCh0cnVlKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFzc2lnbiwgbmFtZTtcblxuICAgICAgICAgICAgLy8gcGFyYW0sIHByb3BlcnR5IHJlcXVpcmVzIG5hbWVcbiAgICAgICAgICAgIGlmIChpc0FsbG93ZWROYW1lKHRoaXMuX3RpdGxlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gcGFyc2VOYW1lKHRoaXMuX2xhc3QsIHNsb3BweSAmJiBpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpLCBpc0FsbG93ZWROZXN0ZWQodGhpcy5fdGl0bGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RhZy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQgYnV0IGludGVycHJldGVkIGFzIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIGFsc28gcG9zc2libGUgdGhpcyBpcyBhIHNsb3BweSBkZWNsYXJhdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpeGVkIGF0IHRoZSBlbmRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgdGhpcy5fdGFnLnR5cGUgJiYgdGhpcy5fdGFnLnR5cGUubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXh0cmEubmFtZSA9IHRoaXMuX3RhZy50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSB0aGlzLl90YWcudHlwZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl90YWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnWycgJiYgbmFtZS5jaGFyQXQobmFtZS5sZW5ndGggLSAxKSA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZTogQHBhcmFtIHtzdHJpbmd9IFtzb21lYm9keT1Kb2huIERvZV0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbiA9IG5hbWUuc3Vic3RyaW5nKDEsIG5hbWUubGVuZ3RoIC0gMSkuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NpZ25bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWdbJ2RlZmF1bHQnXSA9IGFzc2lnblsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gYXNzaWduWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIGFuIG9wdGlvbmFsIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YWcudHlwZSAmJiB0aGlzLl90YWcudHlwZS50eXBlICE9PSAnT3B0aW9uYWxUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uYWxUeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy5fdGFnLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlRGVzY3JpcHRpb24gPSBmdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoKC9eLVxccysvKS50ZXN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnN1YnN0cmluZygyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlS2luZCA9IGZ1bmN0aW9uIHBhcnNlS2luZCgpIHtcbiAgICAgICAgICAgIHZhciBraW5kLCBraW5kcztcbiAgICAgICAgICAgIGtpbmRzID0ge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2NvbnN0YW50JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZXZlbnQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdleHRlcm5hbCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmdW5jdGlvbic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21lbWJlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21peGluJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbW9kdWxlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbmFtZXNwYWNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAndHlwZWRlZic6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBraW5kID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB0aGlzLl90YWcua2luZCA9IGtpbmQ7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5KGtpbmRzLCBraW5kKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBraW5kIG5hbWUgXFwnJTBcXCcnLCBraW5kKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFjY2VzcyA9IGZ1bmN0aW9uIHBhcnNlQWNjZXNzKCkge1xuICAgICAgICAgICAgdmFyIGFjY2VzcztcbiAgICAgICAgICAgIGFjY2VzcyA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpO1xuICAgICAgICAgICAgdGhpcy5fdGFnLmFjY2VzcyA9IGFjY2VzcztcbiAgICAgICAgICAgIGlmIChhY2Nlc3MgIT09ICdwcml2YXRlJyAmJiBhY2Nlc3MgIT09ICdwcm90ZWN0ZWQnICYmIGFjY2VzcyAhPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgYWNjZXNzIG5hbWUgXFwnJTBcXCcnLCBhY2Nlc3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWF0aW9uID0gZnVuY3Rpb24gcGFyc2VWYXJpYXRpb24oKSB7XG4gICAgICAgICAgICB2YXIgdmFyaWF0aW9uLCB0ZXh0O1xuICAgICAgICAgICAgdGV4dCA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpO1xuICAgICAgICAgICAgdmFyaWF0aW9uID0gcGFyc2VGbG9hdCh0ZXh0LCAxMCk7XG4gICAgICAgICAgICB0aGlzLl90YWcudmFyaWF0aW9uID0gdmFyaWF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHZhcmlhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgdmFyaWF0aW9uIFxcJyUwXFwnJywgdGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuZW5zdXJlRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNob3VsZEJlRW1wdHkgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRCZUVtcHR5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdVbmtub3duIGNvbnRlbnQgXFwnJTBcXCcnLCBzaG91bGRCZUVtcHR5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lcGlsb2d1ZSA9IGZ1bmN0aW9uIGVwaWxvZ3VlKCkge1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuX3RhZy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIC8vIHVuLWZpeCBwb3RlbnRpYWxseSBzbG9wcHkgZGVjbGFyYXRpb25cbiAgICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpICYmICF0aGlzLl90YWcudHlwZSAmJiBkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5jaGFyQXQoMCkgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gdGhpcy5fZXh0cmEubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGlmICghc2xvcHB5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgUnVsZXMgPSB7XG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYWNjZXNzLmh0bWxcbiAgICAgICAgICAgICdhY2Nlc3MnOiBbJ3BhcnNlQWNjZXNzJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYWxpYXMuaHRtbFxuICAgICAgICAgICAgJ2FsaWFzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWF1Z21lbnRzLmh0bWxcbiAgICAgICAgICAgICdhdWdtZW50cyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sXG4gICAgICAgICAgICAnY29uc3RydWN0b3InOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtY29uc3RydWN0b3IuaHRtbFxuICAgICAgICAgICAgJ2NsYXNzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWV4dGVuZHMuaHRtbFxuICAgICAgICAgICAgJ2V4dGVuZHMnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZGVwcmVjYXRlZC5odG1sXG4gICAgICAgICAgICAnZGVwcmVjYXRlZCc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWdsb2JhbC5odG1sXG4gICAgICAgICAgICAnZ2xvYmFsJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1pbm5lci5odG1sXG4gICAgICAgICAgICAnaW5uZXInOiBbJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWluc3RhbmNlLmh0bWxcbiAgICAgICAgICAgICdpbnN0YW5jZSc6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mta2luZC5odG1sXG4gICAgICAgICAgICAna2luZCc6IFsncGFyc2VLaW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4ZXMuaHRtbFxuICAgICAgICAgICAgJ21peGVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1peGluLmh0bWxcbiAgICAgICAgICAgICdtaXhpbic6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1lbWJlci5odG1sXG4gICAgICAgICAgICAnbWVtYmVyJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1ldGhvZC5odG1sXG4gICAgICAgICAgICAnbWV0aG9kJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbW9kdWxlLmh0bWxcbiAgICAgICAgICAgICdtb2R1bGUnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWxcbiAgICAgICAgICAgICdmdW5jJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWxcbiAgICAgICAgICAgICdmdW5jdGlvbic6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1lbWJlci5odG1sXG4gICAgICAgICAgICAndmFyJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW5hbWUuaHRtbFxuICAgICAgICAgICAgJ25hbWUnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZXNwYWNlLmh0bWxcbiAgICAgICAgICAgICduYW1lc3BhY2UnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHJpdmF0ZS5odG1sXG4gICAgICAgICAgICAncHJpdmF0ZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcm90ZWN0ZWQuaHRtbFxuICAgICAgICAgICAgJ3Byb3RlY3RlZCc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wdWJsaWMuaHRtbFxuICAgICAgICAgICAgJ3B1YmxpYyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1yZWFkb25seS5odG1sXG4gICAgICAgICAgICAncmVhZG9ubHknOiBbJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlcXVpcmVzLmh0bWxcbiAgICAgICAgICAgICdyZXF1aXJlcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zaW5jZS5odG1sXG4gICAgICAgICAgICAnc2luY2UnOiBbJ3BhcnNlRGVzY3JpcHRpb24nXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdGF0aWMuaHRtbFxuICAgICAgICAgICAgJ3N0YXRpYyc6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mtc3VtbWFyeS5odG1sXG4gICAgICAgICAgICAnc3VtbWFyeSc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXRoaXMuaHRtbFxuICAgICAgICAgICAgJ3RoaXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdG9kby5odG1sXG4gICAgICAgICAgICAndG9kbyc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXR5cGVkZWYuaHRtbFxuICAgICAgICAgICAgJ3R5cGVkZWYnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12YXJpYXRpb24uaHRtbFxuICAgICAgICAgICAgJ3ZhcmlhdGlvbic6IFsncGFyc2VWYXJpYXRpb24nXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12ZXJzaW9uLmh0bWxcbiAgICAgICAgICAgICd2ZXJzaW9uJzogWydwYXJzZURlc2NyaXB0aW9uJ11cbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoKSB7XG4gICAgICAgICAgICB2YXIgaSwgaXosIHNlcXVlbmNlcywgbWV0aG9kO1xuXG4gICAgICAgICAgICAvLyBlbXB0eSB0aXRsZVxuICAgICAgICAgICAgaWYgKCF0aGlzLl90aXRsZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRpdGxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZWVrIHRvIGNvbnRlbnQgbGFzdCBpbmRleC5cbiAgICAgICAgICAgIHRoaXMuX2xhc3QgPSBzZWVrQ29udGVudCh0aGlzLl90aXRsZSk7XG5cbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShSdWxlcywgdGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgc2VxdWVuY2VzID0gUnVsZXNbdGhpcy5fdGl0bGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlcyA9IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZScsICdwYXJzZURlc2NyaXB0aW9uJywgJ2VwaWxvZ3VlJ107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc2VxdWVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBzZXF1ZW5jZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW21ldGhvZF0oKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlZWsgZ2xvYmFsIGluZGV4IHRvIGVuZCBvZiB0aGlzIHRhZy5cbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fbGFzdDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWc7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VUYWcob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRpdGxlLCBwYXJzZXI7XG5cbiAgICAgICAgICAgIC8vIHNraXAgdG8gdGFnXG4gICAgICAgICAgICBpZiAoIXNraXBUb1RhZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNjYW4gdGl0bGVcbiAgICAgICAgICAgIHRpdGxlID0gc2NhblRpdGxlKCk7XG5cbiAgICAgICAgICAgIC8vIGNvbnN0cnVjdCB0YWcgcGFyc2VyXG4gICAgICAgICAgICBwYXJzZXIgPSBuZXcgVGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFBhcnNlIEpTRG9jXG4gICAgICAgIC8vXG5cbiAgICAgICAgZnVuY3Rpb24gc2NhbkpTRG9jRGVzY3JpcHRpb24ocHJlc2VydmVXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAnJywgY2gsIGF0QWxsb3dlZDtcblxuICAgICAgICAgICAgYXRBbGxvd2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGF0QWxsb3dlZCAmJiBjaCA9PT0gMHg0MCAgLyogJ0AnICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0QWxsb3dlZCAmJiAhZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJlc2VydmVXaGl0ZXNwYWNlID8gZGVzY3JpcHRpb24gOiB0cmltKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlKGNvbW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciB0YWdzID0gW10sIHRhZywgZGVzY3JpcHRpb24sIGludGVyZXN0aW5nVGFncywgaSwgaXo7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy51bndyYXAgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnVud3JhcCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9IHVud3JhcENvbW1lbnQoY29tbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFycmF5IG9mIHJlbGV2YW50IHRhZ3NcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRhZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShvcHRpb25zLnRhZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVyZXN0aW5nVGFncyA9IHsgfTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBvcHRpb25zLnRhZ3MubGVuZ3RoOyBpIDwgaXo7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRhZ3NbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzW29wdGlvbnMudGFnc1tpXV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ0ludmFsaWQgXCJ0YWdzXCIgcGFyYW1ldGVyOiAnICsgb3B0aW9ucy50YWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignSW52YWxpZCBcInRhZ3NcIiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgICAgIGxpbmVOdW1iZXIgPSAwO1xuICAgICAgICAgICAgcmVjb3ZlcmFibGUgPSBvcHRpb25zLnJlY292ZXJhYmxlO1xuICAgICAgICAgICAgc2xvcHB5ID0gb3B0aW9ucy5zbG9wcHk7XG4gICAgICAgICAgICBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcblxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBzY2FuSlNEb2NEZXNjcmlwdGlvbihvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZSk7XG5cbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGFnID0gcGFyc2VUYWcob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaW50ZXJlc3RpbmdUYWdzIHx8IGludGVyZXN0aW5nVGFncy5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhZ3MucHVzaCh0YWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgdGFnczogdGFnc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U7XG4gICAgfShqc2RvYyA9IHt9KSk7XG5cbiAgICBleHBvcnRzLnZlcnNpb24gPSB1dGlsaXR5LlZFUlNJT047XG4gICAgZXhwb3J0cy5wYXJzZSA9IGpzZG9jLnBhcnNlO1xuICAgIGV4cG9ydHMucGFyc2VUeXBlID0gdHlwZWQucGFyc2VUeXBlO1xuICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSB0eXBlZC5wYXJzZVBhcmFtVHlwZTtcbiAgICBleHBvcnRzLnVud3JhcENvbW1lbnQgPSB1bndyYXBDb21tZW50O1xuICAgIGV4cG9ydHMuU3ludGF4ID0gc2hhbGxvd0NvcHkodHlwZWQuU3ludGF4KTtcbiAgICBleHBvcnRzLkVycm9yID0gdXRpbGl0eS5Eb2N0cmluZUVycm9yO1xuICAgIGV4cG9ydHMudHlwZSA9IHtcbiAgICAgICAgU3ludGF4OiBleHBvcnRzLlN5bnRheCxcbiAgICAgICAgcGFyc2VUeXBlOiB0eXBlZC5wYXJzZVR5cGUsXG4gICAgICAgIHBhcnNlUGFyYW1UeXBlOiB0eXBlZC5wYXJzZVBhcmFtVHlwZSxcbiAgICAgICAgc3RyaW5naWZ5OiB0eXBlZC5zdHJpbmdpZnlcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBEYW4gVGFvIDxkYW5pZWwudGFvQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBFaXNlbmJlcmcgPGFuZHJld0BlaXNlbmJlcmcuYXM+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuLy8gXCJ0eXBlZFwiLCB0aGUgVHlwZSBFeHByZXNzaW9uIFBhcnNlciBmb3IgZG9jdHJpbmUuXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgVG9rZW4sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbGVuZ3RoLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJldmlvdXMsXG4gICAgICAgIHRva2VuLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXN1dGlscyxcbiAgICAgICAgdXRpbGl0eTtcblxuICAgIGVzdXRpbHMgPSByZXF1aXJlKCdlc3V0aWxzJyk7XG4gICAgdXRpbGl0eSA9IHJlcXVpcmUoJy4vdXRpbGl0eScpO1xuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBOdWxsYWJsZUxpdGVyYWw6ICdOdWxsYWJsZUxpdGVyYWwnLFxuICAgICAgICBBbGxMaXRlcmFsOiAnQWxsTGl0ZXJhbCcsXG4gICAgICAgIE51bGxMaXRlcmFsOiAnTnVsbExpdGVyYWwnLFxuICAgICAgICBVbmRlZmluZWRMaXRlcmFsOiAnVW5kZWZpbmVkTGl0ZXJhbCcsXG4gICAgICAgIFZvaWRMaXRlcmFsOiAnVm9pZExpdGVyYWwnLFxuICAgICAgICBVbmlvblR5cGU6ICdVbmlvblR5cGUnLFxuICAgICAgICBBcnJheVR5cGU6ICdBcnJheVR5cGUnLFxuICAgICAgICBSZWNvcmRUeXBlOiAnUmVjb3JkVHlwZScsXG4gICAgICAgIEZpZWxkVHlwZTogJ0ZpZWxkVHlwZScsXG4gICAgICAgIEZ1bmN0aW9uVHlwZTogJ0Z1bmN0aW9uVHlwZScsXG4gICAgICAgIFBhcmFtZXRlclR5cGU6ICdQYXJhbWV0ZXJUeXBlJyxcbiAgICAgICAgUmVzdFR5cGU6ICdSZXN0VHlwZScsXG4gICAgICAgIE5vbk51bGxhYmxlVHlwZTogJ05vbk51bGxhYmxlVHlwZScsXG4gICAgICAgIE9wdGlvbmFsVHlwZTogJ09wdGlvbmFsVHlwZScsXG4gICAgICAgIE51bGxhYmxlVHlwZTogJ051bGxhYmxlVHlwZScsXG4gICAgICAgIE5hbWVFeHByZXNzaW9uOiAnTmFtZUV4cHJlc3Npb24nLFxuICAgICAgICBUeXBlQXBwbGljYXRpb246ICdUeXBlQXBwbGljYXRpb24nXG4gICAgfTtcblxuICAgIFRva2VuID0ge1xuICAgICAgICBJTExFR0FMOiAwLCAgICAvLyBJTExFR0FMXG4gICAgICAgIERPVF9MVDogMSwgICAgIC8vIC48XG4gICAgICAgIFJFU1Q6IDIsICAgICAgIC8vIC4uLlxuICAgICAgICBMVDogMywgICAgICAgICAvLyA8XG4gICAgICAgIEdUOiA0LCAgICAgICAgIC8vID5cbiAgICAgICAgTFBBUkVOOiA1LCAgICAgLy8gKFxuICAgICAgICBSUEFSRU46IDYsICAgICAvLyApXG4gICAgICAgIExCUkFDRTogNywgICAgIC8vIHtcbiAgICAgICAgUkJSQUNFOiA4LCAgICAgLy8gfVxuICAgICAgICBMQlJBQ0s6IDksICAgIC8vIFtcbiAgICAgICAgUkJSQUNLOiAxMCwgICAgLy8gXVxuICAgICAgICBDT01NQTogMTEsICAgICAvLyAsXG4gICAgICAgIENPTE9OOiAxMiwgICAgIC8vIDpcbiAgICAgICAgU1RBUjogMTMsICAgICAgLy8gKlxuICAgICAgICBQSVBFOiAxNCwgICAgICAvLyB8XG4gICAgICAgIFFVRVNUSU9OOiAxNSwgIC8vID9cbiAgICAgICAgQkFORzogMTYsICAgICAgLy8gIVxuICAgICAgICBFUVVBTDogMTcsICAgICAvLyA9XG4gICAgICAgIE5BTUU6IDE4LCAgICAgIC8vIG5hbWUgdG9rZW5cbiAgICAgICAgU1RSSU5HOiAxOSwgICAgLy8gc3RyaW5nXG4gICAgICAgIE5VTUJFUjogMjAsICAgIC8vIG51bWJlclxuICAgICAgICBFT0Y6IDIxXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGlzVHlwZU5hbWUoY2gpIHtcbiAgICAgICAgcmV0dXJuICc+PCgpe31bXSw6Knw/IT0nLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpID09PSAtMSAmJiAhZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkgJiYgIWVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQ29udGV4dC5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcHJldmlvdXMgPSB0aGlzLl9wcmV2aW91cztcbiAgICAgICAgaW5kZXggPSB0aGlzLl9pbmRleDtcbiAgICAgICAgdG9rZW4gPSB0aGlzLl90b2tlbjtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9O1xuXG4gICAgQ29udGV4dC5zYXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgICAgICB2YXIgY2ggPSBzb3VyY2UuY2hhckF0KGluZGV4KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDtcblxuICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVzdXRpbHMuY29kZS5pc0hleERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuU3RyaW5nKCkge1xuICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlOyAvL1RPRE8gcmV2aWV3IHJlbW92YWwgb2N0YWwgPSBmYWxzZVxuICAgICAgICBxdW90ZSA9IHNvdXJjZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICArK2luZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICAgICAgICBxdW90ZSA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcYic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcZic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcdic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFxcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVwcmVjYXRpbmcgdW51c2VkIGNvZGUuIFRPRE8gcmV2aWV3IHJlbW92YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RPRE8gUmV2aWV3IFJlbW92YWwgb2N0YWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2YoYWR2YW5jZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3V0aWxzLmNvZGUuaXNPY3RhbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdcXHInICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSAgLyogJ1xcbicgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCBxdW90ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBzdHI7XG4gICAgICAgIHJldHVybiBUb2tlbi5TVFJJTkc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nhbk51bWJlcigpIHtcbiAgICAgICAgdmFyIG51bWJlciwgY2g7XG5cbiAgICAgICAgbnVtYmVyID0gJyc7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChjaCAhPT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDc4ICAvKiAneCcgKi8gfHwgY2ggPT09IDB4NTggIC8qICdYJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IDB4XG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCAxNik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KG51bWJlciwgOCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09IDB4MkUgIC8qICcuJyAqLykge1xuICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gMHg2NSAgLyogJ2UnICovIHx8IGNoID09PSAweDQ1ICAvKiAnRScgKi8pIHtcbiAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG5cbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDJCICAvKiAnKycgKi8gfHwgY2ggPT09IDB4MkQgIC8qICctJyAqLykge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkpIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChudW1iZXIpO1xuICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc2NhblR5cGVOYW1lKCkge1xuICAgICAgICB2YXIgY2gsIGNoMjtcblxuICAgICAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGlzVHlwZU5hbWUoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MkUgIC8qICcuJyAqLykge1xuICAgICAgICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLklMTEVHQUw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoMiA9PT0gMHgzQyAgLyogJzwnICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVG9rZW4uTkFNRTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICB2YXIgY2g7XG5cbiAgICAgICAgcHJldmlvdXMgPSBpbmRleDtcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5FT0Y7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlIDB4Mjc6ICAvKiAnJycgKi9cbiAgICAgICAgY2FzZSAweDIyOiAgLyogJ1wiJyAqL1xuICAgICAgICAgICAgdG9rZW4gPSBzY2FuU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNBOiAgLyogJzonICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTE9OO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyQzogIC8qICcsJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT01NQTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4Mjg6ICAvKiAnKCcgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFBBUkVOO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyOTogIC8qICcpJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SUEFSRU47XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDVCOiAgLyogJ1snICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDSztcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4NUQ6ICAvKiAnXScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNLO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg3QjogIC8qICd7JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MQlJBQ0U7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDdEOiAgLyogJ30nICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJCUkFDRTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4MkU6ICAvKiAnLicgKi9cbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDNDICAvKiAnPCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJy4nXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgIC8vICc8J1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVF9MVDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovICYmIGluZGV4ICsgMiA8IGxlbmd0aCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDJFICAvKiAnLicgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJy4nXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgIC8vICcuJ1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SRVNUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLklMTEVHQUw7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNDOiAgLyogJzwnICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxUO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgzRTogIC8qICc+JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5HVDtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4MkE6ICAvKiAnKicgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uU1RBUjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4N0M6ICAvKiAnfCcgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUElQRTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0Y6ICAvKiAnPycgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUVVFU1RJT047XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDIxOiAgLyogJyEnICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkJBTkc7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNEOiAgLyogJz0nICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkVRVUFMO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIHRva2VuID0gc2Nhbk51bWJlcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHlwZSBzdHJpbmcgcGVybWl0cyBmb2xsb3dpbmcgY2FzZSxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBuYW1lc3BhY2UubW9kdWxlLk15Q2xhc3NcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGlzIHJlZHVjZWQgMSB0b2tlbiBUS19OQU1FXG4gICAgICAgICAgICB1dGlsaXR5LmFzc2VydChpc1R5cGVOYW1lKGNoKSk7XG4gICAgICAgICAgICB0b2tlbiA9IHNjYW5UeXBlTmFtZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3VtZSh0YXJnZXQsIHRleHQpIHtcbiAgICAgICAgdXRpbGl0eS5hc3NlcnQodG9rZW4gPT09IHRhcmdldCwgdGV4dCB8fCAnY29uc3VtZWQgdG9rZW4gbm90IG1hdGNoZWQnKTtcbiAgICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGVjdCh0YXJnZXQsIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRva2VuICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcihtZXNzYWdlIHx8ICd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIC8vIFVuaW9uVHlwZSA6PSAnKCcgVHlwZVVuaW9uTGlzdCAnKSdcbiAgICAvL1xuICAgIC8vIFR5cGVVbmlvbkxpc3QgOj1cbiAgICAvLyAgICAgPDxlbXB0eT4+XG4gICAgLy8gICB8IE5vbmVtcHR5VHlwZVVuaW9uTGlzdFxuICAgIC8vXG4gICAgLy8gTm9uZW1wdHlUeXBlVW5pb25MaXN0IDo9XG4gICAgLy8gICAgIFR5cGVFeHByZXNzaW9uXG4gICAgLy8gICB8IFR5cGVFeHByZXNzaW9uICd8JyBOb25lbXB0eVR5cGVVbmlvbkxpc3RcbiAgICBmdW5jdGlvbiBwYXJzZVVuaW9uVHlwZSgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzO1xuICAgICAgICBjb25zdW1lKFRva2VuLkxQQVJFTiwgJ1VuaW9uVHlwZSBzaG91bGQgc3RhcnQgd2l0aCAoJyk7XG4gICAgICAgIGVsZW1lbnRzID0gW107XG4gICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLlBJUEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uUlBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBlbmQgd2l0aCApJyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQXJyYXlUeXBlIDo9ICdbJyBFbGVtZW50VHlwZUxpc3QgJ10nXG4gICAgLy9cbiAgICAvLyBFbGVtZW50VHlwZUxpc3QgOj1cbiAgICAvLyAgICAgPDxlbXB0eT4+XG4gICAgLy8gIHwgVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgfCAnLi4uJyBUeXBlRXhwcmVzc2lvblxuICAgIC8vICB8IFR5cGVFeHByZXNzaW9uICcsJyBFbGVtZW50VHlwZUxpc3RcbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5VHlwZSgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzO1xuICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSywgJ0FycmF5VHlwZSBzaG91bGQgc3RhcnQgd2l0aCBbJyk7XG4gICAgICAgIGVsZW1lbnRzID0gW107XG4gICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1QpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJCUkFDSykge1xuICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDSyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlUeXBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VGaWVsZE5hbWUoKSB7XG4gICAgICAgIHZhciB2ID0gdmFsdWU7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTkFNRSB8fCB0b2tlbiA9PT0gVG9rZW4uU1RSSU5HKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTlVNQkVSKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLk5VTUJFUik7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHYpO1xuICAgICAgICB9XG5cbiAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgfVxuXG4gICAgLy8gRmllbGRUeXBlIDo9XG4gICAgLy8gICAgIEZpZWxkTmFtZVxuICAgIC8vICAgfCBGaWVsZE5hbWUgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgLy9cbiAgICAvLyBGaWVsZE5hbWUgOj1cbiAgICAvLyAgICAgTmFtZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgU3RyaW5nTGl0ZXJhbFxuICAgIC8vICAgfCBOdW1iZXJMaXRlcmFsXG4gICAgLy8gICB8IFJlc2VydmVkSWRlbnRpZmllclxuICAgIGZ1bmN0aW9uIHBhcnNlRmllbGRUeXBlKCkge1xuICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgIGtleSA9IHBhcnNlRmllbGROYW1lKCk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRmllbGRUeXBlLFxuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZVR5cGVFeHByZXNzaW9uKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gUmVjb3JkVHlwZSA6PSAneycgRmllbGRUeXBlTGlzdCAnfSdcbiAgICAvL1xuICAgIC8vIEZpZWxkVHlwZUxpc3QgOj1cbiAgICAvLyAgICAgPDxlbXB0eT4+XG4gICAgLy8gICB8IEZpZWxkVHlwZVxuICAgIC8vICAgfCBGaWVsZFR5cGUgJywnIEZpZWxkVHlwZUxpc3RcbiAgICBmdW5jdGlvbiBwYXJzZVJlY29yZFR5cGUoKSB7XG4gICAgICAgIHZhciBmaWVsZHM7XG5cbiAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0UsICdSZWNvcmRUeXBlIHNob3VsZCBzdGFydCB3aXRoIHsnKTtcbiAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09NTUEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZUZpZWxkVHlwZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNFKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZWNvcmRUeXBlLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBOYW1lRXhwcmVzc2lvbiA6PVxuICAgIC8vICAgIElkZW50aWZpZXJcbiAgICAvLyAgfCBUYWdJZGVudGlmaWVyICc6JyBJZGVudGlmaWVyXG4gICAgLy9cbiAgICAvLyBUYWcgaWRlbnRpZmllciBpcyBvbmUgb2YgXCJtb2R1bGVcIiwgXCJleHRlcm5hbFwiIG9yIFwiZXZlbnRcIlxuICAgIC8vIElkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgVG9rZW4uTkFNRSwgaW5jbHVkaW5nIGFueSBkb3RzLCBzb21ldGhpbmcgbGlrZVxuICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzc1xuICAgIGZ1bmN0aW9uIHBhcnNlTmFtZUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBuYW1lID0gdmFsdWU7XG4gICAgICAgIGV4cGVjdChUb2tlbi5OQU1FKTtcblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTE9OICYmIChcbiAgICAgICAgICAgICAgICBuYW1lID09PSAnbW9kdWxlJyB8fFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdleHRlcm5hbCcgfHxcbiAgICAgICAgICAgICAgICBuYW1lID09PSAnZXZlbnQnKSkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICBuYW1lICs9ICc6JyArIHZhbHVlO1xuICAgICAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUeXBlRXhwcmVzc2lvbkxpc3QgOj1cbiAgICAvLyAgICAgVG9wTGV2ZWxUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCBUb3BMZXZlbFR5cGVFeHByZXNzaW9uICcsJyBUeXBlRXhwcmVzc2lvbkxpc3RcbiAgICBmdW5jdGlvbiBwYXJzZVR5cGVFeHByZXNzaW9uTGlzdCgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTtcbiAgICAgICAgd2hpbGUgKHRva2VuID09PSBUb2tlbi5DT01NQSkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBUeXBlTmFtZSA6PVxuICAgIC8vICAgICBOYW1lRXhwcmVzc2lvblxuICAgIC8vICAgfCBOYW1lRXhwcmVzc2lvbiBUeXBlQXBwbGljYXRpb25cbiAgICAvL1xuICAgIC8vIFR5cGVBcHBsaWNhdGlvbiA6PVxuICAgIC8vICAgICAnLjwnIFR5cGVFeHByZXNzaW9uTGlzdCAnPidcbiAgICAvLyAgIHwgJzwnIFR5cGVFeHByZXNzaW9uTGlzdCAnPicgICAvLyB0aGlzIGlzIGV4dGVuc2lvbiBvZiBkb2N0cmluZVxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZU5hbWUoKSB7XG4gICAgICAgIHZhciBleHByLCBhcHBsaWNhdGlvbnM7XG5cbiAgICAgICAgZXhwciA9IHBhcnNlTmFtZUV4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5ET1RfTFQgfHwgdG9rZW4gPT09IFRva2VuLkxUKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbnMgPSBwYXJzZVR5cGVFeHByZXNzaW9uTGlzdCgpO1xuICAgICAgICAgICAgZXhwZWN0KFRva2VuLkdUKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uczogYXBwbGljYXRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIC8vIFJlc3VsdFR5cGUgOj1cbiAgICAvLyAgICAgPDxlbXB0eT4+XG4gICAgLy8gICB8ICc6JyB2b2lkXG4gICAgLy8gICB8ICc6JyBUeXBlRXhwcmVzc2lvblxuICAgIC8vXG4gICAgLy8gQk5GIGlzIGFib3ZlXG4gICAgLy8gYnV0LCB3ZSByZW1vdmUgPDxlbXB0eT4+IHBhdHRlcm4sIHNvIHRva2VuIGlzIGFsd2F5cyBUeXBlVG9rZW46OkNPTE9OXG4gICAgZnVuY3Rpb24gcGFyc2VSZXN1bHRUeXBlKCkge1xuICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OLCAnUmVzdWx0VHlwZSBzaG91bGQgc3RhcnQgd2l0aCA6Jyk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVm9pZExpdGVyYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlVHlwZUV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICAvLyBQYXJhbWV0ZXJzVHlwZSA6PVxuICAgIC8vICAgICBSZXN0UGFyYW1ldGVyVHlwZVxuICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVyc1R5cGVcbiAgICAvLyAgIHwgTm9uUmVzdFBhcmFtZXRlcnNUeXBlICcsJyBSZXN0UGFyYW1ldGVyVHlwZVxuICAgIC8vXG4gICAgLy8gUmVzdFBhcmFtZXRlclR5cGUgOj1cbiAgICAvLyAgICAgJy4uLidcbiAgICAvLyAgICAgJy4uLicgSWRlbnRpZmllclxuICAgIC8vXG4gICAgLy8gTm9uUmVzdFBhcmFtZXRlcnNUeXBlIDo9XG4gICAgLy8gICAgIFBhcmFtZXRlclR5cGUgJywnIE5vblJlc3RQYXJhbWV0ZXJzVHlwZVxuICAgIC8vICAgfCBQYXJhbWV0ZXJUeXBlXG4gICAgLy8gICB8IE9wdGlvbmFsUGFyYW1ldGVyc1R5cGVcbiAgICAvL1xuICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUgOj1cbiAgICAvLyAgICAgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlXG4gICAgLy8gICB8IE9wdGlvbmFsUGFyYW1ldGVyVHlwZSwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZVxuICAgIC8vXG4gICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJUeXBlIDo9IFBhcmFtZXRlclR5cGU9XG4gICAgLy9cbiAgICAvLyBQYXJhbWV0ZXJUeXBlIDo9IFR5cGVFeHByZXNzaW9uIHwgSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb25cbiAgICAvL1xuICAgIC8vIElkZW50aWZpZXIgaXMgXCJuZXdcIiBvciBcInRoaXNcIlxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyc1R5cGUoKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSBbXSwgb3B0aW9uYWxTZXF1ZW5jZSA9IGZhbHNlLCBleHByLCByZXN0ID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgICAgIC8vIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTtcbiAgICAgICAgICAgICAgICByZXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5OYW1lRXhwcmVzc2lvbiAmJiB0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHtcbiAgICAgICAgICAgICAgICAvLyBJZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04pO1xuICAgICAgICAgICAgICAgIGV4cHIgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5QYXJhbWV0ZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBleHByLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVRVUFMKSB7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9wdGlvbmFsVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxTZXF1ZW5jZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbFNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICAgICAgZXhwciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb25UeXBlIDo9ICdmdW5jdGlvbicgRnVuY3Rpb25TaWduYXR1cmVUeXBlXG4gICAgLy9cbiAgICAvLyBGdW5jdGlvblNpZ25hdHVyZVR5cGUgOj1cbiAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZVxuICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBUeXBlTmFtZSAnKScgUmVzdWx0VHlwZVxuICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBUeXBlTmFtZSAnLCcgUGFyYW1ldGVyc1R5cGUgJyknIFJlc3VsdFR5cGVcbiAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uVHlwZSgpIHtcbiAgICAgICAgdmFyIGlzTmV3LCB0aGlzQmluZGluZywgcGFyYW1zLCByZXN1bHQsIGZuVHlwZTtcbiAgICAgICAgdXRpbGl0eS5hc3NlcnQodG9rZW4gPT09IFRva2VuLk5BTUUgJiYgdmFsdWUgPT09ICdmdW5jdGlvbicsICdGdW5jdGlvblR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggXFwnZnVuY3Rpb25cXCcnKTtcbiAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcblxuICAgICAgICAvLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBpcyBub3QgaW1wbGVtZW50aW5nIFR5cGVQYXJhbWV0ZXJzLlxuICAgICAgICAvLyBTbyB3ZSBkbyBub3QuIGlmIHdlIGRvbid0IGdldCAnKCcsIHdlIHNlZSBpdCBhcyBlcnJvci5cbiAgICAgICAgZXhwZWN0KFRva2VuLkxQQVJFTik7XG5cbiAgICAgICAgaXNOZXcgPSBmYWxzZTtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIHRoaXNCaW5kaW5nID0gbnVsbDtcbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgIC8vIFBhcmFtZXRlcnNUeXBlIG9yICd0aGlzJ1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJ3RoaXMnIHx8IHZhbHVlID09PSAnbmV3JykpIHtcbiAgICAgICAgICAgICAgICAvLyAndGhpcycgb3IgJ25ldydcbiAgICAgICAgICAgICAgICAvLyAnbmV3JyBpcyBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGlzTmV3ID0gdmFsdWUgPT09ICduZXcnO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTE9OKTtcbiAgICAgICAgICAgICAgICB0aGlzQmluZGluZyA9IHBhcnNlVHlwZU5hbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09NTUEpO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoVG9rZW4uUlBBUkVOKTtcblxuICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTE9OKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJlc3VsdFR5cGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuVHlwZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvblR5cGUsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzQmluZGluZykge1xuICAgICAgICAgICAgLy8gYXZvaWQgYWRkaW5nIG51bGwgJ25ldycgYW5kICd0aGlzJyBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBmblR5cGVbJ3RoaXMnXSA9IHRoaXNCaW5kaW5nO1xuICAgICAgICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgICAgICAgICAgZm5UeXBlWyduZXcnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuVHlwZTtcbiAgICB9XG5cbiAgICAvLyBCYXNpY1R5cGVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgICcqJ1xuICAgIC8vICAgfCAnbnVsbCdcbiAgICAvLyAgIHwgJ3VuZGVmaW5lZCdcbiAgICAvLyAgIHwgVHlwZU5hbWVcbiAgICAvLyAgIHwgRnVuY3Rpb25UeXBlXG4gICAgLy8gICB8IFVuaW9uVHlwZVxuICAgIC8vICAgfCBSZWNvcmRUeXBlXG4gICAgLy8gICB8IEFycmF5VHlwZVxuICAgIGZ1bmN0aW9uIHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGNvbnRleHQ7XG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TVEFSOlxuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5TVEFSKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFsbExpdGVyYWxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSBUb2tlbi5MUEFSRU46XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmlvblR5cGUoKTtcblxuICAgICAgICBjYXNlIFRva2VuLkxCUkFDSzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5VHlwZSgpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uTEJSQUNFOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkVHlwZSgpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uTkFNRTpcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbExpdGVyYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSBDb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uVHlwZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlTmFtZSgpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFR5cGVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgIEJhc2ljVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgJz8nIEJhc2ljVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgJyEnIEJhc2ljVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnPydcbiAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnISdcbiAgICAvLyAgIHwgJz8nXG4gICAgLy8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJ1tdJ1xuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb24oKSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUVVFU1RJT04pIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUVVFU1RJT04pO1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSB8fCB0b2tlbiA9PT0gVG9rZW4uRVFVQUwgfHwgdG9rZW4gPT09IFRva2VuLlJCUkFDRSB8fFxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUlBBUkVOIHx8IHRva2VuID09PSBUb2tlbi5QSVBFIHx8IHRva2VuID09PSBUb2tlbi5FT0YgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJCUkFDSyB8fCB0b2tlbiA9PT0gVG9rZW4uR1QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVMaXRlcmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwciA9IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5MQlJBQ0spIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLKTtcbiAgICAgICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0ssICdleHBlY3RlZCBhbiBhcnJheS1zdHlsZSB0eXBlIGRlY2xhcmF0aW9uICgnICsgdmFsdWUgKyAnW10pJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UeXBlQXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTmFtZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBcnJheSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uczogW2V4cHJdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbiA6PVxuICAgIC8vICAgICAgVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgICB8IFR5cGVVbmlvbkxpc3RcbiAgICAvL1xuICAgIC8vIFRoaXMgcnVsZSBpcyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBleHRlbnNpb24sIG5vdCBFUzRcbiAgICAvLyBsaWtlLFxuICAgIC8vICAgeyBudW1iZXIgfCBzdHJpbmcgfVxuICAgIC8vIElmIHN0cmljdCB0byBFUzQsIHdlIHNob3VsZCB3cml0ZSBpdCBhc1xuICAgIC8vICAgeyAobnVtYmVyfHN0cmluZykgfVxuICAgIGZ1bmN0aW9uIHBhcnNlVG9wKCkge1xuICAgICAgICB2YXIgZXhwciwgZWxlbWVudHM7XG5cbiAgICAgICAgZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5QSVBFKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzID0gWyBleHByIF07XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uUElQRSk7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24oKSk7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUElQRSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuaW9uVHlwZSxcbiAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50c1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVG9wUGFyYW1UeXBlKCkge1xuICAgICAgICB2YXIgZXhwcjtcblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1QpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZVRvcCgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVR5cGUoc3JjLCBvcHQpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHByZXZpb3VzID0gMDtcblxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVRvcCgpO1xuXG4gICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1UeXBlKHNyYywgb3B0KSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIHNvdXJjZSA9IHNyYztcbiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBwcmV2aW91cyA9IDA7XG5cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBleHByID0gcGFyc2VUb3BQYXJhbVR5cGUoKTtcblxuICAgICAgICBpZiAob3B0ICYmIG9wdC5taWRzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgICAgICAgICBpbmRleDogcHJldmlvdXNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCdub3QgcmVhY2ggdG8gRU9GJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdpZnlJbXBsKG5vZGUsIGNvbXBhY3QsIHRvcExldmVsKSB7XG4gICAgICAgIHZhciByZXN1bHQsIGksIGl6O1xuXG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgU3ludGF4Lk51bGxhYmxlTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICc/JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LkFsbExpdGVyYWw6XG4gICAgICAgICAgICByZXN1bHQgPSAnKic7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5OdWxsTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICdudWxsJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlVuZGVmaW5lZExpdGVyYWw6XG4gICAgICAgICAgICByZXN1bHQgPSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlZvaWRMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ3ZvaWQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVW5pb25UeXBlOlxuICAgICAgICAgICAgaWYgKCF0b3BMZXZlbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcoJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LkFycmF5VHlwZTpcbiAgICAgICAgICAgIHJlc3VsdCA9ICdbJztcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJ10nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguUmVjb3JkVHlwZTpcbiAgICAgICAgICAgIHJlc3VsdCA9ICd7JztcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5maWVsZHMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZmllbGRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnfSc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5GaWVsZFR5cGU6XG4gICAgICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUua2V5ICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS52YWx1ZSwgY29tcGFjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUua2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25UeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFjdCA/ICdmdW5jdGlvbignIDogJ2Z1bmN0aW9uICgnO1xuXG4gICAgICAgICAgICBpZiAobm9kZVsndGhpcyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVbJ25ldyddKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICduZXc6JyA6ICduZXc6ICcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICd0aGlzOicgOiAndGhpczogJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZVsndGhpcyddLCBjb21wYWN0KTtcblxuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLnBhcmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5wYXJhbXNbaV0sIGNvbXBhY3QpO1xuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgKz0gJyknO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5yZXN1bHQsIGNvbXBhY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguUGFyYW1ldGVyVHlwZTpcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUubmFtZSArIChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5SZXN0VHlwZTpcbiAgICAgICAgICAgIHJlc3VsdCA9ICcuLi4nO1xuICAgICAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5Ob25OdWxsYWJsZVR5cGU6XG4gICAgICAgICAgICBpZiAobm9kZS5wcmVmaXgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnIScgKyBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICchJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk9wdGlvbmFsVHlwZTpcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICc9JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk51bGxhYmxlVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICc/JyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJz8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguTmFtZUV4cHJlc3Npb246XG4gICAgICAgICAgICByZXN1bHQgPSBub2RlLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5UeXBlQXBwbGljYXRpb246XG4gICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnLjwnO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmFwcGxpY2F0aW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5hcHBsaWNhdGlvbnNbaV0sIGNvbXBhY3QpO1xuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICc+JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ1Vua25vd24gdHlwZSAnICsgbm9kZS50eXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlJbXBsKG5vZGUsIG9wdGlvbnMuY29tcGFjdCwgb3B0aW9ucy50b3BMZXZlbCk7XG4gICAgfVxuXG4gICAgZXhwb3J0cy5wYXJzZVR5cGUgPSBwYXJzZVR5cGU7XG4gICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHBhcnNlUGFyYW1UeXBlO1xuICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgVkVSU0lPTjtcblxuICAgIFZFUlNJT04gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuICAgIGV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICBmdW5jdGlvbiBEb2N0cmluZUVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0RvY3RyaW5lRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBNaWRkbGUgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgIE1pZGRsZS5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBuZXcgTWlkZGxlKCk7XG4gICAgfSgpKTtcbiAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvY3RyaW5lRXJyb3I7XG4gICAgZXhwb3J0cy5Eb2N0cmluZUVycm9yID0gRG9jdHJpbmVFcnJvcjtcblxuICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRG9jdHJpbmVFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgZXhwb3J0cy50aHJvd0Vycm9yID0gdGhyb3dFcnJvcjtcblxuICAgIGV4cG9ydHMuYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG59KCkpO1xuXG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICdBUyBJUydcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBpc0V4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyYXlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0Z1bmN0aW9uRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgICAgICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgICAgICAgY2FzZSAnTG9naWNhbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdOZXdFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ09iamVjdEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnU2VxdWVuY2VFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RoaXNFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1VuYXJ5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdVcGRhdGVFeHByZXNzaW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJdGVyYXRpb25TdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRG9XaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdCbG9ja1N0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdCcmVha1N0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdDb250aW51ZVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdEZWJ1Z2dlclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0VtcHR5U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0V4cHJlc3Npb25TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0lmU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsZWRTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnUmV0dXJuU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1N3aXRjaFN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdUaHJvd1N0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdUcnlTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdXaXRoU3RhdGVtZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTb3VyY2VFbGVtZW50KG5vZGUpIHtcbiAgICAgIHJldHVybiBpc1N0YXRlbWVudChub2RlKSB8fCBub2RlICE9IG51bGwgJiYgbm9kZS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhaWxpbmdTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlICdJZlN0YXRlbWVudCc6XG4gICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmFsdGVybmF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlLmNvbnNlcXVlbnQ7XG5cbiAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdXaXRoU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHJldHVybiBub2RlLmJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQcm9ibGVtYXRpY0lmU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ0lmU3RhdGVtZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IG5vZGUuY29uc2VxdWVudDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmFsdGVybmF0ZSA9PSBudWxsKSAge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50ID0gdHJhaWxpbmdTdGF0ZW1lbnQoY3VycmVudCk7XG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgaXNFeHByZXNzaW9uOiBpc0V4cHJlc3Npb24sXG4gICAgICAgIGlzU3RhdGVtZW50OiBpc1N0YXRlbWVudCxcbiAgICAgICAgaXNJdGVyYXRpb25TdGF0ZW1lbnQ6IGlzSXRlcmF0aW9uU3RhdGVtZW50LFxuICAgICAgICBpc1NvdXJjZUVsZW1lbnQ6IGlzU291cmNlRWxlbWVudCxcbiAgICAgICAgaXNQcm9ibGVtYXRpY0lmU3RhdGVtZW50OiBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQsXG5cbiAgICAgICAgdHJhaWxpbmdTdGF0ZW1lbnQ6IHRyYWlsaW5nU3RhdGVtZW50XG4gICAgfTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTQgSXZhbiBOaWt1bGluIDxpZmFhYW5AZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFJlZ2V4LCBOT05fQVNDSUlfV0hJVEVTUEFDRVM7XG5cbiAgICAvLyBTZWUgYHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNgLlxuICAgIFJlZ2V4ID0ge1xuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N0ZcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0RcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjBcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5N1xcdUE2QTAtXFx1QTZFRlxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBODAtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXScpLFxuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdJylcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7ICAgLy8gMC4uOVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIGlzRGVjaW1hbERpZ2l0KGNoKSB8fCAgICAvLyAwLi45XG4gICAgICAgICAgICAoOTcgPD0gY2ggJiYgY2ggPD0gMTAyKSB8fCAgLy8gYS4uZlxuICAgICAgICAgICAgKDY1IDw9IGNoICYmIGNoIDw9IDcwKTsgICAgIC8vIEEuLkZcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1NSk7ICAgLy8gMC4uN1xuICAgIH1cblxuICAgIC8vIDcuMiBXaGl0ZSBTcGFjZVxuXG4gICAgTk9OX0FTQ0lJX1dISVRFU1BBQ0VTID0gW1xuICAgICAgICAweDE2ODAsIDB4MTgwRSxcbiAgICAgICAgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsXG4gICAgICAgIDB4MjAyRiwgMHgyMDVGLFxuICAgICAgICAweDMwMDAsXG4gICAgICAgIDB4RkVGRlxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyMCkgfHwgKGNoID09PSAweDA5KSB8fCAoY2ggPT09IDB4MEIpIHx8IChjaCA9PT0gMHgwQykgfHwgKGNoID09PSAweEEwKSB8fFxuICAgICAgICAgICAgKGNoID49IDB4MTY4MCAmJiBOT05fQVNDSUlfV0hJVEVTUEFDRVMuaW5kZXhPZihjaCkgPj0gMCk7XG4gICAgfVxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpO1xuICAgIH1cblxuICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVyc1xuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8ICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgICAgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8ICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDQ4ICYmIGNoIDw9IDU3KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMzYpIHx8IChjaCA9PT0gOTUpIHx8ICAgICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgICAgICAgICAgKGNoID09PSA5MikgfHwgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0RlY2ltYWxEaWdpdDogaXNEZWNpbWFsRGlnaXQsXG4gICAgICAgIGlzSGV4RGlnaXQ6IGlzSGV4RGlnaXQsXG4gICAgICAgIGlzT2N0YWxEaWdpdDogaXNPY3RhbERpZ2l0LFxuICAgICAgICBpc1doaXRlU3BhY2U6IGlzV2hpdGVTcGFjZSxcbiAgICAgICAgaXNMaW5lVGVybWluYXRvcjogaXNMaW5lVGVybWluYXRvcixcbiAgICAgICAgaXNJZGVudGlmaWVyU3RhcnQ6IGlzSWRlbnRpZmllclN0YXJ0LFxuICAgICAgICBpc0lkZW50aWZpZXJQYXJ0OiBpc0lkZW50aWZpZXJQYXJ0XG4gICAgfTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBjb2RlID0gcmVxdWlyZSgnLi9jb2RlJyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmRFUzYoaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzpcbiAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzpcbiAgICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOlxuICAgICAgICBjYXNlICdwdWJsaWMnOlxuICAgICAgICBjYXNlICdzdGF0aWMnOlxuICAgICAgICBjYXNlICdsZXQnOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0tleXdvcmRFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICAvLyB5aWVsZCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMga2V5d29yZCB1bmRlciBub24tc3RyaWN0IG1vZGUuXG4gICAgICAgIGlmICghc3RyaWN0ICYmIGlkID09PSAneWllbGQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0tleXdvcmRFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZEVTNihpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwgKGlkID09PSAndHJ5Jyk7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxzZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycpIHx8IChpZCA9PT0gJ2NhdGNoJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUnKSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzZXJ2ZWRXb3JkRVM1KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnbnVsbCcgfHwgaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJyB8fCBpc0tleXdvcmRFUzUoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmRFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdudWxsJyB8fCBpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnIHx8IGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0ZWRXb3JkKGlkKSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKGlkKSB7XG4gICAgICAgIHZhciBpLCBpeiwgY2g7XG5cbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2ggPSBpZC5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAoIWNvZGUuaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGNoID09PSA5MikgeyAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDEsIGl6ID0gaWQubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgY2ggPSBpZC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKCFjb2RlLmlzSWRlbnRpZmllclBhcnQoY2gpIHx8IGNoID09PSA5MikgeyAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyRVM1KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllck5hbWUoaWQpICYmICFpc1Jlc2VydmVkV29yZEVTNShpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyTmFtZShpZCkgJiYgIWlzUmVzZXJ2ZWRXb3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0tleXdvcmRFUzU6IGlzS2V5d29yZEVTNSxcbiAgICAgICAgaXNLZXl3b3JkRVM2OiBpc0tleXdvcmRFUzYsXG4gICAgICAgIGlzUmVzZXJ2ZWRXb3JkRVM1OiBpc1Jlc2VydmVkV29yZEVTNSxcbiAgICAgICAgaXNSZXNlcnZlZFdvcmRFUzY6IGlzUmVzZXJ2ZWRXb3JkRVM2LFxuICAgICAgICBpc1Jlc3RyaWN0ZWRXb3JkOiBpc1Jlc3RyaWN0ZWRXb3JkLFxuICAgICAgICBpc0lkZW50aWZpZXJOYW1lOiBpc0lkZW50aWZpZXJOYW1lLFxuICAgICAgICBpc0lkZW50aWZpZXJFUzU6IGlzSWRlbnRpZmllckVTNSxcbiAgICAgICAgaXNJZGVudGlmaWVyRVM2OiBpc0lkZW50aWZpZXJFUzZcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnRzLmFzdCA9IHJlcXVpcmUoJy4vYXN0Jyk7XG4gICAgZXhwb3J0cy5jb2RlID0gcmVxdWlyZSgnLi9jb2RlJyk7XG4gICAgZXhwb3J0cy5rZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZG9jdHJpbmVcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkpTRG9jIHBhcnNlclwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9kb2N0cmluZS5odG1sXCIsXG4gIFwibWFpblwiOiBcImxpYi9kb2N0cmluZS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIwLjYuNFwiLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC4xMC4wXCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7XG4gICAgXCJsaWJcIjogXCIuL2xpYlwiXG4gIH0sXG4gIFwiZmlsZXNcIjogW1xuICAgIFwibGliXCIsXG4gICAgXCJMSUNFTlNFLkJTRFwiLFxuICAgIFwiTElDRU5TRS5jbG9zdXJlLWNvbXBpbGVyXCIsXG4gICAgXCJMSUNFTlNFLmVzcHJpbWFcIixcbiAgICBcIlJFQURNRS5tZFwiXG4gIF0sXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIll1c3VrZSBTdXp1a2lcIixcbiAgICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvblwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9kb2N0cmluZS5naXRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjb3ZlcmFsbHNcIjogXCJeMi4xMS4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOC4xMFwiLFxuICAgIFwiZ3VscC1idW1wXCI6IFwiXjAuMS4xM1wiLFxuICAgIFwiZ3VscC1lc2xpbnRcIjogXCJeMC41LjBcIixcbiAgICBcImd1bHAtZmlsdGVyXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwLWdpdFwiOiBcIl4xLjAuMFwiLFxuICAgIFwiZ3VscC1pc3RhbmJ1bFwiOiBcIl4wLjYuMFwiLFxuICAgIFwiZ3VscC1qc2hpbnRcIjogXCJeMS45LjBcIixcbiAgICBcImd1bHAtbW9jaGFcIjogXCJeMi4wLjBcIixcbiAgICBcImd1bHAtdGFnLXZlcnNpb25cIjogXCJeMS4yLjFcIixcbiAgICBcImpzaGludC1zdHlsaXNoXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJzaG91bGRcIjogXCJeNS4wLjFcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9kb2N0cmluZS9yYXcvbWFzdGVyL0xJQ0VOU0UuQlNEXCJcbiAgICB9XG4gIF0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJ0ZXN0XCI6IFwiZ3VscFwiLFxuICAgIFwidW5pdC10ZXN0XCI6IFwiZ3VscCB0ZXN0XCIsXG4gICAgXCJsaW50XCI6IFwiZ3VscCBsaW50XCIsXG4gICAgXCJjb3ZlcmFsbHNcIjogXCJjYXQgLi9jb3ZlcmFnZS9sY292LmluZm8gfCBjb3ZlcmFsbHMgJiYgcm0gLXJmIC4vY292ZXJhZ2VcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJlc3V0aWxzXCI6IFwiXjEuMS42XCIsXG4gICAgXCJpc2FycmF5XCI6IFwiMC4wLjFcIlxuICB9LFxuICBcImdpdEhlYWRcIjogXCI0Zjc0Yzg2ZWE1Y2QwM2ZiZDk0N2M0ZGY5MWEyMTkyZDEzNzc5ZmI1XCIsXG4gIFwicmVhZG1lXCI6IFwiZG9jdHJpbmUgKFtkb2N0cmluZV0oaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9kb2N0cmluZSkpIGlzIEpTRG9jIHBhcnNlci5cXG5cXG5bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLnN2Zz9icmFuY2g9bWFzdGVyKV0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL0NvbnN0ZWxsYXRpb24vZG9jdHJpbmUpXFxuWyFbQ292ZXJhZ2UgU3RhdHVzXShodHRwczovL2ltZy5zaGllbGRzLmlvL2NvdmVyYWxscy9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLnN2ZyldKGh0dHBzOi8vY292ZXJhbGxzLmlvL3IvQ29uc3RlbGxhdGlvbi9kb2N0cmluZT9icmFuY2g9bWFzdGVyKVxcblshW0RlcGVuZGVuY3kgU3RhdHVzXShodHRwczovL2RhdmlkLWRtLm9yZy9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLnN2ZyldKGh0dHBzOi8vZGF2aWQtZG0ub3JnL0NvbnN0ZWxsYXRpb24vZG9jdHJpbmUpXFxuWyFbZGV2RGVwZW5kZW5jeSBTdGF0dXNdKGh0dHBzOi8vZGF2aWQtZG0ub3JnL0NvbnN0ZWxsYXRpb24vZG9jdHJpbmUvZGV2LXN0YXR1cy5zdmcpXShodHRwczovL2RhdmlkLWRtLm9yZy9Db25zdGVsbGF0aW9uL2RvY3RyaW5lI2luZm89ZGV2RGVwZW5kZW5jaWVzKVxcblshW0dpdHRlciBjaGF0XShodHRwczovL2JhZGdlcy5naXR0ZXIuaW0vQ29uc3RlbGxhdGlvbi9kb2N0cmluZS5wbmcpXShodHRwczovL2dpdHRlci5pbS9Db25zdGVsbGF0aW9uL2RvY3RyaW5lKVxcblxcbkl0IGlzIG5vdyB1c2VkIGJ5IGNvbnRlbnQgYXNzaXN0IHN5c3RlbSBvZiBbRWNsaXBzZSBPcmlvbl0oaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmlvbi8pIChbZGV0YWlsXShodHRwOi8vcGxhbmV0b3Jpb24ub3JnL25ld3MvMjAxMi8xMC9vcmlvbi0xLTAtcmVsZWFzZS8pKS4gQW5kIHVzZWQgYXMgSlNEb2MgdmFsaWRhdG9yIGluIFtFU0xpbnRdKGh0dHA6Ly9lc2xpbnQub3JnLykuXFxuXFxuRG9jdHJpbmUgY2FuIGJlIHVzZWQgaW4gYSB3ZWIgYnJvd3NlciB3aXRoIHVzaW5nIGJyb3dzZXJpZnkuXFxub3IgaW4gYSBOb2RlLmpzIGFwcGxpY2F0aW9uIHZpYSB0aGUgcGFja2FnZSBtYW5hZ2VyOlxcblxcbiAgICBucG0gaW5zdGFsbCBkb2N0cmluZVxcblxcbnNpbXBsZSBleGFtcGxlOlxcblxcbiAgICBkb2N0cmluZS5wYXJzZShcXG4gICAgICAgIFtcXG4gICAgICAgICAgICBcXFwiLyoqXFxcIixcXG4gICAgICAgICAgICBcXFwiICogVGhpcyBmdW5jdGlvbiBjb21tZW50IGlzIHBhcnNlZCBieSBkb2N0cmluZVxcXCIsXFxuICAgICAgICAgICAgXFxcIiAqIEBwYXJhbSB7e29rOlN0cmluZ319IHVzZXJOYW1lXFxcIixcXG4gICAgICAgICAgICBcXFwiKi9cXFwiXFxuICAgICAgICBdLmpvaW4oJ1xcXFxuJyksIHsgdW53cmFwOiB0cnVlIH0pO1xcblxcbmFuZCBnZXRzIGZvbGxvd2luZyBpbmZvcm1hdGlvblxcblxcbiAgICB7XFxuICAgICAgICBcXFwiZGVzY3JpcHRpb25cXFwiOiBcXFwiVGhpcyBmdW5jdGlvbiBjb21tZW50IGlzIHBhcnNlZCBieSBkb2N0cmluZVxcXCIsXFxuICAgICAgICBcXFwidGFnc1xcXCI6IFtcXG4gICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgIFxcXCJ0aXRsZVxcXCI6IFxcXCJwYXJhbVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJkZXNjcmlwdGlvblxcXCI6IG51bGwsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiUmVjb3JkVHlwZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiZmllbGRzXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiRmllbGRUeXBlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImtleVxcXCI6IFxcXCJva1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ2YWx1ZVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcIk5hbWVFeHByZXNzaW9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIlN0cmluZ1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwidXNlck5hbWVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgXVxcbiAgICB9XFxuXFxuc2VlIFtkZW1vIHBhZ2VdKGh0dHA6Ly9jb25zdGVsbGF0aW9uLmdpdGh1Yi5jb20vZG9jdHJpbmUvZGVtby9pbmRleC5odG1sKSBtb3JlIGRldGFpbC5cXG5cXG4jIyMgT3B0aW9uc1xcblxcbiMjIyMgZG9jdHJpbmUucGFyc2VcXG5XZSBjYW4gcGFzcyBvcHRpb25zIHRvIGBkb2N0cmluZS5wYXJzZShjb21tZW50LCBvcHRpb25zKWAuXFxuYGBganNcXG57XFxuICAgIHVud3JhcDogYm9vbGVhbiwgICAgICAgICAgLy8gZGVmYXVsdDogZmFsc2VcXG4gICAgdGFnczogWyBzdHJpbmcgXSB8IG51bGwsICAvLyBkZWZhdWx0OiBudWxsXFxuICAgIHJlY292ZXJhYmxlOiBib29sZWFuLCAgICAgLy8gZGVmYXVsdDogZmFsc2VcXG4gICAgc2xvcHB5OiBib29sZWFuLCAgICAgICAgICAvLyBkZWZhdWx0OiBmYWxzZVxcbiAgICBsaW5lTnVtYmVyczogYm9vbGVhbiAgICAgIC8vIGRlZmF1bHQ6IGZhbHNlXFxufVxcbmBgYFxcblxcbiMjIyMjIHVud3JhcFxcblxcbldoZW4gYHVud3JhcGAgaXMgYHRydWVgLCBkb2N0cmluZSBhdHRlbXB0IHRvIHVud3JhcCBjb21tZW50IHNwZWNpZmljIHN0cmluZyBmcm9tIGEgcHJvdmlkZWQgY29tbWVudCB0ZXh0LiAocmVtb3ZlcyBgLyoqYCwgYCovYCBhbmQgYCpgKVxcbkZvciBleGFtcGxlLCBgdW53cmFwYCB0cmFuc2Zvcm1zXFxuYGBgXFxuLyoqXFxuICogQHBhcmFtIHVzZVxcbiAqL1xcbmBgYFxcbnRvXFxuYGBgXFxuQHBhcmFtIHVzZVxcbmBgYFxcbklmIGEgcHJvdmlkZWQgY29tbWVudCBoYXMgdGhlc2UgY29tbWVudCBzcGVjaWZpYyBzdHJpbmdzLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoaXMgYHVud3JhcGAgb3B0aW9uIHRvIGB0cnVlYC5cXG5cXG4jIyMjIyB0YWdzXFxuXFxuV2hlbiBgdGFnc2AgYXJyYXkgaXMgc3BlY2lmaWVkLCBkb2N0cmluZSBvbmx5IHByb2R1Y2UgdGFncyB0aGF0IGlzIHNwZWNpZmllZCBpbiB0aGlzIGFycmF5LlxcbkZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgWyAncGFyYW0nIF1gLCBkb2N0cmluZSBvbmx5IHByb2R1Y2VzIGBwYXJhbWAgdGFncy5cXG5JZiBudWxsIGlzIHNwZWNpZmllZCwgZG9jdHJpbmUgcHJvZHVjZXMgYWxsIHRhZ3MgdGhhdCBkb2N0cmluZSBjYW4gcmVjb2duaXplLlxcblxcbiMjIyMjIHJlY292ZXJhYmxlXFxuXFxuV2hlbiBgcmVjb3ZlcmFibGVgIGlzIGB0cnVlYCwgZG9jdHJpbmUgYmVjb21lcyBgcmVjb3ZlcmFibGVgIC0gV2hlbiBmYWlsaW5nIHRvIHBhcnNlIGpzZG9jIGNvbW1lbnQsIGRvY3RyaW5lIHJlY292ZXJzIGl0cyBzdGF0ZSBhbmQgYXR0ZW1wdCB0byBjb250aW51ZSBwYXJzaW5nLlxcblxcbiMjIyMjIHNsb3BweVxcblxcbldoZW4gYHNsb3BweWAgaXMgYHRydWVgLFxcbmBgYFxcbkBwYXJhbSBTdHJpbmcgW2Zvb11cXG5gYGBcXG4ncyBgW2Zvb11gIGlzIGludGVycHJldGVkIGFzIGEgb3B0aW9uYWwgcGFyYW1ldGVyLCBub3QgaW50ZXJwcmV0ZWQgYXMgYSBuYW1lIG9mIHRoaXMgYEBwYXJhbWAuXFxuXFxuIyMjIyMgbGluZU51bWJlcnNcXG5cXG5XaGVuIGBsaW5lTnVtYmVyc2AgaXMgYHRydWVgLCBwYXJzZWQgdGFncyB3aWxsIGluY2x1ZGUgYSBgbGluZU51bWJlcmAgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUgbGluZSAocmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb21tZW50IGJsb2NrKSB3aGVyZSBlYWNoIHRhZyBpcyBsb2NhdGVkIGluIHRoZSBzb3VyY2UuIFNvLCBnaXZlbiB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6XFxuYGBgXFxuLyoqXFxuICogQHBhcmFtIHtTdHJpbmd9IGZvb1xcbiAqIEByZXR1cm4ge251bWJlcn1cXG4gKi9cXG5gYGBcXG5UaGUgYEBwYXJhbWAgdGFnIHdpbGwgaGF2ZSBgbGluZU51bWJlcjogMWAsIGFuZCB0aGUgYEByZXR1cm5gIHRhZyB3aWxsIGhhdmUgYGxpbmVOdW1iZXI6IDJgLlxcblxcblxcbiMjIyBMaWNlbnNlXFxuXFxuIyMjIyBkb2N0cmluZVxcblxcbkNvcHlyaWdodCAoQykgMjAxMiBbWXVzdWtlIFN1enVraV0oaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbilcXG4gKHR3aXR0ZXI6IFtAQ29uc3RlbGxhdGlvbl0oaHR0cDovL3R3aXR0ZXIuY29tL0NvbnN0ZWxsYXRpb24pKSBhbmQgb3RoZXIgY29udHJpYnV0b3JzLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxcblxcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XFxuICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcXG4gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cXG5cXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFxcXCJBUyBJU1xcXCJcXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXFxuSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcXG5BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXFxuRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XFxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXFxuT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcXG5USElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcblxcbiMjIyMgZXNwcmltYVxcblxcbnNvbWUgb2YgZnVuY3Rpb25zIGlzIGRlcml2ZWQgZnJvbSBlc3ByaW1hXFxuXFxuQ29weXJpZ2h0IChDKSAyMDEyLCAyMDExIFtBcml5YSBIaWRheWF0XShodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vYWJvdXQpXFxuICh0d2l0dGVyOiBbQGFyaXlhaGlkYXlhdF0oaHR0cDovL3R3aXR0ZXIuY29tL2FyaXlhaGlkYXlhdCkpIGFuZCBvdGhlciBjb250cmlidXRvcnMuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XFxuXFxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XFxuICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxcbiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXFxcIkFTIElTXFxcIlxcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxcbkFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcXG5ESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcXG5PTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxcblRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuXFxuXFxuIyMjIyBjbG9zdXJlLWNvbXBpbGVyXFxuXFxuc29tZSBvZiBleHRlbnNpb25zIGlzIGRlcml2ZWQgZnJvbSBjbG9zdXJlLWNvbXBpbGVyXFxuXFxuQXBhY2hlIExpY2Vuc2VcXG5WZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0XFxuaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL1xcblwiLFxuICBcInJlYWRtZUZpbGVuYW1lXCI6IFwiUkVBRE1FLm1kXCIsXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9kb2N0cmluZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImRvY3RyaW5lQDAuNi40XCIsXG4gIFwiX3NoYXN1bVwiOiBcIjViOGQ1MzQ0MTJiNDliODE3N2I1MjA4MmNkOTVkZjM4MGRlMzkwYWFcIixcbiAgXCJfZnJvbVwiOiBcImdpdDovL2dpdGh1Yi5jb20vUG9seW1lckxhYnMvZG9jdHJpbmUuZ2l0I21hc3RlclwiLFxuICBcIl9yZXNvbHZlZFwiOiBcImdpdDovL2dpdGh1Yi5jb20vUG9seW1lckxhYnMvZG9jdHJpbmUuZ2l0IzRmNzRjODZlYTVjZDAzZmJkOTQ3YzRkZjkxYTIxOTJkMTM3NzlmYjVcIixcbiAgXCJfZnJvbUdpdGh1YlwiOiB0cnVlXG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkge1xuICBpZiAoIWVsZW1lbnQuYXR0cnMpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIG4gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlbGVtZW50LmF0dHJzW2ldLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbikge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmZiBbZWxlbWVudF0gaGFzIHRoZSBhdHRyaWJ1dGUgW25hbWVdLCBgZmFsc2VgXG4gKiAgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGFzQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUpIHtcbiAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpICE9PSAtMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IFRoZSBzdHJpbmcgdmFsdWUgb2YgYXR0cmlidXRlIGBuYW1lYCwgb3IgYG51bGxgLlxuICovXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRyc1tpXS52YWx1ZSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYXR0cnMucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUpIHtcbiAgdmFyIGkgPSBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKTtcbiAgaWYgKGkgPiAtMSkge1xuICAgIGVsZW1lbnQuYXR0cnMuc3BsaWNlKGksIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1RhZ05hbWUobmFtZSkge1xuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUudGFnTmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG47XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGByZWdleC5tYXRjaCh0YWdOYW1lKWAgZmluZHMgYSBtYXRjaC5cbiAqXG4gKiBUaGlzIHdpbGwgdXNlIHRoZSBsb3dlcmNhc2VkIHRhZ05hbWUgZm9yIGNvbXBhcmlzb24uXG4gKiBcbiAqIEBwYXJhbSAge1JlZ0V4cH0gcmVnZXhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc01hdGNoaW5nVGFnTmFtZShyZWdleCkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZWdleC50ZXN0KG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYXR0ci5zcGxpdCgnICcpLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29sbGFwc2VUZXh0UmFuZ2UocGFyZW50LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgIHRleHQgKz0gZ2V0VGV4dENvbnRlbnQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuICB9XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShzdGFydCwgKGVuZCAtIHN0YXJ0KSArIDEpO1xuICBpZiAodGV4dCkge1xuICAgIHZhciB0biA9IG5ld1RleHROb2RlKHRleHQpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAwLCB0bik7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHRleHQgaW5zaWRlIGFuIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBlbGVtZW50Lm5vcm1hbGl6ZSgpYCBpbiB0aGUgYnJvd3NlclxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL25vcm1hbGl6ZVxuICovXG5mdW5jdGlvbiBub3JtYWxpemUobm9kZSkge1xuICBpZiAoIShpc0VsZW1lbnQobm9kZSkgfHwgaXNEb2N1bWVudChub2RlKSB8fCBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0ZXh0UmFuZ2VTdGFydCA9IC0xO1xuICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIG47IGkgPj0gMDsgaS0tKSB7XG4gICAgbiA9IG5vZGUuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoaXNUZXh0Tm9kZShuKSkge1xuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID09IC0xKSB7XG4gICAgICAgIHRleHRSYW5nZVN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIC8vIGNvbGxhcHNlIGxlYWRpbmcgdGV4dCBub2Rlc1xuICAgICAgICBjb2xsYXBzZVRleHRSYW5nZShub2RlLCAwLCB0ZXh0UmFuZ2VTdGFydCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlY3Vyc2VcbiAgICAgIG5vcm1hbGl6ZShuKTtcbiAgICAgIC8vIGNvbGxhcHNlIHRoZSByYW5nZSBhZnRlciB0aGlzIG5vZGVcbiAgICAgIGlmICh0ZXh0UmFuZ2VTdGFydCA+IC0xKSB7XG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIGkgKyAxLCB0ZXh0UmFuZ2VTdGFydCk7XG4gICAgICAgIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudGAgaW4gdGhlIGJyb3dzZXJcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnQobm9kZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLmRhdGE7XG4gIH1cbiAgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfVxuICB2YXIgc3VidHJlZSA9IG5vZGVXYWxrQWxsKG5vZGUsIGlzVGV4dE5vZGUpO1xuICByZXR1cm4gc3VidHJlZS5tYXAoZ2V0VGV4dENvbnRlbnQpLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgdGV4dCB2YWx1ZSBvZiBhIG5vZGUgb3IgZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGUudGV4dENvbnRlbnQgPSB2YWx1ZWAgaW4gdGhlIGJyb3dzZXJcbiAqL1xuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdmFsdWUpIHtcbiAgaWYgKGlzQ29tbWVudE5vZGUobm9kZSkpIHtcbiAgICBub2RlLmRhdGEgPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG5vZGUpKSB7XG4gICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhciB0biA9IG5ld1RleHROb2RlKHZhbHVlKTtcbiAgICB0bi5wYXJlbnROb2RlID0gbm9kZTtcbiAgICBub2RlLmNoaWxkTm9kZXMgPSBbdG5dO1xuICB9XG59XG5cbi8qKlxuICogTWF0Y2ggdGhlIHRleHQgaW5zaWRlIGFuIGVsZW1lbnQsIHRleHRub2RlLCBvciBjb21tZW50XG4gKlxuICogTm90ZTogbm9kZVdhbGtBbGwgd2l0aCBoYXNUZXh0VmFsdWUgbWF5IHJldHVybiBhbiB0ZXh0bm9kZSBhbmQgaXRzIHBhcmVudCBpZlxuICogdGhlIHRleHRub2RlIGlzIHRoZSBvbmx5IGNoaWxkIGluIHRoYXQgcGFyZW50LlxuICovXG5mdW5jdGlvbiBoYXNUZXh0VmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0VGV4dENvbnRlbnQobm9kZSkgPT09IHZhbHVlO1xuICB9O1xufVxuXG4vKipcbiAqIE9SIGFuIGFycmF5IG9mIHByZWRpY2F0ZXNcbiAqL1xuZnVuY3Rpb24gT1IoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJ1bGVzW2ldKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbi8qKlxuICogQU5EIGFuIGFycmF5IG9mIHByZWRpY2F0ZXNcbiAqL1xuZnVuY3Rpb24gQU5EKC8qIC4uLnJ1bGVzICovKSB7XG4gIHZhciBydWxlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBydWxlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBuZWdhdGUgYW4gaW5kaXZpZHVhbCBwcmVkaWNhdGUsIG9yIGEgZ3JvdXAgd2l0aCBBTkQgb3IgT1JcbiAqL1xuZnVuY3Rpb24gTk9UKHByZWRpY2F0ZUZuKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuICFwcmVkaWNhdGVGbihub2RlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJlZGljYXRlIHRoYXQgbWF0Y2hlcyBhbnkgbm9kZSB3aXRoIGEgcGFyZW50IG1hdGNoaW5nIGBwcmVkaWNhdGVGbmAuXG4gKi9cbmZ1bmN0aW9uIHBhcmVudE1hdGNoZXMocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHdoaWxlKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocHJlZGljYXRlRm4ocGFyZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHIoYXR0cikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGVJbmRleChub2RlLCBhdHRyKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNBdHRyVmFsdWUoYXR0ciwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5vZGUsIGF0dHIpID09PSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2RvY3VtZW50Jztcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudEZyYWdtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQtZnJhZ21lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gbm9kZS50YWdOYW1lO1xufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XG59XG5cbmZ1bmN0aW9uIGlzQ29tbWVudE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNjb21tZW50Jztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGBtYXBmbmAgdG8gYG5vZGVgIGFuZCB0aGUgdHJlZSBiZWxvdyBgbm9kZWAsIHJldHVybmluZyBhIGZsYXR0ZW5lZFxuICogbGlzdCBvZiByZXN1bHRzLlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRyZWVNYXAobm9kZSwgbWFwZm4pIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgbm9kZVdhbGsobm9kZSwgZnVuY3Rpb24obm9kZSl7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KG1hcGZuKG5vZGUpKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBXYWxrIHRoZSB0cmVlIGRvd24gZnJvbSBgbm9kZWAsIGFwcGx5aW5nIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIFJldHVybiB0aGUgZmlyc3Qgbm9kZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS5cbiAqXG4gKiBAcmV0dXJucyB7Tm9kZX0gYG51bGxgIGlmIG5vIG5vZGUgbWF0Y2hlcywgcGFyc2U1IG5vZGUgb2JqZWN0IGlmIGEgbm9kZVxuICogbWF0Y2hlc1xuICovXG5mdW5jdGlvbiBub2RlV2Fsayhub2RlLCBwcmVkaWNhdGUpIHtcbiAgaWYgKHByZWRpY2F0ZShub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIHZhciBtYXRjaCA9IG51bGw7XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0Y2ggPSBub2RlV2Fsayhub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaDtcbn1cblxuLyoqXG4gKiBXYWxrIHRoZSB0cmVlIGRvd24gZnJvbSBgbm9kZWAsIGFwcGx5aW5nIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEFsbCBub2RlcyBtYXRjaGluZyB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uIGZyb20gYG5vZGVgIHRvIGxlYXZlcyB3aWxsIGJlXG4gKiByZXR1cm5lZC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXlbTm9kZV19XG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrQWxsKG5vZGUsIHByZWRpY2F0ZSwgbWF0Y2hlcykge1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICBtYXRjaGVzID0gW107XG4gIH1cbiAgaWYgKHByZWRpY2F0ZShub2RlKSkge1xuICAgIG1hdGNoZXMucHVzaChub2RlKTtcbiAgfVxuICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVXYWxrQWxsKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIF9yZXZlcnNlTm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGVXYWxrQWxsYCwgYnV0IG9ubHkgcmV0dXJucyBub2RlcyB0aGF0IGFyZSBlaXRoZXIgXG4gKiBhbmNlc3RvcnMgb3IgZWFybGllciBjb3VzaW5zL3NpYmxpbmdzIGluIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBOb2RlcyBhcmUgcmV0dXJuZWQgaW4gcmV2ZXJzZSBkb2N1bWVudCBvcmRlciwgc3RhcnRpbmcgZnJvbSBgbm9kZWAuXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrQWxsUHJpb3Iobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIC8vIFNlYXJjaCBvdXIgZWFybGllciBzaWJsaW5ncyBhbmQgdGhlaXIgZGVzY2VuZGVudHMuXG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICB2YXIgc2libGluZ3MgPSBwYXJlbnQuY2hpbGROb2Rlcy5zbGljZSgwLCBpZHgpO1xuICAgIGZvciAodmFyIGkgPSBzaWJsaW5ncy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIF9yZXZlcnNlTm9kZVdhbGtBbGwoc2libGluZ3NbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICAgIG5vZGVXYWxrQWxsUHJpb3IocGFyZW50LCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGVXYWxrYCwgYnV0IG9ubHkgbWF0Y2hlcyBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICovXG5mdW5jdGlvbiBxdWVyeShub2RlLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGVsZW1lbnRQcmVkaWNhdGUgPSBBTkQoaXNFbGVtZW50LCBwcmVkaWNhdGUpO1xuICByZXR1cm4gbm9kZVdhbGsobm9kZSwgZWxlbWVudFByZWRpY2F0ZSk7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbRWxlbWVudF19XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5QWxsKG5vZGUsIHByZWRpY2F0ZSwgbWF0Y2hlcykge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsa0FsbChub2RlLCBlbGVtZW50UHJlZGljYXRlLCBtYXRjaGVzKTtcbn1cblxuZnVuY3Rpb24gbmV3VGV4dE5vZGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyN0ZXh0JyxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgcGFyZW50Tm9kZTogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBuZXdDb21tZW50Tm9kZShjb21tZW50KSB7XG4gIHJldHVybiB7XG4gICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXG4gICAgZGF0YTogY29tbWVudCxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0VsZW1lbnQodGFnTmFtZSwgbmFtZXNwYWNlKSB7XG4gIHJldHVybiB7XG4gICAgbm9kZU5hbWU6IHRhZ05hbWUsXG4gICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICBuYW1lc3BhY2VVUkk6IG5hbWVzcGFjZSB8fCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXG4gICAgYXR0cnM6IFtdLFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2Uob2xkTm9kZSwgbmV3Tm9kZSkge1xuICBpbnNlcnRCZWZvcmUob2xkTm9kZS5wYXJlbnROb2RlLCBvbGROb2RlLCBuZXdOb2RlKTtcbiAgcmVtb3ZlKG9sZE5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSB7XG4gICAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XG4gIH1cbiAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudCwgb2xkTm9kZSwgbmV3Tm9kZSkge1xuICByZW1vdmUobmV3Tm9kZSk7XG4gIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG9sZE5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAwLCBuZXdOb2RlKTtcbiAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBhcHBlbmQocGFyZW50LCBub2RlKSB7XG4gIHJlbW92ZShub2RlKTtcbiAgcGFyZW50LmNoaWxkTm9kZXMucHVzaChub2RlKTtcbiAgbm9kZS5wYXJlbnROb2RlID0gcGFyZW50O1xufVxuXG52YXIgcGFyc2U1ID0gcmVxdWlyZSgncGFyc2U1Jyk7XG5mdW5jdGlvbiBwYXJzZSh0ZXh0LCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgcGFyc2U1LlBhcnNlcihwYXJzZTUuVHJlZUFkYXB0ZXJzLmRlZmF1bHQsIG9wdGlvbnMpO1xuICByZXR1cm4gcGFyc2VyLnBhcnNlKHRleHQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZyYWdtZW50KHRleHQpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKCk7XG4gIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudCh0ZXh0KTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKGFzdCkge1xuICB2YXIgc2VyaWFsaXplciA9IG5ldyBwYXJzZTUuU2VyaWFsaXplcigpO1xuICByZXR1cm4gc2VyaWFsaXplci5zZXJpYWxpemUoYXN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEF0dHJpYnV0ZTogZ2V0QXR0cmlidXRlLFxuICBoYXNBdHRyaWJ1dGU6IGhhc0F0dHJpYnV0ZSxcbiAgc2V0QXR0cmlidXRlOiBzZXRBdHRyaWJ1dGUsXG4gIHJlbW92ZUF0dHJpYnV0ZTogcmVtb3ZlQXR0cmlidXRlLFxuICBnZXRUZXh0Q29udGVudDogZ2V0VGV4dENvbnRlbnQsXG4gIHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcbiAgcmVtb3ZlOiByZW1vdmUsXG4gIHJlcGxhY2U6IHJlcGxhY2UsXG4gIGFwcGVuZDogYXBwZW5kLFxuICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgbm9ybWFsaXplOiBub3JtYWxpemUsXG4gIGlzRG9jdW1lbnQ6IGlzRG9jdW1lbnQsXG4gIGlzRG9jdW1lbnRGcmFnbWVudDogaXNEb2N1bWVudEZyYWdtZW50LFxuICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgaXNUZXh0Tm9kZTogaXNUZXh0Tm9kZSxcbiAgaXNDb21tZW50Tm9kZTogaXNDb21tZW50Tm9kZSxcbiAgcXVlcnk6IHF1ZXJ5LFxuICBxdWVyeUFsbDogcXVlcnlBbGwsXG4gIG5vZGVXYWxrOiBub2RlV2FsayxcbiAgbm9kZVdhbGtBbGw6IG5vZGVXYWxrQWxsLFxuICBub2RlV2Fsa0FsbFByaW9yOiBub2RlV2Fsa0FsbFByaW9yLFxuICB0cmVlTWFwOiB0cmVlTWFwLFxuICBwcmVkaWNhdGVzOiB7XG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIGhhc0F0dHI6IGhhc0F0dHIsXG4gICAgaGFzQXR0clZhbHVlOiBoYXNBdHRyVmFsdWUsXG4gICAgaGFzTWF0Y2hpbmdUYWdOYW1lOiBoYXNNYXRjaGluZ1RhZ05hbWUsXG4gICAgaGFzVGFnTmFtZTogaGFzVGFnTmFtZSxcbiAgICBoYXNUZXh0VmFsdWU6IGhhc1RleHRWYWx1ZSxcbiAgICBBTkQ6IEFORCxcbiAgICBPUjogT1IsXG4gICAgTk9UOiBOT1QsXG4gICAgcGFyZW50TWF0Y2hlczogcGFyZW50TWF0Y2hlc1xuICB9LFxuICBjb25zdHJ1Y3RvcnM6IHtcbiAgICB0ZXh0OiBuZXdUZXh0Tm9kZSxcbiAgICBjb21tZW50OiBuZXdDb21tZW50Tm9kZSxcbiAgICBlbGVtZW50OiBuZXdFbGVtZW50XG4gIH0sXG4gIHBhcnNlOiBwYXJzZSxcbiAgcGFyc2VGcmFnbWVudDogcGFyc2VGcmFnbWVudCxcbiAgc2VyaWFsaXplOiBzZXJpYWxpemVcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpO1xyXG5leHBvcnRzLlNpbXBsZUFwaVBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3NpbXBsZV9hcGkvc2ltcGxlX2FwaV9wYXJzZXInKTtcclxuZXhwb3J0cy5UcmVlU2VyaWFsaXplciA9XHJcbmV4cG9ydHMuU2VyaWFsaXplciA9IHJlcXVpcmUoJy4vbGliL3NlcmlhbGl6YXRpb24vc2VyaWFsaXplcicpO1xyXG5leHBvcnRzLkpzRG9tUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvanNkb20vanNkb21fcGFyc2VyJyk7XHJcblxyXG5leHBvcnRzLlRyZWVBZGFwdGVycyA9IHtcclxuICAgIGRlZmF1bHQ6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxyXG4gICAgaHRtbHBhcnNlcjI6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvaHRtbHBhcnNlcjInKVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbi8vQ29uc3RcbnZhciBWQUxJRF9ET0NUWVBFX05BTUUgPSAnaHRtbCcsXG4gICAgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnLFxuICAgIFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAgICAgXCIrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy9lblwiLFxuICAgICAgICBcIi0vL2FkdmFzb2Z0IGx0ZC8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy9lblwiLFxuICAgICAgICBcIi0vL2FzLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjAvL2VuLy9cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL21ldHJpdXMvL2R0ZCBtZXRyaXVzIHByZXNlbnRhdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgdGFibGVzLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgdGFibGVzLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIHN0cmljdCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vZW5cIixcbiAgICAgICAgXCItLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy9lblwiLFxuICAgICAgICBcIi0vL3NxLy9kdGQgaHRtbCAyLjAgaG90bWV0YWwgKyBleHRlbnNpb25zLy9lblwiLFxuICAgICAgICBcIi0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzIDE5OTUtMDMtMjQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjJzIGRyYWZ0Ly9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCAxOTk2MDcxMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgdzMgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vZW5cIixcbiAgICAgICAgXCItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbC8vZW5cIlxuICAgIF0sXG4gICAgUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAgICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vJyxcbiAgICAgICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLydcbiAgICBdLFxuICAgIFFVSVJLU19NT0RFX1BVQkxJQ19JRFMgPSBbXG4gICAgICAgICctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLFxuICAgICAgICAnLS93M2MvZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC9lbicsXG4gICAgICAgICdodG1sJ1xuICAgIF07XG5cblxuLy9VdGlsc1xuZnVuY3Rpb24gZW5xdW90ZURvY3R5cGVJZChpZCkge1xuICAgIHZhciBxdW90ZSA9IGlkLmluZGV4T2YoJ1wiJykgIT09IC0xID8gJ1xcJycgOiAnXCInO1xuXG4gICAgcmV0dXJuIHF1b3RlICsgaWQgKyBxdW90ZTtcbn1cblxuXG4vL0FQSVxuZXhwb3J0cy5pc1F1aXJrcyA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICBpZiAobmFtZSAhPT0gVkFMSURfRE9DVFlQRV9OQU1FKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKSB7XG4gICAgICAgIHB1YmxpY0lkID0gcHVibGljSWQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoUVVJUktTX01PREVfUFVCTElDX0lEUy5pbmRleE9mKHB1YmxpY0lkKSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgdmFyIHByZWZpeGVzID0gUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTO1xuXG4gICAgICAgIGlmIChzeXN0ZW1JZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHByZWZpeGVzID0gcHJlZml4ZXMuY29uY2F0KFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwdWJsaWNJZC5pbmRleE9mKHByZWZpeGVzW2ldKSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplQ29udGVudCA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICB2YXIgc3RyID0gJyFET0NUWVBFICcgKyBuYW1lO1xuXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKVxuICAgICAgICBzdHIgKz0gJyBQVUJMSUMgJyArIGVucXVvdGVEb2N0eXBlSWQocHVibGljSWQpO1xuXG4gICAgZWxzZSBpZiAoc3lzdGVtSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFNZU1RFTSc7XG5cbiAgICBpZiAoc3lzdGVtSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnICcgKyBlbnF1b3RlRG9jdHlwZUlkKHN5c3RlbUlkKTtcblxuICAgIHJldHVybiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcclxuICAgIEhUTUwgPSByZXF1aXJlKCcuL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVMsXHJcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XHJcblxyXG5cclxuLy9NSU1FIHR5cGVzXHJcbnZhciBNSU1FX1RZUEVTID0ge1xyXG4gICAgVEVYVF9IVE1MOiAndGV4dC9odG1sJyxcclxuICAgIEFQUExJQ0FUSU9OX1hNTDogJ2FwcGxpY2F0aW9uL3hodG1sK3htbCdcclxufTtcclxuXHJcbi8vQXR0cmlidXRlc1xyXG52YXIgREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9udXJsJyxcclxuICAgIEFESlVTVEVEX0RFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvblVSTCcsXHJcbiAgICBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSB7XHJcbiAgICAgICAgJ2F0dHJpYnV0ZW5hbWUnOiAnYXR0cmlidXRlTmFtZScsXHJcbiAgICAgICAgJ2F0dHJpYnV0ZXR5cGUnOiAnYXR0cmlidXRlVHlwZScsXHJcbiAgICAgICAgJ2Jhc2VmcmVxdWVuY3knOiAnYmFzZUZyZXF1ZW5jeScsXHJcbiAgICAgICAgJ2Jhc2Vwcm9maWxlJzogJ2Jhc2VQcm9maWxlJyxcclxuICAgICAgICAnY2FsY21vZGUnOiAnY2FsY01vZGUnLFxyXG4gICAgICAgICdjbGlwcGF0aHVuaXRzJzogJ2NsaXBQYXRoVW5pdHMnLFxyXG4gICAgICAgICdjb250ZW50c2NyaXB0dHlwZSc6ICdjb250ZW50U2NyaXB0VHlwZScsXHJcbiAgICAgICAgJ2NvbnRlbnRzdHlsZXR5cGUnOiAnY29udGVudFN0eWxlVHlwZScsXHJcbiAgICAgICAgJ2RpZmZ1c2Vjb25zdGFudCc6ICdkaWZmdXNlQ29uc3RhbnQnLFxyXG4gICAgICAgICdlZGdlbW9kZSc6ICdlZGdlTW9kZScsXHJcbiAgICAgICAgJ2V4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQnOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXHJcbiAgICAgICAgJ2ZpbHRlcnJlcyc6ICdmaWx0ZXJSZXMnLFxyXG4gICAgICAgICdmaWx0ZXJ1bml0cyc6ICdmaWx0ZXJVbml0cycsXHJcbiAgICAgICAgJ2dseXBocmVmJzogJ2dseXBoUmVmJyxcclxuICAgICAgICAnZ3JhZGllbnR0cmFuc2Zvcm0nOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxyXG4gICAgICAgICdncmFkaWVudHVuaXRzJzogJ2dyYWRpZW50VW5pdHMnLFxyXG4gICAgICAgICdrZXJuZWxtYXRyaXgnOiAna2VybmVsTWF0cml4JyxcclxuICAgICAgICAna2VybmVsdW5pdGxlbmd0aCc6ICdrZXJuZWxVbml0TGVuZ3RoJyxcclxuICAgICAgICAna2V5cG9pbnRzJzogJ2tleVBvaW50cycsXHJcbiAgICAgICAgJ2tleXNwbGluZXMnOiAna2V5U3BsaW5lcycsXHJcbiAgICAgICAgJ2tleXRpbWVzJzogJ2tleVRpbWVzJyxcclxuICAgICAgICAnbGVuZ3RoYWRqdXN0JzogJ2xlbmd0aEFkanVzdCcsXHJcbiAgICAgICAgJ2xpbWl0aW5nY29uZWFuZ2xlJzogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcclxuICAgICAgICAnbWFya2VyaGVpZ2h0JzogJ21hcmtlckhlaWdodCcsXHJcbiAgICAgICAgJ21hcmtlcnVuaXRzJzogJ21hcmtlclVuaXRzJyxcclxuICAgICAgICAnbWFya2Vyd2lkdGgnOiAnbWFya2VyV2lkdGgnLFxyXG4gICAgICAgICdtYXNrY29udGVudHVuaXRzJzogJ21hc2tDb250ZW50VW5pdHMnLFxyXG4gICAgICAgICdtYXNrdW5pdHMnOiAnbWFza1VuaXRzJyxcclxuICAgICAgICAnbnVtb2N0YXZlcyc6ICdudW1PY3RhdmVzJyxcclxuICAgICAgICAncGF0aGxlbmd0aCc6ICdwYXRoTGVuZ3RoJyxcclxuICAgICAgICAncGF0dGVybmNvbnRlbnR1bml0cyc6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcclxuICAgICAgICAncGF0dGVybnRyYW5zZm9ybSc6ICdwYXR0ZXJuVHJhbnNmb3JtJyxcclxuICAgICAgICAncGF0dGVybnVuaXRzJzogJ3BhdHRlcm5Vbml0cycsXHJcbiAgICAgICAgJ3BvaW50c2F0eCc6ICdwb2ludHNBdFgnLFxyXG4gICAgICAgICdwb2ludHNhdHknOiAncG9pbnRzQXRZJyxcclxuICAgICAgICAncG9pbnRzYXR6JzogJ3BvaW50c0F0WicsXHJcbiAgICAgICAgJ3ByZXNlcnZlYWxwaGEnOiAncHJlc2VydmVBbHBoYScsXHJcbiAgICAgICAgJ3ByZXNlcnZlYXNwZWN0cmF0aW8nOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXHJcbiAgICAgICAgJ3ByaW1pdGl2ZXVuaXRzJzogJ3ByaW1pdGl2ZVVuaXRzJyxcclxuICAgICAgICAncmVmeCc6ICdyZWZYJyxcclxuICAgICAgICAncmVmeSc6ICdyZWZZJyxcclxuICAgICAgICAncmVwZWF0Y291bnQnOiAncmVwZWF0Q291bnQnLFxyXG4gICAgICAgICdyZXBlYXRkdXInOiAncmVwZWF0RHVyJyxcclxuICAgICAgICAncmVxdWlyZWRleHRlbnNpb25zJzogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXHJcbiAgICAgICAgJ3JlcXVpcmVkZmVhdHVyZXMnOiAncmVxdWlyZWRGZWF0dXJlcycsXHJcbiAgICAgICAgJ3NwZWN1bGFyY29uc3RhbnQnOiAnc3BlY3VsYXJDb25zdGFudCcsXHJcbiAgICAgICAgJ3NwZWN1bGFyZXhwb25lbnQnOiAnc3BlY3VsYXJFeHBvbmVudCcsXHJcbiAgICAgICAgJ3NwcmVhZG1ldGhvZCc6ICdzcHJlYWRNZXRob2QnLFxyXG4gICAgICAgICdzdGFydG9mZnNldCc6ICdzdGFydE9mZnNldCcsXHJcbiAgICAgICAgJ3N0ZGRldmlhdGlvbic6ICdzdGREZXZpYXRpb24nLFxyXG4gICAgICAgICdzdGl0Y2h0aWxlcyc6ICdzdGl0Y2hUaWxlcycsXHJcbiAgICAgICAgJ3N1cmZhY2VzY2FsZSc6ICdzdXJmYWNlU2NhbGUnLFxyXG4gICAgICAgICdzeXN0ZW1sYW5ndWFnZSc6ICdzeXN0ZW1MYW5ndWFnZScsXHJcbiAgICAgICAgJ3RhYmxldmFsdWVzJzogJ3RhYmxlVmFsdWVzJyxcclxuICAgICAgICAndGFyZ2V0eCc6ICd0YXJnZXRYJyxcclxuICAgICAgICAndGFyZ2V0eSc6ICd0YXJnZXRZJyxcclxuICAgICAgICAndGV4dGxlbmd0aCc6ICd0ZXh0TGVuZ3RoJyxcclxuICAgICAgICAndmlld2JveCc6ICd2aWV3Qm94JyxcclxuICAgICAgICAndmlld3RhcmdldCc6ICd2aWV3VGFyZ2V0JyxcclxuICAgICAgICAneGNoYW5uZWxzZWxlY3Rvcic6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcclxuICAgICAgICAneWNoYW5uZWxzZWxlY3Rvcic6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcclxuICAgICAgICAnem9vbWFuZHBhbic6ICd6b29tQW5kUGFuJ1xyXG4gICAgfSxcclxuICAgIFhNTF9BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAneGxpbms6YWN0dWF0ZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhY3R1YXRlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmFyY3JvbGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnYXJjcm9sZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpocmVmJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2hyZWYnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6cm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnNob3cnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnc2hvdycsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazp0aXRsZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0aXRsZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazp0eXBlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3R5cGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneG1sOmJhc2UnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2Jhc2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpsYW5nJzoge3ByZWZpeDogJ3htbCcsIG5hbWU6ICdsYW5nJywgbmFtZXNwYWNlOiBOUy5YTUx9LFxyXG4gICAgICAgICd4bWw6c3BhY2UnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ3NwYWNlJywgbmFtZXNwYWNlOiBOUy5YTUx9LFxyXG4gICAgICAgICd4bWxucyc6IHtwcmVmaXg6ICcnLCBuYW1lOiAneG1sbnMnLCBuYW1lc3BhY2U6IE5TLlhNTE5TfSxcclxuICAgICAgICAneG1sbnM6eGxpbmsnOiB7cHJlZml4OiAneG1sbnMnLCBuYW1lOiAneGxpbmsnLCBuYW1lc3BhY2U6IE5TLlhNTE5TfVxyXG5cclxuICAgIH07XHJcblxyXG4vL1NWRyB0YWcgbmFtZXMgYWRqdXN0bWVudCBtYXBcclxudmFyIFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAgPSB7XHJcbiAgICAnYWx0Z2x5cGgnOiAnYWx0R2x5cGgnLFxyXG4gICAgJ2FsdGdseXBoZGVmJzogJ2FsdEdseXBoRGVmJyxcclxuICAgICdhbHRnbHlwaGl0ZW0nOiAnYWx0R2x5cGhJdGVtJyxcclxuICAgICdhbmltYXRlY29sb3InOiAnYW5pbWF0ZUNvbG9yJyxcclxuICAgICdhbmltYXRlbW90aW9uJzogJ2FuaW1hdGVNb3Rpb24nLFxyXG4gICAgJ2FuaW1hdGV0cmFuc2Zvcm0nOiAnYW5pbWF0ZVRyYW5zZm9ybScsXHJcbiAgICAnY2xpcHBhdGgnOiAnY2xpcFBhdGgnLFxyXG4gICAgJ2ZlYmxlbmQnOiAnZmVCbGVuZCcsXHJcbiAgICAnZmVjb2xvcm1hdHJpeCc6ICdmZUNvbG9yTWF0cml4JyxcclxuICAgICdmZWNvbXBvbmVudHRyYW5zZmVyJzogJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxyXG4gICAgJ2ZlY29tcG9zaXRlJzogJ2ZlQ29tcG9zaXRlJyxcclxuICAgICdmZWNvbnZvbHZlbWF0cml4JzogJ2ZlQ29udm9sdmVNYXRyaXgnLFxyXG4gICAgJ2ZlZGlmZnVzZWxpZ2h0aW5nJzogJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcclxuICAgICdmZWRpc3BsYWNlbWVudG1hcCc6ICdmZURpc3BsYWNlbWVudE1hcCcsXHJcbiAgICAnZmVkaXN0YW50bGlnaHQnOiAnZmVEaXN0YW50TGlnaHQnLFxyXG4gICAgJ2ZlZmxvb2QnOiAnZmVGbG9vZCcsXHJcbiAgICAnZmVmdW5jYSc6ICdmZUZ1bmNBJyxcclxuICAgICdmZWZ1bmNiJzogJ2ZlRnVuY0InLFxyXG4gICAgJ2ZlZnVuY2cnOiAnZmVGdW5jRycsXHJcbiAgICAnZmVmdW5jcic6ICdmZUZ1bmNSJyxcclxuICAgICdmZWdhdXNzaWFuYmx1cic6ICdmZUdhdXNzaWFuQmx1cicsXHJcbiAgICAnZmVpbWFnZSc6ICdmZUltYWdlJyxcclxuICAgICdmZW1lcmdlJzogJ2ZlTWVyZ2UnLFxyXG4gICAgJ2ZlbWVyZ2Vub2RlJzogJ2ZlTWVyZ2VOb2RlJyxcclxuICAgICdmZW1vcnBob2xvZ3knOiAnZmVNb3JwaG9sb2d5JyxcclxuICAgICdmZW9mZnNldCc6ICdmZU9mZnNldCcsXHJcbiAgICAnZmVwb2ludGxpZ2h0JzogJ2ZlUG9pbnRMaWdodCcsXHJcbiAgICAnZmVzcGVjdWxhcmxpZ2h0aW5nJzogJ2ZlU3BlY3VsYXJMaWdodGluZycsXHJcbiAgICAnZmVzcG90bGlnaHQnOiAnZmVTcG90TGlnaHQnLFxyXG4gICAgJ2ZldGlsZSc6ICdmZVRpbGUnLFxyXG4gICAgJ2ZldHVyYnVsZW5jZSc6ICdmZVR1cmJ1bGVuY2UnLFxyXG4gICAgJ2ZvcmVpZ25vYmplY3QnOiAnZm9yZWlnbk9iamVjdCcsXHJcbiAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgJ2xpbmVhcmdyYWRpZW50JzogJ2xpbmVhckdyYWRpZW50JyxcclxuICAgICdyYWRpYWxncmFkaWVudCc6ICdyYWRpYWxHcmFkaWVudCcsXHJcbiAgICAndGV4dHBhdGgnOiAndGV4dFBhdGgnXHJcbn07XHJcblxyXG4vL1RhZ3MgdGhhdCBjYXVzZXMgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxyXG52YXIgRVhJVFNfRk9SRUlHTl9DT05URU5UID0ge307XHJcblxyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJJR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJPRFldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQlJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ0VOVEVSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkNPREVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRERdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRElWXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkRMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkRUXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkVNXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkVNQkVEXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgxXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgyXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgzXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg0XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg1XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg2XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkhFQURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSFJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JTUddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTEldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTElTVElOR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5NRU5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FVEFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTk9CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5PTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5QXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBSRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5SVUJZXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU01BTExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1BBTl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJPTkddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1RSSUtFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVQl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVVBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVEFCTEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5WQVJdID0gdHJ1ZTtcclxuXHJcbi8vQ2hlY2sgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxyXG5leHBvcnRzLmNhdXNlc0V4aXQgPSBmdW5jdGlvbiAoc3RhcnRUYWdUb2tlbikge1xyXG4gICAgdmFyIHRuID0gc3RhcnRUYWdUb2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5GT05UICYmIChUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLkNPTE9SKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuU0laRSkgIT09IG51bGwgfHxcclxuICAgICAgICBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLkZBQ0UpICE9PSBudWxsKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBFWElUU19GT1JFSUdOX0NPTlRFTlRbdG5dO1xyXG59O1xyXG5cclxuLy9Ub2tlbiBhZGp1c3RtZW50c1xyXG5leHBvcnRzLmFkanVzdFRva2VuTWF0aE1MQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gREVGSU5JVElPTl9VUkxfQVRUUikge1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblNWR0F0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ck5hbWUgPSBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVBbdG9rZW4uYXR0cnNbaV0ubmFtZV07XHJcblxyXG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJOYW1lKVxyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyTmFtZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5YTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhZGp1c3RlZEF0dHJFbnRyeSA9IFhNTF9BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ckVudHJ5KSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLnByZWZpeCA9IGFkanVzdGVkQXR0ckVudHJ5LnByZWZpeDtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWU7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWVzcGFjZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWVzcGFjZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHVGFnTmFtZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIGFkanVzdGVkVGFnTmFtZSA9IFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVBbdG9rZW4udGFnTmFtZV07XHJcblxyXG4gICAgaWYgKGFkanVzdGVkVGFnTmFtZSlcclxuICAgICAgICB0b2tlbi50YWdOYW1lID0gYWRqdXN0ZWRUYWdOYW1lO1xyXG59O1xyXG5cclxuLy9JbnRlZ3JhdGlvbiBwb2ludHNcclxuZXhwb3J0cy5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucykge1xyXG4gICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUwgJiYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09PSAkLk1OIHx8IHRuID09PSAkLk1TIHx8IHRuID09PSAkLk1URVhUKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uICh0biwgbnMsIGF0dHJzKSB7XHJcbiAgICBpZiAobnMgPT09IE5TLk1BVEhNTCAmJiB0biA9PT0gJC5BTk5PVEFUSU9OX1hNTCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IEFUVFJTLkVOQ09ESU5HKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5URVhUX0hUTUwgfHwgdmFsdWUgPT09IE1JTUVfVFlQRVMuQVBQTElDQVRJT05fWE1MO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBucyA9PT0gTlMuU1ZHICYmICh0biA9PT0gJC5GT1JFSUdOX09CSkVDVCB8fCB0biA9PT0gJC5ERVNDIHx8IHRuID09PSAkLlRJVExFKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE5TID0gZXhwb3J0cy5OQU1FU1BBQ0VTID0ge1xyXG4gICAgSFRNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxyXG4gICAgTUFUSE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcsXHJcbiAgICBTVkc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXHJcbiAgICBYTElOSzogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLFxyXG4gICAgWE1MOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJyxcclxuICAgIFhNTE5TOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nXHJcbn07XHJcblxyXG5leHBvcnRzLkFUVFJTID0ge1xyXG4gICAgVFlQRTogJ3R5cGUnLFxyXG4gICAgQUNUSU9OOiAnYWN0aW9uJyxcclxuICAgIEVOQ09ESU5HOiAnZW5jb2RpbmcnLFxyXG4gICAgUFJPTVBUOiAncHJvbXB0JyxcclxuICAgIE5BTUU6ICduYW1lJyxcclxuICAgIENPTE9SOiAnY29sb3InLFxyXG4gICAgRkFDRTogJ2ZhY2UnLFxyXG4gICAgU0laRTogJ3NpemUnXHJcbn07XHJcblxyXG52YXIgJCA9IGV4cG9ydHMuVEFHX05BTUVTID0ge1xyXG4gICAgQTogJ2EnLFxyXG4gICAgQUREUkVTUzogJ2FkZHJlc3MnLFxyXG4gICAgQU5OT1RBVElPTl9YTUw6ICdhbm5vdGF0aW9uLXhtbCcsXHJcbiAgICBBUFBMRVQ6ICdhcHBsZXQnLFxyXG4gICAgQVJFQTogJ2FyZWEnLFxyXG4gICAgQVJUSUNMRTogJ2FydGljbGUnLFxyXG4gICAgQVNJREU6ICdhc2lkZScsXHJcblxyXG4gICAgQjogJ2InLFxyXG4gICAgQkFTRTogJ2Jhc2UnLFxyXG4gICAgQkFTRUZPTlQ6ICdiYXNlZm9udCcsXHJcbiAgICBCR1NPVU5EOiAnYmdzb3VuZCcsXHJcbiAgICBCSUc6ICdiaWcnLFxyXG4gICAgQkxPQ0tRVU9URTogJ2Jsb2NrcXVvdGUnLFxyXG4gICAgQk9EWTogJ2JvZHknLFxyXG4gICAgQlI6ICdicicsXHJcbiAgICBCVVRUT046ICdidXR0b24nLFxyXG5cclxuICAgIENBUFRJT046ICdjYXB0aW9uJyxcclxuICAgIENFTlRFUjogJ2NlbnRlcicsXHJcbiAgICBDT0RFOiAnY29kZScsXHJcbiAgICBDT0w6ICdjb2wnLFxyXG4gICAgQ09MR1JPVVA6ICdjb2xncm91cCcsXHJcbiAgICBDT01NQU5EOiAnY29tbWFuZCcsXHJcblxyXG4gICAgREQ6ICdkZCcsXHJcbiAgICBERVNDOiAnZGVzYycsXHJcbiAgICBERVRBSUxTOiAnZGV0YWlscycsXHJcbiAgICBESUFMT0c6ICdkaWFsb2cnLFxyXG4gICAgRElSOiAnZGlyJyxcclxuICAgIERJVjogJ2RpdicsXHJcbiAgICBETDogJ2RsJyxcclxuICAgIERUOiAnZHQnLFxyXG5cclxuICAgIEVNOiAnZW0nLFxyXG4gICAgRU1CRUQ6ICdlbWJlZCcsXHJcblxyXG4gICAgRklFTERTRVQ6ICdmaWVsZHNldCcsXHJcbiAgICBGSUdDQVBUSU9OOiAnZmlnY2FwdGlvbicsXHJcbiAgICBGSUdVUkU6ICdmaWd1cmUnLFxyXG4gICAgRk9OVDogJ2ZvbnQnLFxyXG4gICAgRk9PVEVSOiAnZm9vdGVyJyxcclxuICAgIEZPUkVJR05fT0JKRUNUOiAnZm9yZWlnbk9iamVjdCcsXHJcbiAgICBGT1JNOiAnZm9ybScsXHJcbiAgICBGUkFNRTogJ2ZyYW1lJyxcclxuICAgIEZSQU1FU0VUOiAnZnJhbWVzZXQnLFxyXG5cclxuICAgIEgxOiAnaDEnLFxyXG4gICAgSDI6ICdoMicsXHJcbiAgICBIMzogJ2gzJyxcclxuICAgIEg0OiAnaDQnLFxyXG4gICAgSDU6ICdoNScsXHJcbiAgICBINjogJ2g2JyxcclxuICAgIEhFQUQ6ICdoZWFkJyxcclxuICAgIEhFQURFUjogJ2hlYWRlcicsXHJcbiAgICBIR1JPVVA6ICdoZ3JvdXAnLFxyXG4gICAgSFI6ICdocicsXHJcbiAgICBIVE1MOiAnaHRtbCcsXHJcblxyXG4gICAgSTogJ2knLFxyXG4gICAgSU1HOiAnaW1nJyxcclxuICAgIElNQUdFOiAnaW1hZ2UnLFxyXG4gICAgSU5QVVQ6ICdpbnB1dCcsXHJcbiAgICBJRlJBTUU6ICdpZnJhbWUnLFxyXG4gICAgSVNJTkRFWDogJ2lzaW5kZXgnLFxyXG5cclxuICAgIEtFWUdFTjogJ2tleWdlbicsXHJcblxyXG4gICAgTEFCRUw6ICdsYWJlbCcsXHJcbiAgICBMSTogJ2xpJyxcclxuICAgIExJTks6ICdsaW5rJyxcclxuICAgIExJU1RJTkc6ICdsaXN0aW5nJyxcclxuXHJcbiAgICBNQUlOOiAnbWFpbicsXHJcbiAgICBNQUxJR05NQVJLOiAnbWFsaWdubWFyaycsXHJcbiAgICBNQVJRVUVFOiAnbWFycXVlZScsXHJcbiAgICBNQVRIOiAnbWF0aCcsXHJcbiAgICBNRU5VOiAnbWVudScsXHJcbiAgICBNRU5VSVRFTTogJ21lbnVpdGVtJyxcclxuICAgIE1FVEE6ICdtZXRhJyxcclxuICAgIE1HTFlQSDogJ21nbHlwaCcsXHJcbiAgICBNSTogJ21pJyxcclxuICAgIE1POiAnbW8nLFxyXG4gICAgTU46ICdtbicsXHJcbiAgICBNUzogJ21zJyxcclxuICAgIE1URVhUOiAnbXRleHQnLFxyXG5cclxuICAgIE5BVjogJ25hdicsXHJcbiAgICBOT0JSOiAnbm9icicsXHJcbiAgICBOT0ZSQU1FUzogJ25vZnJhbWVzJyxcclxuICAgIE5PRU1CRUQ6ICdub2VtYmVkJyxcclxuICAgIE5PU0NSSVBUOiAnbm9zY3JpcHQnLFxyXG5cclxuICAgIE9CSkVDVDogJ29iamVjdCcsXHJcbiAgICBPTDogJ29sJyxcclxuICAgIE9QVEdST1VQOiAnb3B0Z3JvdXAnLFxyXG4gICAgT1BUSU9OOiAnb3B0aW9uJyxcclxuXHJcbiAgICBQOiAncCcsXHJcbiAgICBQQVJBTTogJ3BhcmFtJyxcclxuICAgIFBMQUlOVEVYVDogJ3BsYWludGV4dCcsXHJcbiAgICBQUkU6ICdwcmUnLFxyXG5cclxuICAgIFJQOiAncnAnLFxyXG4gICAgUlQ6ICdydCcsXHJcbiAgICBSVUJZOiAncnVieScsXHJcblxyXG4gICAgUzogJ3MnLFxyXG4gICAgU0NSSVBUOiAnc2NyaXB0JyxcclxuICAgIFNFQ1RJT046ICdzZWN0aW9uJyxcclxuICAgIFNFTEVDVDogJ3NlbGVjdCcsXHJcbiAgICBTT1VSQ0U6ICdzb3VyY2UnLFxyXG4gICAgU01BTEw6ICdzbWFsbCcsXHJcbiAgICBTUEFOOiAnc3BhbicsXHJcbiAgICBTVFJJS0U6ICdzdHJpa2UnLFxyXG4gICAgU1RST05HOiAnc3Ryb25nJyxcclxuICAgIFNUWUxFOiAnc3R5bGUnLFxyXG4gICAgU1VCOiAnc3ViJyxcclxuICAgIFNVTU1BUlk6ICdzdW1tYXJ5JyxcclxuICAgIFNVUDogJ3N1cCcsXHJcblxyXG4gICAgVEFCTEU6ICd0YWJsZScsXHJcbiAgICBUQk9EWTogJ3Rib2R5JyxcclxuICAgIFRFTVBMQVRFOiAndGVtcGxhdGUnLFxyXG4gICAgVEVYVEFSRUE6ICd0ZXh0YXJlYScsXHJcbiAgICBURk9PVDogJ3Rmb290JyxcclxuICAgIFREOiAndGQnLFxyXG4gICAgVEg6ICd0aCcsXHJcbiAgICBUSEVBRDogJ3RoZWFkJyxcclxuICAgIFRJVExFOiAndGl0bGUnLFxyXG4gICAgVFI6ICd0cicsXHJcbiAgICBUUkFDSzogJ3RyYWNrJyxcclxuICAgIFRUOiAndHQnLFxyXG5cclxuICAgIFU6ICd1JyxcclxuICAgIFVMOiAndWwnLFxyXG5cclxuICAgIFNWRzogJ3N2ZycsXHJcblxyXG4gICAgVkFSOiAndmFyJyxcclxuXHJcbiAgICBXQlI6ICd3YnInLFxyXG5cclxuICAgIFhNUDogJ3htcCdcclxufTtcclxuXHJcbnZhciBTUEVDSUFMX0VMRU1FTlRTID0gZXhwb3J0cy5TUEVDSUFMX0VMRU1FTlRTID0ge307XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BRERSRVNTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BUFBMRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFSVElDTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFTSURFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CQVNFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CQVNFRk9OVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkdTT1VORF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkxPQ0tRVU9URV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQk9EWV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJVVFRPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ0FQVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ0VOVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DT0xdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuREVUQUlMU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRElSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5EVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRU1CRURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJRUxEU0VUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GSUdDQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GSUdVUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZPT1RFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9STV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZSQU1FU0VUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgzXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg2XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IRUFEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IRUFERVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhHUk9VUF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhUTUxdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklGUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSU1HXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTlBVVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSVNJTkRFWF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTEldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkxJTktdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkxJU1RJTkddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1BSU5dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1BUlFVRUVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FTlVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FTlVJVEVNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NRVRBXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OQVZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PRU1CRURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PRlJBTUVTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OT1NDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuT0JKRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUEFSQU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlBMQUlOVEVYVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUFJFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TQ1JJUFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNFQ1RJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNFTEVDVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU09VUkNFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVFlMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU1VNTUFSWV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEFCTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRCT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVNUExBVEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRFWFRBUkVBXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URk9PVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRIRUFEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USVRMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRSQUNLXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5VTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuV0JSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5YTVBdID0gdHJ1ZTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXSA9IHt9O1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NT10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NVEVYVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5BTk5PVEFUSU9OX1hNTF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLkZPUkVJR05fT0JKRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLkRFU0NdID0gdHJ1ZTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5SRVBMQUNFTUVOVF9DSEFSQUNURVIgPSAnXFx1RkZGRCc7XHJcblxyXG5leHBvcnRzLkNPREVfUE9JTlRTID0ge1xyXG4gICAgRU9GOiAtMSxcclxuICAgIE5VTEw6IDB4MDAsXHJcbiAgICBUQUJVTEFUSU9OOiAweDA5LFxyXG4gICAgQ0FSUklBR0VfUkVUVVJOOiAweDBELFxyXG4gICAgTElORV9GRUVEOiAweDBBLFxyXG4gICAgRk9STV9GRUVEOiAweDBDLFxyXG4gICAgU1BBQ0U6IDB4MjAsXHJcbiAgICBFWENMQU1BVElPTl9NQVJLOiAweDIxLFxyXG4gICAgUVVPVEFUSU9OX01BUks6IDB4MjIsXHJcbiAgICBOVU1CRVJfU0lHTjogMHgyMyxcclxuICAgIEFNUEVSU0FORDogMHgyNixcclxuICAgIEFQT1NUUk9QSEU6IDB4MjcsXHJcbiAgICBIWVBIRU5fTUlOVVM6IDB4MkQsXHJcbiAgICBTT0xJRFVTOiAweDJGLFxyXG4gICAgRElHSVRfMDogMHgzMCxcclxuICAgIERJR0lUXzk6IDB4MzksXHJcbiAgICBTRU1JQ09MT046IDB4M0IsXHJcbiAgICBMRVNTX1RIQU5fU0lHTjogMHgzQyxcclxuICAgIEVRVUFMU19TSUdOOiAweDNELFxyXG4gICAgR1JFQVRFUl9USEFOX1NJR046IDB4M0UsXHJcbiAgICBRVUVTVElPTl9NQVJLOiAweDNGLFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9BOiAweDQxLFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9GOiAweDQ2LFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9YOiAweDU4LFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9aOiAweDVBLFxyXG4gICAgR1JBVkVfQUNDRU5UOiAweDYwLFxyXG4gICAgTEFUSU5fU01BTExfQTogMHg2MSxcclxuICAgIExBVElOX1NNQUxMX0Y6IDB4NjYsXHJcbiAgICBMQVRJTl9TTUFMTF9YOiAweDc4LFxyXG4gICAgTEFUSU5fU01BTExfWjogMHg3QSxcclxuICAgIEJPTTogMHhGRUZGLFxyXG4gICAgUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOiAweEZGRkRcclxufTtcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVF9TRVFVRU5DRVMgPSB7XHJcbiAgICBEQVNIX0RBU0hfU1RSSU5HOiBbMHgyRCwgMHgyRF0sIC8vLS1cclxuICAgIERPQ1RZUEVfU1RSSU5HOiBbMHg0NCwgMHg0RiwgMHg0MywgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NV0sIC8vRE9DVFlQRVxyXG4gICAgQ0RBVEFfU1RBUlRfU1RSSU5HOiBbMHg1QiwgMHg0MywgMHg0NCwgMHg0MSwgMHg1NCwgMHg0MSwgMHg1Ql0sIC8vW0NEQVRBW1xyXG4gICAgQ0RBVEFfRU5EX1NUUklORzogWzB4NUQsIDB4NUQsIDB4M0VdLCAvL11dPlxyXG4gICAgU0NSSVBUX1NUUklORzogWzB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzRdLCAvL3NjcmlwdFxyXG4gICAgUFVCTElDX1NUUklORzogWzB4NTAsIDB4NTUsIDB4NDIsIDB4NEMsIDB4NDksIDB4NDNdLCAvL1BVQkxJQ1xyXG4gICAgU1lTVEVNX1NUUklORzogWzB4NTMsIDB4NTksIDB4NTMsIDB4NTQsIDB4NDUsIDB4NERdIC8vU1lTVEVNXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMubWVyZ2VPcHRpb25zID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICByZXR1cm4gW2RlZmF1bHRzLCBvcHRpb25zXS5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgb3B0T2JqKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMob3B0T2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgbWVyZ2VkW2tleV0gPSBvcHRPYmpba2V5XTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcclxuICAgIH0sIHt9KTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNlciA9IHJlcXVpcmUoJy4uL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpLFxyXG4gICAgUGFyc2luZ1VuaXQgPSByZXF1aXJlKCcuL3BhcnNpbmdfdW5pdCcpO1xyXG5cclxuLy9BUElcclxuZXhwb3J0cy5wYXJzZURvY3VtZW50ID0gZnVuY3Rpb24gKGh0bWwsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpLFxyXG4gICAgICAgIHBhcnNpbmdVbml0ID0gbmV3IFBhcnNpbmdVbml0KHBhcnNlcik7XHJcblxyXG4gICAgLy9OT1RFOiBvdmVycmlkZSBwYXJzZXIgbG9vcCBtZXRob2RcclxuICAgIHBhcnNlci5fcnVuUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFwYXJzaW5nVW5pdC5zdXNwZW5kZWQgJiYgIXRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICBwYXJzaW5nVW5pdC5jYWxsYmFjayh0aGlzLmRvY3VtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiB3YWl0IHdoaWxlIHBhcnNlckNvbnRyb2xsZXIgd2lsbCBiZSBhZG9wdGVkIGJ5IGNhbGxpbmcgY29kZSwgdGhlblxyXG4gICAgLy9zdGFydCBwYXJzaW5nXHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzZXIucGFyc2UoaHRtbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2luZ1VuaXQ7XHJcbn07XHJcblxyXG5leHBvcnRzLnBhcnNlSW5uZXJIdG1sID0gZnVuY3Rpb24gKGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50KTtcclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUGFyc2luZ1VuaXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcclxuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xyXG4gICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyc2luZ0xvb3BMb2NrID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5fc3RhdGVHdWFyZCA9IGZ1bmN0aW9uIChzdXNwZW5kKSB7XHJcbiAgICBpZiAodGhpcy5zdXNwZW5kZWQgJiYgc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHN1c3BlbmRlZC4gUGxlYXNlLCBjaGVjayB5b3VyIGNvbnRyb2wgZmxvdyBsb2dpYy4nKTtcclxuXHJcbiAgICBlbHNlIGlmICghdGhpcy5zdXNwZW5kZWQgJiYgIXN1c3BlbmQpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJzZTU6IFBhcnNlciB3YXMgYWxyZWFkeSByZXN1bWVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIHJldHVybiBzdXNwZW5kO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQodHJ1ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5zdXNwZW5kZWQgPSB0aGlzLl9zdGF0ZUd1YXJkKGZhbHNlKTtcclxuXHJcbiAgICAvL05PVEU6IGRvbid0IGVudGVyIHBhcnNpbmcgbG9vcCBpZiBpdCBpcyBsb2NrZWQuIFdpdGhvdXQgdGhpcyBsb2NrIF9ydW5QYXJzaW5nTG9vcCgpIG1heSBiZSBjYWxsZWRcclxuICAgIC8vd2hpbGUgcGFyc2luZyBsb29wIGlzIHN0aWxsIHJ1bm5pbmcuIEUuZy4gd2hlbiBzdXNwZW5kKCkgYW5kIHJlc3VtZSgpIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgaWYgKCF0aGlzLnBhcnNpbmdMb29wTG9jaylcclxuICAgICAgICB0aGlzLnBhcnNlci5fcnVuUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5kb2N1bWVudFdyaXRlID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgIHRoaXMucGFyc2VyLnRva2VuaXplci5wcmVwcm9jZXNzb3Iud3JpdGUoaHRtbCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuaGFuZGxlU2NyaXB0cyA9IGZ1bmN0aW9uIChzY3JpcHRIYW5kbGVyKSB7XHJcbiAgICB0aGlzLnBhcnNlci5zY3JpcHRIYW5kbGVyID0gc2NyaXB0SGFuZGxlcjtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcblxuLy9EZWZhdWx0IHNlcmlhbGl6ZXIgb3B0aW9uc1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgICBlbmNvZGVIdG1sRW50aXRpZXM6IHRydWVcbn07XG5cbi8vRXNjYXBpbmcgcmVnZXhlc1xudmFyIEFNUF9SRUdFWCA9IC8mL2csXG4gICAgTkJTUF9SRUdFWCA9IC9cXHUwMGEwL2csXG4gICAgRE9VQkxFX1FVT1RFX1JFR0VYID0gL1wiL2csXG4gICAgTFRfUkVHRVggPSAvPC9nLFxuICAgIEdUX1JFR0VYID0gLz4vZztcblxuLy9Fc2NhcGUgc3RyaW5nXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyLCBhdHRyTW9kZSkge1xuICAgIHN0ciA9IHN0clxuICAgICAgICAucmVwbGFjZShBTVBfUkVHRVgsICcmYW1wOycpXG4gICAgICAgIC5yZXBsYWNlKE5CU1BfUkVHRVgsICcmbmJzcDsnKTtcblxuICAgIGlmIChhdHRyTW9kZSlcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoRE9VQkxFX1FVT1RFX1JFR0VYLCAnJnF1b3Q7Jyk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RyXG4gICAgICAgICAgICAucmVwbGFjZShMVF9SRUdFWCwgJyZsdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoR1RfUkVHRVgsICcmZ3Q7Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbn1cblxuXG4vL0VucXVvdGUgZG9jdHlwZSBJRFxuXG5cblxuLy9TZXJpYWxpemVyXG52YXIgU2VyaWFsaXplciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbn07XG5cblxuLy9BUElcblNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sID0gJyc7XG4gICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlKTtcblxuICAgIHJldHVybiB0aGlzLmh0bWw7XG59O1xuXG5cbi8vSW50ZXJuYWxzXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQ2hpbGROb2RlcyA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50Tm9kZSk7XG5cbiAgICBpZiAoY2hpbGROb2Rlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgY25MZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZXNbaV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUVsZW1lbnQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZVRleHROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0NvbW1lbnROb2RlKGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVDb21tZW50Tm9kZShjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSksXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobm9kZSksXG4gICAgICAgIHF1YWxpZmllZFRuID0gKG5zID09PSBOUy5IVE1MIHx8IG5zID09PSBOUy5TVkcgfHwgbnMgPT09IE5TLk1BVEhNTCkgPyB0biA6IChucyArICc6JyArIHRuKTtcblxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyBxdWFsaWZpZWRUbjtcbiAgICB0aGlzLl9zZXJpYWxpemVBdHRyaWJ1dGVzKG5vZGUpO1xuICAgIHRoaXMuaHRtbCArPSAnPic7XG5cbiAgICBpZiAodG4gIT09ICQuQVJFQSAmJiB0biAhPT0gJC5CQVNFICYmIHRuICE9PSAkLkJBU0VGT05UICYmIHRuICE9PSAkLkJHU09VTkQgJiYgdG4gIT09ICQuQlIgJiYgdG4gIT09ICQuQlIgJiZcbiAgICAgICAgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkVNQkVEICYmIHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLkhSICYmIHRuICE9PSAkLklNRyAmJiB0biAhPT0gJC5JTlBVVCAmJlxuICAgICAgICB0biAhPT0gJC5LRVlHRU4gJiYgdG4gIT09ICQuTElOSyAmJiB0biAhPT0gJC5NRU5VSVRFTSAmJiB0biAhPT0gJC5NRVRBICYmIHRuICE9PSAkLlBBUkFNICYmIHRuICE9PSAkLlNPVVJDRSAmJlxuICAgICAgICB0biAhPT0gJC5UUkFDSyAmJiB0biAhPT0gJC5XQlIpIHtcblxuICAgICAgICBpZiAodG4gPT09ICQuUFJFIHx8IHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLkxJU1RJTkcpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKG5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KGZpcnN0Q2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ1xcbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGROb2Rlc0hvbGRlciA9IHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMobm9kZSlbMF0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU7XG5cbiAgICAgICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2RlcyhjaGlsZE5vZGVzSG9sZGVyKTtcbiAgICAgICAgdGhpcy5odG1sICs9ICc8LycgKyBxdWFsaWZpZWRUbiArICc+JztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhdHRyc0xlbmd0aCA9IGF0dHJzLmxlbmd0aDsgaSA8IGF0dHJzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXSxcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb25zLmVuY29kZUh0bWxFbnRpdGllcyA/IGVzY2FwZVN0cmluZyhhdHRyLnZhbHVlLCB0cnVlKSA6IGF0dHIudmFsdWU7XG5cbiAgICAgICAgdGhpcy5odG1sICs9ICcgJztcblxuICAgICAgICBpZiAoIWF0dHIubmFtZXNwYWNlKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZTtcblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWE1MKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWw6JyArIGF0dHIubmFtZTtcblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWE1MTlMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICd4bWxucycpXG4gICAgICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWxuczonO1xuXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoYXR0ci5uYW1lc3BhY2UgPT09IE5TLlhMSU5LKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bGluazonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWVzcGFjZSArICc6JyArIGF0dHIubmFtZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJz1cIicgKyB2YWx1ZSArICdcIic7XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZVRleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KG5vZGUpLFxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSksXG4gICAgICAgIHBhcmVudFRuID0gdm9pZCAwO1xuXG4gICAgaWYgKHBhcmVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUocGFyZW50KSlcbiAgICAgICAgcGFyZW50VG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocGFyZW50KTtcblxuICAgIGlmIChwYXJlbnRUbiA9PT0gJC5TVFlMRSB8fCBwYXJlbnRUbiA9PT0gJC5TQ1JJUFQgfHwgcGFyZW50VG4gPT09ICQuWE1QIHx8IHBhcmVudFRuID09PSAkLklGUkFNRSB8fFxuICAgICAgICBwYXJlbnRUbiA9PT0gJC5OT0VNQkVEIHx8IHBhcmVudFRuID09PSAkLk5PRlJBTUVTIHx8IHBhcmVudFRuID09PSAkLlBMQUlOVEVYVCB8fCBwYXJlbnRUbiA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLmh0bWwgKz0gY29udGVudDtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuaHRtbCArPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGNvbnRlbnQsIGZhbHNlKSA6IGNvbnRlbnQ7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHRoaXMuaHRtbCArPSAnPCEtLScgKyB0aGlzLnRyZWVBZGFwdGVyLmdldENvbW1lbnROb2RlQ29udGVudChub2RlKSArICctLT4nO1xufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBuYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXREb2N1bWVudFR5cGVOb2RlTmFtZShub2RlKSxcbiAgICAgICAgcHVibGljSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZChub2RlKSxcbiAgICAgICAgc3lzdGVtSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZChub2RlKTtcblxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSArICc+Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgVG9rZW5pemVyUHJveHkgPSByZXF1aXJlKCcuL3Rva2VuaXplcl9wcm94eScpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyk7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL1NraXBwaW5nIGhhbmRsZXJcbmZ1bmN0aW9uIHNraXAoKSB7XG4gICAgLy9OT1RFOiBkbyBub3RoaW5nID0pXG59XG5cbi8vU2ltcGxlQXBpUGFyc2VyXG52YXIgU2ltcGxlQXBpUGFyc2VyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGFuZGxlcnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICBkb2N0eXBlOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5kb2N0eXBlKSxcbiAgICAgICAgc3RhcnRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnN0YXJ0VGFnKSxcbiAgICAgICAgZW5kVGFnOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5lbmRUYWcpLFxuICAgICAgICB0ZXh0OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy50ZXh0KSxcbiAgICAgICAgY29tbWVudDogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuY29tbWVudClcbiAgICB9O1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fd3JhcEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIHZhciBwYXJzZXIgPSB0aGlzO1xuXG4gICAgaGFuZGxlciA9IGhhbmRsZXIgfHwgc2tpcDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VyLmN1cnJlbnRUb2tlbkxvY2F0aW9uKTtcbiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkoaGFuZGxlciwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXI7XG59O1xuXG4vL0FQSVxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdmFyIHRva2VuID0gbnVsbDtcblxuICAgIHRoaXMuX3Jlc2V0KGh0bWwpO1xuXG4gICAgZG8ge1xuICAgICAgICB0b2tlbiA9IHRoaXMudG9rZW5pemVyUHJveHkuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gfHxcbiAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1RleHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbi5lbmQgPSB0b2tlbi5sb2NhdGlvbi5lbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1RleHQgPSAodGhpcy5wZW5kaW5nVGV4dCB8fCAnJykgKyB0b2tlbi5jaGFycztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdFBlbmRpbmdUZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlICh0b2tlbi50eXBlICE9PSBUb2tlbml6ZXIuRU9GX1RPS0VOKTtcbn07XG5cbi8vSW50ZXJuYWxzXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKVxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zdGFydFRhZyh0b2tlbi50YWdOYW1lLCB0b2tlbi5hdHRycywgdG9rZW4uc2VsZkNsb3NpbmcpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZW5kVGFnKHRva2VuLnRhZ05hbWUpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuY29tbWVudCh0b2tlbi5kYXRhKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5ET0NUWVBFX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLmRvY3R5cGUodG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcblxufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMudG9rZW5pemVyUHJveHkgPSBuZXcgVG9rZW5pemVyUHJveHkoaHRtbCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnBlbmRpbmdUZXh0ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gbnVsbDtcbn07XG5cblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2VtaXRQZW5kaW5nVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzLnRleHQodGhpcy5wZW5kaW5nVGV4dCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgRm9yZWlnbkNvbnRlbnQgPSByZXF1aXJlKCcuLi9jb21tb24vZm9yZWlnbl9jb250ZW50JyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcblxuXG4vL1Rva2VuaXplciBwcm94eVxuLy9OT1RFOiB0aGlzIHByb3h5IHNpbXVsYXRlcyBhZGp1c3RtZW50IG9mIHRoZSBUb2tlbml6ZXIgd2hpY2ggcGVyZm9ybWVkIGJ5IHN0YW5kYXJkIHBhcnNlciBkdXJpbmcgdHJlZSBjb25zdHJ1Y3Rpb24uXG52YXIgVG9rZW5pemVyUHJveHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKGh0bWwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjayA9IFtdO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPSBudWxsO1xuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IGZhbHNlO1xufTtcblxuLy9BUElcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRva2VuID0gdGhpcy50b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5faGFuZGxlU3RhcnRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5faGFuZGxlRW5kVGFnVG9rZW4odG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOICYmIHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB0b2tlbi50eXBlID0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTjtcbiAgICAgICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG59O1xuXG4vL05hbWVzcGFjZSBzdGFjayBtdXRhdGlvbnNcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5fZW50ZXJOYW1lc3BhY2UgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCsrO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucHVzaChuYW1lc3BhY2UpO1xuXG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gbmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcC0tO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucG9wKCk7XG5cbiAgICB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZVN0YWNrW3RoaXMubmFtZXNwYWNlU3RhY2tUb3BdO1xuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IHRoaXMuY3VycmVudE5hbWVzcGFjZSAhPT0gTlMuSFRNTDtcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xufTtcblxuLy9Ub2tlbiBoYW5kbGVyc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnN1cmVUb2tlbml6ZXJNb2RlID0gZnVuY3Rpb24gKHRuKSB7XG4gICAgaWYgKHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5JRlJBTUUgfHwgdG4gPT09ICQuWE1QIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5TVkcpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLlNWRyk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5NQVRITUwpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChGb3JlaWduQ29udGVudC5jYXVzZXNFeGl0KHRva2VuKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgdGhpcy5jdXJyZW50TmFtZXNwYWNlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgdGhpcy5jdXJyZW50TmFtZXNwYWNlLCB0b2tlbi5hdHRycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5IVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRva2VuaXplck1vZGUodG4pO1xuICAgIH1cbn07XG5cblRva2VuaXplclByb3h5LnByb3RvdHlwZS5faGFuZGxlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKCF0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzTnMgPSB0aGlzLm5hbWVzcGFjZVN0YWNrW3RoaXMubmFtZXNwYWNlU3RhY2tUb3AgLSAxXTtcblxuICAgICAgICAvL05PVEU6IGNoZWNrIGZvciBleGl0IGZyb20gaW50ZWdyYXRpb24gcG9pbnRcbiAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMpIHx8XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBwcmV2aW91c05zLCB0b2tlbi5hdHRycykpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5EQVRBO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKCh0biA9PT0gJC5TVkcgJiYgdGhpcy5jdXJyZW50TmFtZXNwYWNlID09PSBOUy5TVkcpIHx8XG4gICAgICAgICAgICAgKHRuID09PSAkLk1BVEggJiYgdGhpcy5jdXJyZW50TmFtZXNwYWNlID09PSBOUy5NQVRITUwpKVxuICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uICh0b2tlbml6ZXIpIHtcclxuICAgIC8vTk9URTogb2J0YWluIFRva2VuaXplciBwcm90byB0aGlzIHdheSB0byBhdm9pZCBtb2R1bGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gICAgdmFyIHRva2VuaXplclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRva2VuaXplcik7XHJcblxyXG4gICAgdG9rZW5pemVyLnRva2VuU3RhcnRMb2MgPSAtMTtcclxuXHJcbiAgICAvL05PVEU6IGFkZCBsb2NhdGlvbiBpbmZvIGJ1aWxkZXIgbWV0aG9kXHJcbiAgICB0b2tlbml6ZXIuX2F0dGFjaExvY2F0aW9uSW5mbyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRva2VuLmxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBzdGFydDogdGhpcy50b2tlblN0YXJ0TG9jLFxyXG4gICAgICAgICAgICBlbmQ6IC0xXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCB0b2tlbiBjcmVhdGlvbiBtZXRob2RzIGFuZCBhdHRhY2ggbG9jYXRpb24gb2JqZWN0c1xyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZVN0YXJ0VGFnVG9rZW4uY2FsbCh0aGlzLCB0YWdOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVFbmRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlQ29tbWVudFRva2VuLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZURvY3R5cGVUb2tlbi5jYWxsKHRoaXMsIGRvY3R5cGVOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbi5jYWxsKHRoaXMsIHR5cGUsIGNoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGVtaXNzaW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIGVuZCBsb2NhdGlvblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBwZW5kaW5nIGNoYXJhY3RlciB0b2tlbiBtYWtlIGl0J3MgZW5kIGxvY2F0aW9uIGVxdWFsIHRvIHRoZVxyXG4gICAgICAgIC8vY3VycmVudCB0b2tlbidzIHN0YXJ0IGxvY2F0aW9uLlxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uc3RhcnQ7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcyArIDE7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0J3MgbG9jYXRpb24gd2Fzbid0IHNldCBpbiB0aGUgX2VtaXRDdXJyZW50VG9rZW4oKSxcclxuICAgICAgICAvL3RoZW4gc2V0IGl0J3MgbG9jYXRpb24gYXQgdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBkb24ndCBuZWVkIHRvIGluY3JlbWVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb24sIHNpbmNlIGNoYXJhY3RlciB0b2tlblxyXG4gICAgICAgICAgICAvL2VtaXNzaW9uIGlzIGFsd2F5cyBmb3JjZWQgYnkgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0b2tlbiBoZXJlLlxyXG4gICAgICAgICAgICAvL1NvLCB3ZSBhbHJlYWR5IGhhdmUgYWR2YW5jZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuLmNhbGwodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggaW5pdGlhbCBzdGF0ZXMgZm9yIGVhY2ggbW9kZSB0byBvYnRhaW4gdG9rZW4gc3RhcnQgcG9zaXRpb25cclxuICAgIE9iamVjdC5rZXlzKHRva2VuaXplclByb3RvLk1PREUpXHJcblxyXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKG1vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbml6ZXJQcm90by5NT0RFW21vZGVOYW1lXTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgdG9rZW5pemVyW3N0YXRlXSA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblN0YXJ0TG9jID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgICAgICAgICAgdG9rZW5pemVyUHJvdG9bc3RhdGVdLmNhbGwodGhpcywgY3ApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05PVEU6IHRoaXMgZmlsZSBjb250YWlucyBhdXRvIGdlbmVyYXRlZCB0cmllIHN0cnVjdHVyZSB0aGF0IGlzIHVzZWQgZm9yIG5hbWVkIGVudGl0eSByZWZlcmVuY2VzIGNvbnN1bXB0aW9uXHJcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcyBhbmRcclxuLy9odHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlcy5odG1sI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDB4NDE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkzXX19LCBjOiBbMTkzXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU4XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTk0XX19LCBjOiBbMTk0XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0MF19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE5OF19fSwgYzogWzE5OF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNjhdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzE5Ml19fSwgYzogWzE5Ml19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU2XX19fX19fX19fSwgMHg0RDoge2w6IHsweDUwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM1XX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjYwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyMF19fX19fX19LCAweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzgyODldfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE5N119fSwgYzogWzE5N119fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk2NF19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3ODhdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzE5NV19fSwgYzogWzE5NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk2XX19LCBjOiBbMTk2XX19fX19fX0sXHJcbiAgICAweDYxOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNV19fSwgYzogWzIyNV19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1OV19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg3NjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODc2NiwgODE5XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMjZdfX0sIGM6IFsyMjZdfX19fX0sIDB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTgwXX19LCBjOiBbMTgwXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Ml19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzIzMF19fSwgYzogWzIzMF19fX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbODI4OV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDk0XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMjRdfX0sIGM6IFsyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NTAxXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ1XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI1N119fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTA4MTVdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzM4XX19LCBjOiBbMzhdfX19LCAweDZFOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzN119fX19fX19LCAweDNCOiB7YzogWzg3NDNdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwODQ0XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NDBdfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0Ml19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg3MzZdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwNjYwXX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODczNl19fX19fSwgMHg2RDoge2w6IHsweDczOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA2NjRdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2NjVdfX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbMTA2NjZdfX19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NjddfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjhdfX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTA2NjldfX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA2NzBdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbMTA2NzFdfX19fX0sIDB4M0I6IHtjOiBbODczN119fX19fX19LCAweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzM1XX0sIDB4NzY6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4OTRdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjUzXX19fX19fX19fX19LCAweDczOiB7bDogezB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3MzhdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxOTddfX19fX0sIDB4N0E6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5MDg0XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ2XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYzXX19fX19fX19fSwgMHgzQjoge2M6IFs4Nzc2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg2NF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc4XX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc3OV19fX19fSwgMHg2Rjoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMzldfX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjI5XX19LCBjOiBbMjI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkwXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNDJdfX19LCAweDc5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMjddfX0sIGM6IFsyMjddfX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIyOF19fSwgYzogWzIyOF19fX19fSwgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2OV19fX19fX19fX19fSxcclxuICAgIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3ODBdfX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxNF19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDVdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTNdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTY1XX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjVdfX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkxNDFdfSwgMHg3NDoge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkxNDJdfX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3M119fX19fSwgMHg2NDoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU3XX19fX19fX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3Ml19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2RToge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NDkyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ2XX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDJdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODgxMl19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OThdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbOTcxMV19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc1Ml19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTNdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDc1OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTczM119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzk2NTFdfX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk3XX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTZdfX19fX19fX19fX19fX19LCAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3QToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3MzFdfX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2Ml19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjY2XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY1Nl19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MjUxXX19fX19fX0sIDB4NkI6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbOTYxOF19fX0sIDB4MzQ6IHtsOiB7MHgzQjoge2M6IFs5NjE3XX19fX19LCAweDMzOiB7bDogezB4MzQ6IHtsOiB7MHgzQjoge2M6IFs5NjE5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwOF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzYxLCA4NDIxXX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxLCA4NDIxXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTc2XX19fX19fX0sIDB4NEU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5ODldfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDddfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA0XX19fX19fX19fSwgMHg3ODoge2w6IHsweDYyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwNjk3XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0ODhdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU1N119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDg0XX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NTRdfX19fX0sIDB4NDQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NThdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU1OV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTU1XX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NTZdfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTE2XX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzNdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTUyNF19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc2XX19fX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU1Ml19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbOTU3Ml19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs5NTc0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk1NzVdfX19LCAweDU1OiB7bDogezB4M0I6IHtjOiBbOTU3N119fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2M119fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjJdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODY0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NDk2XX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NjNdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTQ5Ml19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTYwXX19fX19LCAweDU1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTY0XX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NjVdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2MV19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTYyXX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTQ3NF19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTUzMl19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTc4XX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzk1MDhdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2OV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTAwXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjZdfX19fX0sIDB4NTY6IHtsOiB7MHgzQjoge2M6IFs5NTUzXX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTc5XX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1ODBdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTU3MF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTcxXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NjddfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2OF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDVdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MjhdfX19fX19fSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE2Nl19fSwgYzogWzE2Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkxXX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzgyNzFdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODkwOV19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwNjkzXX19fSwgMHgzQjoge2M6IFs5Ml19LCAweDY4OiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTAxODRdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyMjZdfSwgMHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODIyNl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTI2XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODNdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3ODNdfX19fX19fX19fX19fSxcclxuICAgIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgzXX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTY2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQxXX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2RToge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNjldfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MjhdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4Ml19fX19fX19fX19fX19LFxyXG4gICAgMHg0Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNjJdfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxNF19LCAweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHg2OToge2w6IHsweDY2OiB7bDogezB4NjY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4Nzk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjY4XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzE5OV19fSwgYzogWzE5OV19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI2NF19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUyXX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjY2XX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTg0XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDkzXX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjNdfX19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTM1XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODU3XX19fX19fX0sIDB4NEQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTRdfX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUzXX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Nzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc1OV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjhdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgwMV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ1MF19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcyMF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQzOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Nzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTVdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0Rjoge2w6IHsweDUwOiB7bDogezB4NTk6IHtsOiB7MHgzQjoge2M6IFsxNjldfX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY2XX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODFdfX19fX19fSwgMHgzQjoge2M6IFs4OTE1XX19fX19fX0sXHJcbiAgICAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2M119fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgyMF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNV19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyN119fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MjNdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4MTZdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NDUsIDY1MDI0XX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzgyNTddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzcxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjldfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjMxXX19LCBjOiBbMjMxXX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY1XX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MjhdfSwgMHg3Mzoge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA4MzJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjddfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzE4NF19fSwgYzogWzE4NF19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA2NzRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE2Ml19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19LCBjOiBbMTYyXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NV19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTAwMDNdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY3XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzcxMF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM0XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODU5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODU4XX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NjFdfX19fX19fX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbMTc0XX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbOTY3NV19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA2OTFdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc5MV19fX0sIDB4NjY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY4XX19fX19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwOTkxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY5MF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTgyN119LCAweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MjddfX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNThdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3ODhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbNDRdfSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX0sIDB4NjY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNV19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ1MF19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3NzNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg2MV19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OF19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODcyMF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTY5XX0sIDB4NzM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzFdfX19fX19LCBjOiBbMTY5XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYyOV19fX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwMDA3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTJdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk2MV19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYwXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQzXX19fX19fX19fSwgMHg3NToge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDU1Ml19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU0OV19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTI2XX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTI3XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDU1N119fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyMl19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MjZdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ2XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0NV19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgyMV19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NDYsIDY1MDI0XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzMV19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTA1NTZdfX19fX19fX19LCAweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTI2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTEwXX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzE2NF19fSwgYzogWzE2NF19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTExXX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTRdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUzXX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbOTAwNV19fX19fX19fX19fX19LFxyXG4gICAgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI0XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDRdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjA4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODY3XX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU5XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MTFdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzMzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcxXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNzZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDY3OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIyNV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTBdfX19fX19fSwgMHgzQjoge2M6IFs4NTE4XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwODcxXX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE3Nl19fSwgYzogWzE3Nl19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk0OF19fX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3M119fX19fX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyM119fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTddfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTddfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2NDNdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Ml19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MDBdfSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MzBdfX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTY4XX19fSwgMHg2Nzoge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5NDZdfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzI0N119LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0N119LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fX19fX19LCBjOiBbMjQ3XX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg5MDNdfX19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwNl19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkwXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3M119fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzZdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs3MjldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODVdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjBdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTY2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDNdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMl19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5MV19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkzXX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDldfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzQyXX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjczXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NV19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2OTNdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjJdfX19fX19fX19fX19fSwgMHg3QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE5XX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjM5XX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg0NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOV19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI3MF19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ0XX19fX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxN119LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4Njg6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNTEzXX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODcxMV19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTZdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzFdfX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTgwXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nl19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MDBdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MThdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDI2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIzXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTY4XX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMl19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzUxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY4XX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU2XX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5ODBdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMl19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NzJdfX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTE1XX19fX19fX0sIDB4M0I6IHtjOiBbODU5NV19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU5XX19fX19fX19fX19LCAweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3ODVdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzZdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTBdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4Ml19fX19fX19LCAweDNCOiB7YzogWzg2MzddfX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MV19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgzXX19fX19fX0sIDB4M0I6IHtjOiBbODY0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxNV19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY3XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjcyXX19fX19fX19fX19LCAweDUzOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjldfX19fX19fSwgMHg1QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM5XX19fX19fX19fSxcclxuICAgIDB4NDU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAxXX19LCBjOiBbMjAxXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgyXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMDJdfX0sIGM6IFsyMDJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI3OF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwMF19fSwgYzogWzIwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjc0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NTM6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3MjNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzMzMF19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjRdfX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MTddfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODY5XX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDg2N119fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTldfX19fX0sIDB4NTQ6IHtsOiB7MHg0ODoge2w6IHsweDNCOiB7YzogWzIwOF19fSwgYzogWzIwOF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjAzXX19LCBjOiBbMjAzXX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjMzXX19LCBjOiBbMjMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg2Ml19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgzXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMzRdfX0sIGM6IFsyMzRdfSwgMHgzQjoge2M6IFs4NzkwXX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAxXX19fX19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI3OV19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX0sIDB4NjY6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOThdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDkwNl19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjMyXX19LCBjOiBbMjMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTA0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDVdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5MTkxXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NDY3XX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAxXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDNdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzVdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDMxOiB7bDogezB4MzM6IHtsOiB7MHgzQjoge2M6IFs4MTk2XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzgxOTddfX19fX0sIDB4M0I6IHtjOiBbODE5NV19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzFdfX19LCAweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MTk0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTUwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkxN119LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyM119fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4NjVdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTQ5XX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTQ5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODc5MF19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzcwXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MDJdfX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAxXX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs2MV19fX19fX19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3OTldfX19fX19fSwgMHg2OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODgwMV19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Ml19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwOV19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NF19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzcwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1MV19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDBdfX0sIGM6IFsyNDBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzNV19fSwgYzogWzIzNV19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgzNjRdfX19fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszM119fX19fSwgMHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODQ5Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY2OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4Nl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkyXX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzkyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNTZdfX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNjBdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDk5XX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNTddfX19fX19fX19LCAweDZBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyLCAxMDZdfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MzddfX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNThdfX19fX19fSwgMHg3NDoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5NjQ5XX19fX19fX19fSwgMHg2RToge2w6IHsweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs0MDJdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTFdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzA0XX19fX19fX0sIDB4NkI6IHtsOiB7MHgzQjoge2M6IFs4OTE2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDk2OV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4MzE6IHtsOiB7MHgzMjoge2w6IHsweDNCOiB7YzogWzE4OV19fSwgYzogWzE4OV19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbODUzMV19fX0sIDB4MzQ6IHtsOiB7MHgzQjoge2M6IFsxODhdfX0sIGM6IFsxODhdfSwgMHgzNToge2w6IHsweDNCOiB7YzogWzg1MzNdfX19LCAweDM2OiB7bDogezB4M0I6IHtjOiBbODUzN119fX0sIDB4Mzg6IHtsOiB7MHgzQjoge2M6IFs4NTM5XX19fX19LCAweDMyOiB7bDogezB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMyXX19fSwgMHgzNToge2w6IHsweDNCOiB7YzogWzg1MzRdfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzE5MF19fSwgYzogWzE5MF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNV19fX0sIDB4Mzg6IHtsOiB7MHgzQjoge2M6IFs4NTQwXX19fX19LCAweDM0OiB7bDogezB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM2XX19fX19LCAweDM1OiB7bDogezB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM4XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDFdfX19fX0sIDB4Mzc6IHtsOiB7MHgzODoge2w6IHsweDNCOiB7YzogWzg1NDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI2MF19fX19fX19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5NV19fX19fX19fX0sXHJcbiAgICAweDQ2OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjBdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3M119fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NTM6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3MjRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjVdfX19fX0sIDB4NzI6IHtsOiB7MHg0MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzA0XX19fX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTddfX19fX19fX19LFxyXG4gICAgMHg2Nzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs1MDFdfX19fX19fX19LCAweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk0N119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbOTg5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyODddfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyODVdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNzVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjg5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDddfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTIxXX19fX19LCAweDNCOiB7YzogWzEwODc4XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4ODBdfSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzEwODgyXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg4NF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjMsIDY1MDI0XX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAwXX19fX19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwN119LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwMF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MTFdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjFdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NTAzXX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA3XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwOTE3XX19fSwgMHgzQjoge2M6IFs4ODIzXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg5OF19fX0sIDB4NkE6IHtsOiB7MHgzQjoge2M6IFsxMDkxNl19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4OTBdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOV19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNV19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTUyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ1OF19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4OTRdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4OTZdfX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE5XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzRdfX19fX19fSwgMHgzQjoge2M6IFs2Ml19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2Qzoge2w6IHsweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjQ1XX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzZdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg4Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTZdfX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE5XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkyM119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODkyXX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fSwgYzogWzYyXX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDksIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Nzoge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODhdfX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjkwXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyODRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDNdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjg4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3NF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjFdfX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjddfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkyM119fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDddfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0XX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzhdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3MF19fX19fX19LCAweDU0OiB7bDogezB4M0I6IHtjOiBbNjJdfX0sIGM6IFs2Ml19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMV19fX19fSxcclxuICAgIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzcxMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbOTRdfX19fX0sIDB4NDE6IHtsOiB7MHg1Mjoge2w6IHsweDQ0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyOTJdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDYwXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjFdfX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDdBOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTQ3Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ1OV19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzI5NF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2ODoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTg5XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ1OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OF19fX19fX19LCAweDNCOiB7YzogWzg1OTZdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjFdfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjBdfX19fX19fSwgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDYzXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyOTNdfX19fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyOV19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4ODldfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwMV19fX19fSwgMHg2Qjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUzNF19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzAzXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYzXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxN119fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTNdfX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjEzXX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5N119fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk1XX19fX19fX19fX19LCAweDc5OiB7bDogezB4NjI6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjU5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzgyMDhdfX19fX19fX19fX19fSxcclxuICAgIDB4NDk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjA1XX19LCBjOiBbMjA1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwNl19fSwgYzogWzIwNl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDhdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA0XX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0NV19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDRdfX0sIGM6IFsyMDRdfX19fX19fX19LCAweDRBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzA2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI5OF19fX19fSwgMHg2Nzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg0OToge2w6IHsweDNCOiB7YzogWzg1MjBdfX19fX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODQ2NV19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NDhdfSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0N119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4OThdfX19fX19fX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzgyOTFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzgyOTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjVdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMwMl19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjhdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjk2XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDddfX0sIGM6IFsyMDddfX19fX19fSxcclxuICAgIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjM3XX19LCBjOiBbMjM3XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzgyOTFdfSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMzhdfX0sIGM6IFsyMzhdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgwXX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNzddfX19fX0sIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTYxXX19LCBjOiBbMTYxXX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg2NjBdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAyXX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzZdfX0sIGM6IFsyMzZdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbODUyMF19LCAweDY5OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjRdfX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OV19fX19fX19LCAweDZFOiB7bDogezB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTA3MTZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg0ODldfX19fX19fX19LCAweDZBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzA3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI5OV19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY0XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzMwNV19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4ODg3XX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQzN119fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTNdfX19fX19fX19LCAweDNCOiB7YzogWzg3MTJdfSwgMHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzM0XX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3MTddfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMwNV19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODkwXX19fX19fX0sIDB4M0I6IHtjOiBbODc0N119LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDg0XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNzc1XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MTJdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA1XX19fX19LCAweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMwM119fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTRdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1M119fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MTJdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxOTFdfX0sIGM6IFsxOTFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5OF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxMl19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDldfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg5NTNdfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODk0OF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODk0N119fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg3MTJdfX19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODI5MF19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjk3XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzldfX0sIGM6IFsyMzldfX19fX19fSxcclxuICAgIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzMwOF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc3XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3M119fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzJdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDI4XX19fX19fX19fX19LFxyXG4gICAgMHg2QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA5XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgxXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs1NjddfX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5OV19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTJdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA4XX19fX19fX19fX19LFxyXG4gICAgMHg0Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzEwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTBdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3OF19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDYxXX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzNl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzMF19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3NF19fX19fX19fX0sXHJcbiAgICAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTRdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxMV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgyXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxMl19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkzXX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExNl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1Nl19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMF19fX19fX19fX0sXHJcbiAgICAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUyM119fX19fX19fX19fSwgMHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzE0XX19fX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3Nl19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODQ2Nl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Mjoge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTVdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4NV19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTcxXX19LCBjOiBbMTcxXX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg2NzZdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjddfX19fX19fSwgMHgzQjoge2M6IFs4NTkyXX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI1XX19fX19LCAweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19LCAweDZDOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjE5XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDU1M119fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYxMV19fX19fX19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjEwXX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIxXX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjNdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI1XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNSwgNjUwMjRdfX19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDhdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDA5OF19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTIzXX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzkxXX19fX19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwNjM1XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYzOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDYzN119fX19fX19fX19fX19LCAweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMThdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzE2XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTIzXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4M119fX19fSwgMHg2NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDU1MF19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTldfX19fX19fX19LCAweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI2XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkyXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjEwXX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg2MzddfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjM2XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1MV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNl19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjBdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzddfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OV19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODFdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODgzXX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMiwgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTldfX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOF19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTIyXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg5MV19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5MV19fX19fSwgMHg2Njoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2MjBdfX19fX19fX19LCAweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDVdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4ODIyXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NF19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODYzN119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NjM2XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDYwMl19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwNF19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExM119fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0N119fX19fX19LCAweDNCOiB7YzogWzg4MTBdfSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTkwXX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwM119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTcyMl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMyMF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzZdfX19fX19fX19LCAweDNCOiB7YzogWzkxMzZdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODldfSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg5XX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4ODddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDhdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDhdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMjBdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDFdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDIxNF19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjE5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjI5XX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU3XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5N119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA0XX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcyN119fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19fX19fSwgMHg3QToge2w6IHsweDNCOiB7YzogWzk2NzRdfSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2NzRdfX19fX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTA3MzFdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MF19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MV19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2MDVdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODIwNl19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODg5NV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNDldfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDFdfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI0XX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4OTNdfX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA4OTVdfX19fX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTFdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzMyMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkxOF19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODczXX19fX19fX0sIDB4M0I6IHtjOiBbNjBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA3XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDVdfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTRdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjY2XX19fX19LCAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjQ2XX19fX19fX19fX0sIGM6IFs2MF19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OF19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA4LCA2NTAyNF19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fSxcclxuICAgIDB4NEM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzEzXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyM119fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE4XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA2XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxN119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MV19fX19fSwgMHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NzZdfX19fX19fSwgMHgzQjoge2M6IFs4NTkyXX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NDM6IHtsOiB7MHg2NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTY4XX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5M119fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg1XX19fX19fX0sIDB4M0I6IHtjOiBbODY0M119fX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzBdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk2XX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc0XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2N119LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg2XX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDNdfX19fX19fSwgMHgzQjoge2M6IFs4ODgyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5Ml19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg0XX19fX19fX0sIDB4M0I6IHtjOiBbODYzOV19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3OF19fX19fX19LCAweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODIyXX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzXX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgxOF19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc5XX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzNdfX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjBdfSwgMHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2Nl19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMTldfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMjldfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzBdfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMxXX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDFdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4M0I6IHtjOiBbNjBdfX0sIGM6IFs2MF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMF19fX19fSxcclxuICAgIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxNzVdfX0sIGM6IFsxNzVdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nzk0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDE2XX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODYxNF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYxNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjEyXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYxM119fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTY0Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA3OTNdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4NF19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMTJdfX19fX19fX19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc2Ml19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODczN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0ODddfX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxODFdfX0sIGM6IFsxODFdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTkyXX19fX19fX0sIDB4M0I6IHtjOiBbODczOV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fSwgYzogWzE4M119fX19fX19LCAweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg2M119fX0sIDB4M0I6IHtjOiBbODcyMl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2MF19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbMTA3OTRdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYzOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDk3MV19fX19fSwgMHg2NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIzMF19fX19fX19LCAweDZFOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODcxXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzY2XX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4ODhdfX19fX19fX19fX0sXHJcbiAgICAweDREOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTAxXX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUyXX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI4N119fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgwXX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NTA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzMl19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTldfX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzkyNF19fX19fSxcclxuICAgIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTFdfX19fX19fSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzMyNF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3MzYsIDg0MDJdfX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg2NCwgODI0XX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc3OSwgODI0XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszMjldfX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5ODM4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDY5XX19fX19fX0sIDB4M0I6IHtjOiBbOTgzOF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTYwXX19LCBjOiBbMTYwXX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyLCA4MjRdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODMsIDgyNF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOV19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzI4XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMyNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3NV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxLCA4MjRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MThdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg1XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMyXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5OV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjNdfX19fX19fSwgMHgzQjoge2M6IFs4ODAwXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NCwgODI0XX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAyXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM2XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzAsIDgyNF19fX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwOF19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODcwOF19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDddfX19fX0sIDB4Njc6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODE3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MjFdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfX19fX19fSwgMHg0Nzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMSwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTEsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYyMl19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk5NF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTU2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTU0XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxNV19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE0XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjAyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI5XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNiwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODE2XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNF19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTNdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU0XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjAsIDgyNF19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwLCA4NDAyXX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODEwLCA4MjRdfX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU5XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTcyXX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MTNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ5LCA4MjRdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg5NTMsIDgyNF19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTNdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1MV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTUwXX19fX19fX19fSwgMHg2RToge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODcxNl19LCAweDc2OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX19fSwgMHg2Mjoge2w6IHsweDNCOiB7YzogWzg5NThdfX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODk1N119fX19fX19fX19LCBjOiBbMTcyXX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NzQyXX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1LCA4NDIxXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNiwgODI0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzcyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgzMl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODgzMl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0NywgODI0XX19fSwgMHgzQjoge2M6IFs4NjAzXX0sIDB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA1LCA4MjRdfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTVdfX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAzXX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODkzOV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTVdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMzXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDNdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2OV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc3Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc3Ml19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fSwgMHg3MToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkzMF19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkzMV19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODgzNl19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0LCA4NDAyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDBdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5LCA4MjRdfX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMzXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI4LCA4MjRdfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzN119LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQxXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDFdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTUwLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQxXX19LCBjOiBbMjQxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MF19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk1N119LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMzVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NDcwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTldfX19fX19fX19LCAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODEsIDg0MDJdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc2XX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzddfX19fX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA1LCA4NDAyXX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzYyLCA4NDAyXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDBdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxOF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNDk4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA0LCA4NDAyXX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzYwLCA4NDAyXX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NCwgODQwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNDk5XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1LCA4NDAyXX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjQsIDg0MDJdfX19fX19fX19LCAweDU2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc4XX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMxXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5OF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjJdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM1XX19fX19fX19fX19fX0sXHJcbiAgICAweDRFOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzMyM119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzI3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMyNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUzXX19fX19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4NEQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg0Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4MV19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODI4OF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTYwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDY5XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5ODhdfSwgMHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAyXX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg0Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODEzXX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEzXX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODAwXX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NzAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODE1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MTddfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODExLCA4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyNV19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0ODoge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDMsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MTZdfX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODI0XX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgyMF19fX19fX19fX19fX19fX19fX19LCAweDRFOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkxNCwgODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkxMywgODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUwOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTI4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTZdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NTQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFs4OTM5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg1Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ3LCA4MjRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkzMF19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDgsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0MF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjldfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODMxLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQxXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2OV19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzVdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3N119fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3N119fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDldfX0sIGM6IFsyMDldfX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI1XX19fX19LFxyXG4gICAgMHg0Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTFdfX0sIGM6IFsyMTFdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjEyXX19LCBjOiBbMjEyXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NF19fX19fSwgMHg2NDoge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzM2XX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM4XX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgyXX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTBdfX0sIGM6IFsyMTBdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzMyXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTM3XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkyN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzNF19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDQzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIyMF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzNl19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc4XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMjE2XX19LCBjOiBbMjE2XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjEzXX19LCBjOiBbMjEzXX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA3XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIxNF19fSwgYzogWzIxNF19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjU0XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4Ml19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MF19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQzXX19LCBjOiBbMjQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI0NF19fSwgYzogWzI0NF19LCAweDNCOiB7YzogWzg4NThdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg2XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzM3XX19fX19fX19fSwgMHg2OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA4MDhdfX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX0sIDB4NzM6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4NF19fX19fX19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzOV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY4N119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTA4XX19fX19LCAweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzczMV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0Ml19fSwgYzogWzI0Ml19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODldfX19fX0sIDB4Njg6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY3N119fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbOTM3XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY4Nl19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNjgzXX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjg4XX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzMzXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTY5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzk1OV19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY3OF19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY3OV19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDY4MV19fX19fX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwODQ1XX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfSwgMHg2Rjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODUwMF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxNzBdfX0sIGM6IFsxNzBdfSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE4Nl19fSwgYzogWzE4Nl19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4ODg2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MzhdfX19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwODM5XX19fX19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA4NDNdfX19fX0sIDB4NTM6IHtsOiB7MHgzQjoge2M6IFs5NDE2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMjQ4XX19LCBjOiBbMjQ4XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NTZdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ1XX19LCBjOiBbMjQ1XX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgwNl19fX19fSwgMHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI0Nl19fSwgYzogWzI0Nl19fX19fSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjFdfX19fX19fX19fX0sXHJcbiAgICAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTgyXX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX19fX0sIGM6IFsxODJdfSwgMHgzQjoge2M6IFs4NzQxXX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5OTVdfX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMTAwNV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4N119fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzddfX19fX19fSwgMHg2OToge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs0Nl19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg4NjldfX19LCAweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODI0MV19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDldfX19fX0sIDB4Njg6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2Nl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19LCAweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTc0Ml19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjBdfSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2Njoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTgyXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4NDYzXX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NDYyXX19fX19fX0sIDB4NkI6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fX19LCAweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzg3XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDNCOiB7YzogWzg4NjJdfX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzg2XX19fX19fX0sIDB4M0I6IHtjOiBbNDNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODcyNF19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc4OV19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODY2XX19fSwgMHg2RDoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTc3XX19LCBjOiBbMTc3XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDc5MF19fX19fX19LCAweDc0OiB7bDogezB4Nzc6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwNzkxXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19LCAweDZGOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzNdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTYxXX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzE2M119fSwgYzogWzE2M119fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM1XX19fX19LCAweDNCOiB7YzogWzg4MjZdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwOTM1XX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzddfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkzM119fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19LCAweDNCOiB7YzogWzEwOTI3XX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMxXX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjQyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDczXX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODcxOV19fX0sIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMDZdfX19fX19fX19LCAweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk3OF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4OTc5XX19fX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODczM119LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODMwXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODgwXX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2OF19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODIwMF19fX19fX19fX19fX19LFxyXG4gICAgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTVdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4M119fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTM0XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTI4XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTc3XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTM5XX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyNl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyN119fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODMwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDNdfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxOV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fSwgMHgzQjoge2M6IFs4NzU5XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc5XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTM2XX19fX19fX0sXHJcbiAgICAweDUxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4NF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTgwXX19fX19fX0sIDB4NTU6IHtsOiB7MHg0Rjoge2w6IHsweDU0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3MToge2w6IHsweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjJdfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI3OV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDZdfX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjFdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzc0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzYzXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTldfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM0XX19LCBjOiBbMzRdfX19fX19fSxcclxuICAgIDB4NzI6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjddfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1OF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTI0XX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NjUsIDgxN119fX0sIDB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQxXX19fX19fX19fSwgMHg2NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA2NzVdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMTddfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjQyXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwNjYxXX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTAyMTddfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4N119fSwgYzogWzE4N119fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjEzXX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODY3N119LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyOF19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbMTA1NDddfX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MThdfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MjBdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTY1XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjEyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX0sIDB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUyMl19fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzU4XX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDc0XX19fX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDldfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDA5OV19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI1XX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzkzXX19fX19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwNjM2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYzOF19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDY0MF19fX19fX19fX19fX19LCAweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNDVdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzQzXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NjldfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTI1XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4OF19fX19fSwgMHg2NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDU1MV19fX19fSwgMHg2Qzoge2w6IHsweDY0OiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MDFdfX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODIyMV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjddfX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3NV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NDVdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX0sIGM6IFsxNzRdfX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMV19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5Nl19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODY0MV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NjQwXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDYwNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFs5NjFdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjExXX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg2NDFdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwOF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzczMF19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3ODddfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODIwN119fX19fSwgMHg2RDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTM3XX19fX19fX19fSwgMHgzQjoge2M6IFs5MTM3XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTBdfX19fX19fX19LCAweDZGOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMjFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDJdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjMwXX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTYzXX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA1XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbNDFdfSwgMHg2Nzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2NDRdfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzcwXX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDldfX19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjUwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA3XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX0sIDB4NzE6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzkzXX19fSwgMHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxN119LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODIxN119fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkwOF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA2XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NV19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwNzAyXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMF19fX19fX19fX19fX19LCAweDc4OiB7bDogezB4M0I6IHtjOiBbODQ3OF19fX19fSxcclxuICAgIDB4NTI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQwXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMTldfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDhdfSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MThdfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMl19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDJdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1Nl19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MDddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NDc6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX0sIGM6IFsxNzRdfX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs5MjldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NzddfX19fX19fSwgMHgzQjoge2M6IFs4NTk0XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY0NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OF19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjldfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTVdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg5XX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODFdfX19fX19fSwgMHgzQjoge2M6IFs4NjQyXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxNF19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY2XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODddfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwNF19fX19fX19LCAweDNCOiB7YzogWzg4ODNdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzVdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg4XX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODBdfX19fX19fSwgMHgzQjoge2M6IFs4NjM4XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc5XX19fX19fX0sIDB4M0I6IHtjOiBbODY0MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3N119fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHg0OToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNjA4XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3NV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjVdfX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDc0MF19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NTM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTJdfX19fX19fX19LCAweDNCOiB7YzogWzEwOTQwXX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM0OF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1N119fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg2XX19fX19LCAweDQ4OiB7bDogezB4NDM6IHtsOiB7MHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2NF19fX19fX19LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkzMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzI4XX19fX19fX19fX19fX19fX19fX19fSwgMHg0Rjoge2w6IHsweDQ2OiB7bDogezB4NTQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2OF19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzhdfX19fX19fSwgMHg3MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzMwXX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTYzM119LCAweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTFdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ3XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDldfX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODJdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTAyXX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTEyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzhdfX19fX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI3XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI4XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fX19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NTQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzIxXX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg5MTNdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNV19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODM5XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTEzXX19fX19fX19fX19fX0sXHJcbiAgICAweDczOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM0N119fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM2XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTNdfX19fX19fX19LCAweDNCOiB7YzogWzg4MjddfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOF19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MV19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkzMl19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzhdfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkzNF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzFdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODMxXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg2NV19fX0sIDB4M0I6IHtjOiBbODkwMV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDUzM119fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDBdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE2N119fSwgYzogWzE2N119fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzU5XX19fX19LCAweDczOiB7bDogezB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fX19LCAweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19LCAweDZFOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19LCAweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDAzOF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTJdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTk0XX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTgzOV19fX19fX19LCAweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5N119fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5Nl19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNzNdfX0sIGM6IFsxNzNdfX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg1OF19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc3MV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTEwXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkxMl19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTA5XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkxMV19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3NF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzg4XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjEwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgwM119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3MjRdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODczOV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTIyXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyNF19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MjQsIDY1MDI0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5MDIzXX19fX19LCAweDNCOiB7YzogWzEwNjkyXX19fSwgMHgzQjoge2M6IFs0N119fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyNF19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg1MV19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODg1MSwgNjUwMjRdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg1Ml19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODg1MiwgNjUwMjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDldfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg0OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg1MF19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTYzM119fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4M0I6IHtjOiBbOTYzM119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA4XX19fX19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTk1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTczNF19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTczM119fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzVdfX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDFdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0N119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDJdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDk0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODM4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk0OV19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDJdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1XX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwOTUxXX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDk2NV19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDk2M119fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwOTM2XX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgyOV19fX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI4XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzhdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkzNF19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzddfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzIxXX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbOTgzNF19fX19fSwgMHg3MDoge2w6IHsweDMxOiB7bDogezB4M0I6IHtjOiBbMTg1XX19LCBjOiBbMTg1XX0sIDB4MzI6IHtsOiB7MHgzQjoge2M6IFsxNzhdfX0sIGM6IFsxNzhdfSwgMHgzMzoge2w6IHsweDNCOiB7YzogWzE3OV19fSwgYzogWzE3OV19LCAweDNCOiB7YzogWzg4MzVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0Ml19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDk2OF19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDhdfX19fX19fX19LCAweDY4OiB7bDogezB4NzM6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTAxODVdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY3XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE5XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ2XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0M119fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQ0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTZdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTJdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY0XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTY2XX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDUzNF19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDFdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzOF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzIyM119fSwgYzogWzIyM119fX19fX19fX0sXHJcbiAgICAweDU0OiB7bDogezB4NjE6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzldfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTMyXX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTZdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzU0XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNThdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4N119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjBdfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI4NywgODIwMl19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwMV19fX19fX19fX19fX19fX19fSwgMHg0ODoge2w6IHsweDRGOiB7bDogezB4NTI6IHtsOiB7MHg0RToge2w6IHsweDNCOiB7YzogWzIyMl19fSwgYzogWzIyMl19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzNdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOV19fX19fX19LCAweDUyOiB7bDogezB4NDE6IHtsOiB7MHg0NDoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODQ4Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg0MTFdfX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTgzXX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzU4XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjJdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzNV19fX19fX19fX19fSxcclxuICAgIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk4Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NjRdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MF19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzU1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTBdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTgxXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTNdfX19fX0sIDB4Njg6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzg3NTZdfX19LCAweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTJdfSwgMHg3Mzoge2w6IHsweDc5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODIwMV19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNTRdfX0sIGM6IFsyNTRdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzczMl19fX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODAxXX19fX19LCAweDNCOiB7YzogWzg4NjRdfX19LCAweDNCOiB7YzogWzIxNV19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MDBdfX19fSwgYzogWzIxNV19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OV19fX19fX19LCAweDZGOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTM2XX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTAxNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTkzXX19fX19fX0sIDB4M0I6IHtjOiBbODg2OF19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY1XX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA5NzBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTM3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDRdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2M119fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4ODRdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4ODVdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NzA4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzk2XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MTBdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgwOV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwNzAxXX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MTFdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDdBOiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbOTE4Nl19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA5XX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTRdfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExNV19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzU5XX19fX19fX19fX19LCAweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMl19fX19fX19LCAweDZGOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA2XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMThdfX0sIGM6IFsyMThdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwN119LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NjldfX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjRdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTldfX0sIGM6IFsyMTldfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU5XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNjhdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjE3XX19LCBjOiBbMjE3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2Ml19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxODNdfX19LCAweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzkxNDFdfX19fX19fX19fX19fX19LCAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5MTgxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4OTldfSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NDZdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNzBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTRdfX19fX19fSwgMHgzQjoge2M6IFs4NTkzXX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX19fX19fX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTc4XX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTMzXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODRdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYwXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIyMF19fSwgYzogWzIyMF19fX19fX19LFxyXG4gICAgMHg3NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNTBdfX0sIGM6IFsyNTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMThdfX19fX0sIDB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzY1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjUxXX19LCBjOiBbMjUxXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDVdfX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OV19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MDZdfX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMl19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0OV19fSwgYzogWzI0OV19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTVdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MzldfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYzOF19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzk2MDBdfX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTg4XX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5ODhdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3NV19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTcyMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNjNdfX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzE2OF19fSwgYzogWzE2OF19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNzFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY2XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjVdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk3OF19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY1XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODldfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc0XX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjddfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTBdfX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDRdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2MV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NTNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTJdfX0sIGM6IFsyNTJdfX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjNdfX19fX19fX19fX19fX19LFxyXG4gICAgMHg3Njoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY1Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19fX19fX19LCAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDA4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTgyXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5N119LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDA5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk2Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDIsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NSwgNjUwMjRdfX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTYsIDY1MDI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODRdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTg1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NF19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NjZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4OTFdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NDJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE1XX19fX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODg4Ml19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM0LCA4NDAyXX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2N119fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1NSwgNjUwMjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfX19fX19fSwgMHg3MDoge2w6IHsweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0MywgNjUwMjRdfX19fX19fX19fX0sIDB4N0E6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4N0E6IHtsOiB7MHg2MToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTA2NTBdfX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTg3XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDJdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODczXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDk4Ml19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzVdfX19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk3XX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzgyMTRdfSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg0Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAwNzJdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2OF19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAyXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODVdfX19fX19fSwgMHg3Njoge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NF19fX19fX19fX19fX19LFxyXG4gICAgMHg1Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTZdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTBdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg2XX19fX19fX19fSxcclxuICAgIDB4Nzc6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODQ3XX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NDNdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3OTNdfX19fX19fX19LCAweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODQ3Ml19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE2XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2OF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODQ3Ml19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMl19fX19fX19fX0sXHJcbiAgICAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2NDoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjFdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTddfX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIzMV19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk1OF19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDIzNl19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTVdfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2OV19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTNdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3NTRdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTNdfX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDc1OF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTZdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NTFdfX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19LFxyXG4gICAgMHg1ODoge2w6IHsweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjZdfX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0M119fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4N119fX19fX19fX0sXHJcbiAgICAweDU5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyMV19fSwgYzogWzIyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzc0XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTJdfX19fX0sIDB4NDk6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0NF19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4OF19fX19fX19LCAweDU1OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNzBdfX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNzZdfX19fX19fX19LFxyXG4gICAgMHg3OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNTNdfX0sIGM6IFsyNTNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAzXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzVdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTldfX19fX0sIDB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzE2NV19fSwgYzogWzE2NV19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOF19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTExXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTcwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDE0XX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwMl19fX19fSwgMHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjU1XX19LCBjOiBbMjU1XX19fX19fX0sXHJcbiAgICAweDVBOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM3N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzgxXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDddfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NTc6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg5XX19fX19fX19fSxcclxuICAgIDB4N0E6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc4XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODJdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3OV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszODBdfX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ4OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1MF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTldfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3OF19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjldfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTVdfX19fX19fSwgMHg3Nzoge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNV19fX0sIDB4NkU6IHtsOiB7MHg2QToge2w6IHsweDNCOiB7YzogWzgyMDRdfX19fX19fX19XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBVTklDT0RFLkNPREVfUE9JTlRTO1xuXG4vL1V0aWxzXG5cbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cbi8vQWx3YXlzIHBlcmZvcm0gaW5saW5pbmcgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9ucyAoJ25vZGUgLS10cmFjZS1pbmxpbmluZycpLlxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhERkZGIHx8IGNwID4gMHgxMEZGRkY7XG59XG5cbmZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihjcDEsIGNwMikge1xuICAgIHJldHVybiBjcDEgPj0gMHhEODAwICYmIGNwMSA8PSAweERCRkYgJiYgY3AyID49IDB4REMwMCAmJiBjcDIgPD0gMHhERkZGO1xufVxuXG5mdW5jdGlvbiBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIChjcDEgLSAweEQ4MDApICogMHg0MDAgKyAweDI0MDAgKyBjcDI7XG59XG5cbi8vUHJlcHJvY2Vzc29yXG4vL05PVEU6IEhUTUwgaW5wdXQgcHJlcHJvY2Vzc2luZ1xuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtKVxudmFyIFByZXByb2Nlc3NvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB0aGlzLndyaXRlKGh0bWwpO1xuXG4gICAgLy9OT1RFOiBvbmUgbGVhZGluZyBVK0ZFRkYgQllURSBPUkRFUiBNQVJLIGNoYXJhY3RlciBtdXN0IGJlIGlnbm9yZWQgaWYgYW55IGFyZSBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJlYW0uXG4gICAgdGhpcy5wb3MgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCgwKSA9PT0gJC5CT00gPyAwIDogLTE7XG5cbiAgICB0aGlzLmdhcFN0YWNrID0gW107XG4gICAgdGhpcy5sYXN0R2FwUG9zID0gLTE7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIGlmICh0aGlzLmh0bWwpIHtcbiAgICAgICAgdGhpcy5odG1sID0gdGhpcy5odG1sLnN1YnN0cmluZygwLCB0aGlzLnBvcyArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MgKyAxLCB0aGlzLmh0bWwubGVuZ3RoKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuaHRtbCA9IGh0bWw7XG5cblxuICAgIHRoaXMubGFzdENoYXJQb3MgPSB0aGlzLmh0bWwubGVuZ3RoIC0gMTtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb3MrKztcblxuICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGFzdENoYXJQb3MpXG4gICAgICAgIHJldHVybiAkLkVPRjtcblxuICAgIHZhciBjcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblxuICAgIC8vTk9URTogYW55IFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlclxuICAgIC8vbXVzdCBiZSBpZ25vcmVkLlxuICAgIGlmICh0aGlzLnNraXBOZXh0TmV3TGluZSAmJiBjcCA9PT0gJC5MSU5FX0ZFRUQpIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRkR2FwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XG4gICAgfVxuXG4gICAgLy9OT1RFOiBhbGwgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlcnMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnNcbiAgICBpZiAoY3AgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICQuTElORV9GRUVEO1xuICAgIH1cblxuICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAvL09QVElNSVpBVElPTjogZmlyc3QgcGVyZm9ybSBjaGVjayBpZiB0aGUgY29kZSBwb2ludCBpbiB0aGUgYWxsb3dlZCByYW5nZSB0aGF0IGNvdmVycyBtb3N0IGNvbW1vblxuICAgIC8vSFRNTCBpbnB1dCAoZS5nLiBBU0NJSSBjb2RlcykgdG8gYXZvaWQgcGVyZm9ybWFuY2UtY29zdCBvcGVyYXRpb25zIGZvciBoaWdoLXJhbmdlIGNvZGUgcG9pbnRzLlxuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgPyB0aGlzLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50KGNwKSA6IGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fcHJvY2Vzc0hpZ2hSYW5nZUNvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xuICAgIC8vTk9URTogdHJ5IHRvIHBlZWsgYSBzdXJyb2dhdGUgcGFpclxuICAgIGlmICh0aGlzLnBvcyAhPT0gdGhpcy5sYXN0Q2hhclBvcykge1xuICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcblxuICAgICAgICBpZiAoaXNTdXJyb2dhdGVQYWlyKGNwLCBuZXh0Q3ApKSB7XG4gICAgICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpci4gUGVlayBwYWlyIGNoYXJhY3RlciBhbmQgcmVjYWxjdWxhdGUgY29kZSBwb2ludC5cbiAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgICAgICBjcCA9IGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AsIG5leHRDcCk7XG5cbiAgICAgICAgICAgIC8vTk9URTogYWRkIGdhcCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkIGR1cmluZyByZXRyZWF0XG4gICAgICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSlcbiAgICAgICAgY3AgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcblxuICAgIHJldHVybiBjcDtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUuX2FkZEdhcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmdhcFN0YWNrLnB1c2godGhpcy5sYXN0R2FwUG9zKTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLnBvcztcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUucmV0cmVhdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMubGFzdEdhcFBvcykge1xuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnBvcy0tO1xuICAgIH1cblxuICAgIHRoaXMucG9zLS07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFByZXByb2Nlc3NvciA9IHJlcXVpcmUoJy4vcHJlcHJvY2Vzc29yJyksXHJcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxyXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXHJcbiAgICBOQU1FRF9FTlRJVFlfVFJJRSA9IHJlcXVpcmUoJy4vbmFtZWRfZW50aXR5X3RyaWUnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFMsXHJcbiAgICAkJCA9IFVOSUNPREUuQ09ERV9QT0lOVF9TRVFVRU5DRVM7XHJcblxyXG4vL1JlcGxhY2VtZW50IGNvZGUgcG9pbnRzIGZvciBudW1lcmljIGVudGl0aWVzXHJcbnZhciBOVU1FUklDX0VOVElUWV9SRVBMQUNFTUVOVFMgPSB7XHJcbiAgICAweDAwOiAweEZGRkQsIDB4MEQ6IDB4MDAwRCwgMHg4MDogMHgyMEFDLCAweDgxOiAweDAwODEsIDB4ODI6IDB4MjAxQSwgMHg4MzogMHgwMTkyLCAweDg0OiAweDIwMUUsXHJcbiAgICAweDg1OiAweDIwMjYsIDB4ODY6IDB4MjAyMCwgMHg4NzogMHgyMDIxLCAweDg4OiAweDAyQzYsIDB4ODk6IDB4MjAzMCwgMHg4QTogMHgwMTYwLCAweDhCOiAweDIwMzksXHJcbiAgICAweDhDOiAweDAxNTIsIDB4OEQ6IDB4MDA4RCwgMHg4RTogMHgwMTdELCAweDhGOiAweDAwOEYsIDB4OTA6IDB4MDA5MCwgMHg5MTogMHgyMDE4LCAweDkyOiAweDIwMTksXHJcbiAgICAweDkzOiAweDIwMUMsIDB4OTQ6IDB4MjAxRCwgMHg5NTogMHgyMDIyLCAweDk2OiAweDIwMTMsIDB4OTc6IDB4MjAxNCwgMHg5ODogMHgwMkRDLCAweDk5OiAweDIxMjIsXHJcbiAgICAweDlBOiAweDAxNjEsIDB4OUI6IDB4MjAzQSwgMHg5QzogMHgwMTUzLCAweDlEOiAweDAwOUQsIDB4OUU6IDB4MDE3RSwgMHg5RjogMHgwMTc4XHJcbn07XHJcblxyXG4vL1N0YXRlc1xyXG52YXIgREFUQV9TVEFURSA9ICdEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEUnLFxyXG4gICAgUkNEQVRBX1NUQVRFID0gJ1JDREFUQV9TVEFURScsXHJcbiAgICBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURScsXHJcbiAgICBSQVdURVhUX1NUQVRFID0gJ1JBV1RFWFRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfU1RBVEUgPSAnU0NSSVBUX0RBVEFfU1RBVEUnLFxyXG4gICAgUExBSU5URVhUX1NUQVRFID0gJ1BMQUlOVEVYVF9TVEFURScsXHJcbiAgICBUQUdfT1BFTl9TVEFURSA9ICdUQUdfT1BFTl9TVEFURScsXHJcbiAgICBFTkRfVEFHX09QRU5fU1RBVEUgPSAnRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFRBR19OQU1FX1NUQVRFID0gJ1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURScsXHJcbiAgICBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUgPSAnQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURScsXHJcbiAgICBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFID0gJ1NFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUnLFxyXG4gICAgQk9HVVNfQ09NTUVOVF9TVEFURSA9ICdCT0dVU19DT01NRU5UX1NUQVRFJyxcclxuICAgIE1BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFID0gJ01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9TVEFURScsXHJcbiAgICBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9EQVNIX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfU1RBVEUgPSAnQ09NTUVOVF9FTkRfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfQkFOR19TVEFURSA9ICdDT01NRU5UX0VORF9CQU5HX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1RBVEUgPSAnRE9DVFlQRV9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURSA9ICdCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQk9HVVNfRE9DVFlQRV9TVEFURSA9ICdCT0dVU19ET0NUWVBFX1NUQVRFJyxcclxuICAgIENEQVRBX1NFQ1RJT05fU1RBVEUgPSAnQ0RBVEFfU0VDVElPTl9TVEFURSc7XHJcblxyXG4vL1V0aWxzXHJcblxyXG4vL09QVElNSVpBVElPTjogdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBtb3ZlZCBvdXQgb2YgdGhpcyBtb2R1bGUuIFY4IENyYW5rc2hhZnQgd2lsbCBub3QgaW5saW5lXHJcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cclxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXHJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjcCkge1xyXG4gICAgcmV0dXJuIGNwID09PSAkLlNQQUNFIHx8IGNwID09PSAkLkxJTkVfRkVFRCB8fCBjcCA9PT0gJC5UQUJVTEFUSU9OIHx8IGNwID09PSAkLkZPUk1fRkVFRDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaURpZ2l0KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5ESUdJVF8wICYmIGNwIDw9ICQuRElHSVRfOTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaVVwcGVyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xyXG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fU01BTExfQSAmJiBjcCA8PSAkLkxBVElOX1NNQUxMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IGlzQXNjaWlVcHBlcihjcCkgfHwgaXNBc2NpaUxvd2VyKGNwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEaWdpdChjcCwgaXNIZXgpIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IChpc0hleCAmJiAoKGNwID49ICQuTEFUSU5fQ0FQSVRBTF9BICYmIGNwIDw9ICQuTEFUSU5fQ0FQSVRBTF9GKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfRikpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xyXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgKyAweDAwMjA7XHJcbn1cclxuXHJcbi8vTk9URTogU3RyaW5nLmZyb21DaGFyQ29kZSgpIGZ1bmN0aW9uIGNhbiBoYW5kbGUgb25seSBjaGFyYWN0ZXJzIGZyb20gQk1QIHN1YnNldC5cclxuLy9Tbywgd2UgbmVlZCB0byB3b3JrYXJvdW5kIHRoaXMgbWFudWFsbHkuXHJcbi8vKHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZnJvbUNoYXJDb2RlI0dldHRpbmdfaXRfdG9fd29ya193aXRoX2hpZ2hlcl92YWx1ZXMpXHJcbmZ1bmN0aW9uIHRvQ2hhcihjcCkge1xyXG4gICAgaWYgKGNwIDw9IDB4RkZGRilcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjcCk7XHJcblxyXG4gICAgY3AgLT0gMHgxMDAwMDtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwIHwgY3AgJiAweDNGRik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXNjaWlMb3dlckNoYXIoY3ApIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG59XHJcblxyXG4vL1Rva2VuaXplclxyXG52YXIgVG9rZW5pemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucHJlcHJvY2Vzc29yID0gbmV3IFByZXByb2Nlc3NvcihodG1sKTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUgPSBbXTtcclxuXHJcbiAgICB0aGlzLmFsbG93Q0RBVEEgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMucmV0dXJuU3RhdGUgPSAnJztcclxuXHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zID0gMDtcclxuXHJcbiAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcbiAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSAnJztcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRBdHRyID0gbnVsbDtcclxuXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUVudGl0aWVzRGVjb2RpbmcgPSAhb3B0aW9ucy5kZWNvZGVIdG1sRW50aXRpZXM7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2F0aW9uSW5mbylcclxuICAgICAgICAgICAgTG9jYXRpb25JbmZvTWl4aW4uYXNzaWduKHRoaXMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9Ub2tlbiB0eXBlc1xyXG5Ub2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOID0gJ0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTiA9ICdOVUxMX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiA9ICdXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gPSAnU1RBUlRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkVORF9UQUdfVE9LRU4gPSAnRU5EX1RBR19UT0tFTic7XHJcblRva2VuaXplci5DT01NRU5UX1RPS0VOID0gJ0NPTU1FTlRfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRE9DVFlQRV9UT0tFTiA9ICdET0NUWVBFX1RPS0VOJztcclxuVG9rZW5pemVyLkVPRl9UT0tFTiA9ICdFT0ZfVE9LRU4nO1xyXG5cclxuLy9Ub2tlbml6ZXIgaW5pdGlhbCBzdGF0ZXMgZm9yIGRpZmZlcmVudCBtb2Rlc1xyXG5Ub2tlbml6ZXIuTU9ERSA9IFRva2VuaXplci5wcm90b3R5cGUuTU9ERSA9IHtcclxuICAgIERBVEE6IERBVEFfU1RBVEUsXHJcbiAgICBSQ0RBVEE6IFJDREFUQV9TVEFURSxcclxuICAgIFJBV1RFWFQ6IFJBV1RFWFRfU1RBVEUsXHJcbiAgICBTQ1JJUFRfREFUQTogU0NSSVBUX0RBVEFfU1RBVEUsXHJcbiAgICBQTEFJTlRFWFQ6IFBMQUlOVEVYVF9TVEFURVxyXG59O1xyXG5cclxuLy9TdGF0aWNcclxuVG9rZW5pemVyLmdldFRva2VuQXR0ciA9IGZ1bmN0aW9uICh0b2tlbiwgYXR0ck5hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBhdHRyTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuLmF0dHJzW2ldLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgdG9rZW5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5RdWV1ZS5sZW5ndGgpXHJcbiAgICAgICAgdGhpc1t0aGlzLnN0YXRlXSh0aGlzLl9jb25zdW1lKCkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuUXVldWUuc2hpZnQoKTtcclxufTtcclxuXHJcbi8vQ29uc3VtcHRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MrKztcclxuICAgIHJldHVybiB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcy0tO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lU2V2ZXJhbCA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgd2hpbGUgKGNvdW50LS0pXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWNvbnN1bWVJblN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBzdGFydENwLCBjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICB2YXIgcm9sbGJhY2tQb3MgPSB0aGlzLmNvbnN1bXB0aW9uUG9zLFxyXG4gICAgICAgIGlzTWF0Y2ggPSB0cnVlLFxyXG4gICAgICAgIHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLmxlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuUG9zID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgcGF0dGVybkNwID0gdm9pZCAwO1xyXG5cclxuICAgIGZvciAoOyBwYXR0ZXJuUG9zIDwgcGF0dGVybkxlbmd0aDsgcGF0dGVyblBvcysrKSB7XHJcbiAgICAgICAgaWYgKHBhdHRlcm5Qb3MgPiAwKVxyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0dGVybkNwID0gcGF0dGVybltwYXR0ZXJuUG9zXTtcclxuXHJcbiAgICAgICAgaWYgKGNwICE9PSBwYXR0ZXJuQ3AgJiYgKGNhc2VTZW5zaXRpdmUgfHwgY3AgIT09IHRvQXNjaWlMb3dlckNvZGVQb2ludChwYXR0ZXJuQ3ApKSkge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTWF0Y2gpXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbCh0aGlzLmNvbnN1bXB0aW9uUG9zIC0gcm9sbGJhY2tQb3MpO1xyXG5cclxuICAgIHJldHVybiBpc01hdGNoO1xyXG59O1xyXG5cclxuLy9Mb29rYWhlYWRcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbG9va2FoZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNwID0gdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcclxuICAgIHRoaXMucHJlcHJvY2Vzc29yLnJldHJlYXQoKTtcclxuXHJcbiAgICByZXR1cm4gY3A7XHJcbn07XHJcblxyXG4vL1RlbXAgYnVmZmVyXHJcblRva2VuaXplci5wcm90b3R5cGUuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRlbXBCdWZmLmxlbmd0aCAhPT0gJCQuU0NSSVBUX1NUUklORy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZW1wQnVmZi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLnRlbXBCdWZmW2ldICE9PSAkJC5TQ1JJUFRfU1RSSU5HW2ldKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGNyZWF0aW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcclxuICAgICAgICBhdHRyczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmJ1aWxkRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIGlnbm9yZWQ6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZEVuZFRhZ1Rva2VuKHRhZ05hbWVGaXJzdENoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5DT01NRU5UX1RPS0VOLFxyXG4gICAgICAgIGRhdGE6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRG9jdHlwZVRva2VuID0gZnVuY3Rpb24gKGRvY3R5cGVOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4sXHJcbiAgICAgICAgbmFtZTogZG9jdHlwZU5hbWVGaXJzdENoIHx8ICcnLFxyXG4gICAgICAgIGZvcmNlUXVpcmtzOiBmYWxzZSxcclxuICAgICAgICBwdWJsaWNJZDogbnVsbCxcclxuICAgICAgICBzeXN0ZW1JZDogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIGNoYXJzOiBjaFxyXG4gICAgfTtcclxufTtcclxuXHJcbi8vVGFnIGF0dHJpYnV0ZXNcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQXR0ciA9IGZ1bmN0aW9uIChhdHRyTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSB7XHJcbiAgICAgICAgbmFtZTogYXR0ck5hbWVGaXJzdENoLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzRHVwbGljYXRlQXR0ciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRoaXMuY3VycmVudFRva2VuLCB0aGlzLmN1cnJlbnRBdHRyLm5hbWUpICE9PSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbGVhdmVBdHRyTmFtZSA9IGZ1bmN0aW9uICh0b1N0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gdG9TdGF0ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzRHVwbGljYXRlQXR0cigpKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmF0dHJzLnB1c2godGhpcy5jdXJyZW50QXR0cik7XHJcbn07XHJcblxyXG4vL0FwcHJvcHJpYXRlIGVuZCB0YWcgdG9rZW5cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNhcHByb3ByaWF0ZS1lbmQtdGFnLXRva2VuKVxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0U3RhcnRUYWdOYW1lID09PSB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lO1xyXG59O1xyXG5cclxuLy9Ub2tlbiBlbWlzc2lvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIC8vTk9URTogc3RvcmUgZW1pdGVkIHN0YXJ0IHRhZydzIHRhZ05hbWUgdG8gZGV0ZXJtaW5lIGlzIHRoZSBmb2xsb3dpbmcgZW5kIHRhZyB0b2tlbiBpcyBhcHByb3ByaWF0ZS5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xyXG4gICAgICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0RU9GVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh7dHlwZTogVG9rZW5pemVyLkVPRl9UT0tFTn0pO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXJzIGVtaXNzaW9uXHJcblxyXG4vL09QVElNSVpBVElPTjogc3BlY2lmaWNhdGlvbiB1c2VzIG9ubHkgb25lIHR5cGUgb2YgY2hhcmFjdGVyIHRva2VucyAob25lIHRva2VuIHBlciBjaGFyYWN0ZXIpLlxyXG4vL1RoaXMgY2F1c2VzIGEgaHVnZSBtZW1vcnkgb3ZlcmhlYWQgYW5kIGEgbG90IG9mIHVubmVjZXNzYXJ5IHBhcnNlciBsb29wcy4gcGFyc2U1IHVzZXMgMyBncm91cHMgb2YgY2hhcmFjdGVycy5cclxuLy9JZiB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCwgcGFyc2VyIGNhbiBwcm9jZXNzIGl0XHJcbi8vYXMgYSBzaW5nbGUgc29saWQgY2hhcmFjdGVyIHRva2VuLlxyXG4vL1NvLCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBjaGFyYWN0ZXIgdG9rZW5zIGluIHBhcnNlNTpcclxuLy8xKU5VTExfQ0hBUkFDVEVSX1RPS0VOIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxyXG4vLzIpV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4gLSBhbnkgd2hpdGVzcGFjZS9uZXctbGluZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXG4gIFxcclxcdCAgIFxcZicpXHJcbi8vMylDSEFSQUNURVJfVE9LRU4gLSBhbnkgY2hhcmFjdGVyIHNlcXVlbmNlIHdoaWNoIGRvbid0IGJlbG9uZyB0byBncm91cHMgMSBhbmQgMiAoZS5nLiAnYWJjZGVmMTIzNEBAIyQlXicpXHJcblRva2VuaXplci5wcm90b3R5cGUuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUgIT09IHR5cGUpXHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5jaGFycyArPSBjaDtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4odHlwZSwgY2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdENvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgdmFyIHR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0eXBlID0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCB0b0NoYXIoY3ApKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyA9IGZ1bmN0aW9uIChjb2RlUG9pbnRzKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjb2RlUG9pbnRzW2ldKTtcclxufTtcclxuXHJcbi8vTk9URTogdXNlZCB0aGVuIHdlIGVtaXQgY2hhcmFjdGVyIGV4cGxpY2l0bHkuIFRoaXMgaXMgYWx3YXlzIGEgbm9uLXdoaXRlc3BhY2UgYW5kIGEgbm9uLW51bGwgY2hhcmFjdGVyLlxyXG4vL1NvIHdlIGNhbiBhdm9pZCBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLlxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q2hhciA9IGZ1bmN0aW9uIChjaCkge1xyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4sIGNoKTtcclxufTtcclxuXHJcbi8vQ2hhcmFjdGVyIHJlZmVyZW5jZSB0b2tlbml6YXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU51bWVyaWNFbnRpdHkgPSBmdW5jdGlvbiAoaXNIZXgpIHtcclxuICAgIHZhciBkaWdpdHMgPSAnJyxcclxuICAgICAgICBuZXh0Q3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICAgIGRpZ2l0cyArPSB0b0NoYXIodGhpcy5fY29uc3VtZSgpKTtcclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuICAgIH0gd2hpbGUgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvb2thaGVhZCgpID09PSAkLlNFTUlDT0xPTilcclxuICAgICAgICB0aGlzLl9jb25zdW1lKCk7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDcCA9IHBhcnNlSW50KGRpZ2l0cywgaXNIZXggPyAxNiA6IDEwKSxcclxuICAgICAgICByZXBsYWNlbWVudCA9IE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UU1tyZWZlcmVuY2VkQ3BdO1xyXG5cclxuICAgIGlmIChyZXBsYWNlbWVudClcclxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XHJcblxyXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQocmVmZXJlbmNlZENwKSlcclxuICAgICAgICByZXR1cm4gJC5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgcmV0dXJuIHJlZmVyZW5jZWRDcDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVOYW1lZEVudGl0eSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IG51bGwsXHJcbiAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgbGVhZiA9IE5BTUVEX0VOVElUWV9UUklFW2NwXSxcclxuICAgICAgICBjb25zdW1lZENvdW50ID0gMSxcclxuICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7IGxlYWYgJiYgY3AgIT09ICQuRU9GOyBjcCA9IHRoaXMuX2NvbnN1bWUoKSwgY29uc3VtZWRDb3VudCsrLCBsZWFmID0gbGVhZi5sICYmIGxlYWYubFtjcF0pIHtcclxuICAgICAgICBpZiAobGVhZi5jKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhdCBsZWFzdCBvbmUgbmFtZWQgcmVmZXJlbmNlIG1hdGNoLiBCdXQgd2UgZG9uJ3Qgc3RvcCBsb29rdXAgYXQgdGhpcyBwb2ludCxcclxuICAgICAgICAgICAgLy9iZWNhdXNlIGxvbmdlciBtYXRjaGVzIHN0aWxsIGNhbiBiZSBmb3VuZCAoZS5nLiAnJm5vdCcgYW5kICcmbm90aW47JykgZXhjZXB0IHRoZSBjYXNlXHJcbiAgICAgICAgICAgIC8vdGhlbiBmb3VuZCBtYXRjaCBpcyB0ZXJtaW5hdGVkIGJ5IHNlbWljb2xvbi5cclxuICAgICAgICAgICAgcmVmZXJlbmNlZENvZGVQb2ludHMgPSBsZWFmLmM7XHJcbiAgICAgICAgICAgIGVudGl0eUNvZGVQb2ludHNDb3VudCA9IGNvbnN1bWVkQ291bnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XHJcbiAgICAgICAgICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGlmICghc2VtaWNvbG9uVGVybWluYXRlZCkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHVuY29uc3VtZSBleGNlc3MgKGUuZy4gJ2l0JyBpbiAnJm5vdGl0JylcclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50IC0gZW50aXR5Q29kZVBvaW50c0NvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vTk9URTogSWYgdGhlIGNoYXJhY3RlciByZWZlcmVuY2UgaXMgYmVpbmcgY29uc3VtZWQgYXMgcGFydCBvZiBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBuZXh0IGNoYXJhY3RlclxyXG4gICAgICAgICAgICAvL2lzIGVpdGhlciBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pIG9yIGFuIGFscGhhbnVtZXJpYyBBU0NJSSBjaGFyYWN0ZXIsIHRoZW4sIGZvciBoaXN0b3JpY2FsXHJcbiAgICAgICAgICAgIC8vcmVhc29ucywgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBtYXRjaGVkIGFmdGVyIHRoZSBVKzAwMjYgQU1QRVJTQU5EIGNoYXJhY3RlciAoJikgbXVzdCBiZVxyXG4gICAgICAgICAgICAvL3VuY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgICAgICAvL0hvd2V2ZXIsIGlmIHRoaXMgbmV4dCBjaGFyYWN0ZXIgaXMgaW4gZmFjdCBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pLCB0aGVuIHRoaXMgaXMgYVxyXG4gICAgICAgICAgICAvL3BhcnNlIGVycm9yLCBiZWNhdXNlIHNvbWUgbGVnYWN5IHVzZXIgYWdlbnRzIHdpbGwgbWlzaW50ZXJwcmV0IHRoZSBtYXJrdXAgaW4gdGhvc2UgY2FzZXMuXHJcbiAgICAgICAgICAgIC8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcylcclxuICAgICAgICAgICAgaWYgKGluQXR0cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXh0Q3AgPT09ICQuRVFVQUxTX1NJR04gfHwgaXNBc2NpaUFscGhhTnVtZXJpYyhuZXh0Q3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlZENvZGVQb2ludHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50KTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoc3RhcnRDcCwgaW5BdHRyKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyB8fCBpc1doaXRlc3BhY2Uoc3RhcnRDcCkgfHwgc3RhcnRDcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgIHN0YXJ0Q3AgPT09ICQuQU1QRVJTQU5EIHx8IHN0YXJ0Q3AgPT09IHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCB8fCBzdGFydENwID09PSAkLkVPRikge1xyXG4gICAgICAgIC8vTk9URTogbm90IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4gTm8gY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHN0YXJ0Q3AgPT09ICQuTlVNQkVSX1NJR04pIHtcclxuICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBudW1lcmljIGVudGl0eSBjYW5kaWRhdGUsIG5vdyB3ZSBzaG91bGQgZGV0ZXJtaW5lIGlmIGl0J3MgaGV4IG9yIGRlY2ltYWxcclxuICAgICAgICB2YXIgaXNIZXggPSBmYWxzZSxcclxuICAgICAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0Q3AgPT09ICQuTEFUSU5fU01BTExfWCB8fCBuZXh0Q3AgPT09ICQuTEFUSU5fQ0FQSVRBTF9YKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICAgICAgaXNIZXggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQgdGhpcyBpcyBhIG51bWVyaWMgZW50aXR5IGZvciBzdXJlLCBzbyB3ZSBjb25zdW1lIGl0XHJcbiAgICAgICAgaWYgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSlcclxuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLl9jb25zdW1lTnVtZXJpY0VudGl0eShpc0hleCldO1xyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9OT1RFOiBvdGhlcndpc2UgdGhpcyBpcyBhIGJvZ3VzIG51bWJlciBlbnRpdHkgYW5kIGEgcGFyc2UgZXJyb3IuIFVuY29uc3VtZSB0aGUgbnVtYmVyIHNpZ25cclxuICAgICAgICAgICAgLy9hbmQgdGhlICd4Jy1jaGFyYWN0ZXIgaWYgYXBwcm9wcmlhdGUuXHJcbiAgICAgICAgICAgIHRoaXMuX3VuY29uc3VtZVNldmVyYWwoaXNIZXggPyAyIDogMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWVOYW1lZEVudGl0eShzdGFydENwLCBpbkF0dHIpO1xyXG59O1xyXG5cclxuLy9TdGF0ZSBtYWNoaW5lXHJcbnZhciBfID0gVG9rZW5pemVyLnByb3RvdHlwZTtcclxuXHJcbi8vMTIuMi40LjEgRGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gZGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yIENoYXJhY3RlciByZWZlcmVuY2UgaW4gZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkRhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cylcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHMocmVmZXJlbmNlZENvZGVQb2ludHMpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcmJyk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMyBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40IENoYXJhY3RlciByZWZlcmVuY2UgaW4gUkNEQVRBIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gY2hhcmFjdGVyUmVmZXJlbmNlSW5SY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41IFJBV1RFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNiBTY3JpcHQgZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjcgUExBSU5URVhUIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUExBSU5URVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHBsYWludGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC44IFRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gdGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gRU5EX1RBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVTdGFydFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVRVNUSU9OX01BUkspIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjkgRW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIGVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjEwIFRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gdGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjExIFJDREFUQSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTIgUkNEQVRBIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTMgUkNEQVRBIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQ0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE0IFJBV1RFWFQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNSBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNiBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE3IFNjcmlwdCBkYXRhIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyEnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE4IFNjcmlwdCBkYXRhIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTkgU2NyaXB0IGRhdGEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjAgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIxIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIyIFNjcmlwdCBkYXRhIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIzIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjQgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjUgU2NyaXB0IGRhdGEgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI2IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yOCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI5IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzAgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzEgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJz4nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzIgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzMgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBlbmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApIHx8IGNwID09PSAkLlNPTElEVVMgfHwgY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nKCkgPyBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM0IEJlZm9yZSBhdHRyaWJ1dGUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM1IEF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVFVQUxTX1NJR04pXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLIHx8IGNwID09PSAkLkFQT1NUUk9QSEUgfHwgY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM2IEFmdGVyIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM3IEJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zOCBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuUVVPVEFUSU9OX01BUks7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM5IEF0dHJpYnV0ZSB2YWx1ZSAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkFQT1NUUk9QSEU7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQwIEF0dHJpYnV0ZSB2YWx1ZSAodW5xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlVW5xdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkdSRUFURVJfVEhBTl9TSUdOO1xyXG4gICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgICAgICAgY3AgPT09ICQuRVFVQUxTX1NJR04gfHwgY3AgPT09ICQuR1JBVkVfQUNDRU5UKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDEgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIHRydWUpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlZENvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKHJlZmVyZW5jZWRDb2RlUG9pbnRzW2ldKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gJyYnO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJldHVyblN0YXRlO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQyIEFmdGVyIGF0dHJpYnV0ZSB2YWx1ZSAocXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MyBTZWxmLWNsb3Npbmcgc3RhcnQgdGFnIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURV0gPSBmdW5jdGlvbiBzZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnNlbGZDbG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NCBCb2d1cyBjb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0NvbW1lbnRTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gY3AgPT09ICQuTlVMTCA/IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSIDogdG9DaGFyKGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NSBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIG1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRBU0hfREFTSF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5ET0NUWVBFX1NUUklORywgY3AsIGZhbHNlKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmICh0aGlzLmFsbG93Q0RBVEEgJiYgdGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX1NUQVJUX1NUUklORywgY3AsIHRydWUpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDREFUQV9TRUNUSU9OX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NiBDb21tZW50IHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NyBDb21tZW50IHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDggQ29tbWVudCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ5IENvbW1lbnQgZW5kIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MCBDb21tZW50IGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0JBTkdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUxIENvbW1lbnQgZW5kIGJhbmcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9CQU5HX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRCYW5nU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLS0hJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTIgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTMgQmVmb3JlIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NCBET0NUWVBFIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU1IEFmdGVyIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5QVUJMSUNfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5TWVNURU1fU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NiBBZnRlciBET0NUWVBFIHB1YmxpYyBrZXl3b3JkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU3IEJlZm9yZSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU4IERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVQdWJsaWNJZGVudGlmaWVyRG91YmxlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTkgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYwIEFmdGVyIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjEgQmV0d2VlbiBET0NUWVBFIHB1YmxpYyBhbmQgc3lzdGVtIGlkZW50aWZpZXJzIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFXSA9IGZ1bmN0aW9uIGJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYyIEFmdGVyIERPQ1RZUEUgc3lzdGVtIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjMgQmVmb3JlIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjQgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NSBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjYgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjcgQm9ndXMgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JPR1VTX0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gYm9ndXNEb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42OCBDREFUQSBzZWN0aW9uIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0RBVEFfU0VDVElPTl9TVEFURV0gPSBmdW5jdGlvbiBjZGF0YVNlY3Rpb25TdGF0ZShjcCkge1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX0VORF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9Ob2RlIGNvbnN0cnVjdGlvblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudCcsXHJcbiAgICAgICAgcXVpcmtzTW9kZTogZmFsc2UsXHJcbiAgICAgICAgY2hpbGROb2RlczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50LWZyYWdtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgYXR0cnM6IGF0dHJzLFxyXG4gICAgICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlVVJJLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXHJcbiAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI3RleHQnLFxyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIG11dGF0aW9uXHJcbmV4cG9ydHMuc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIHZhciBkb2N0eXBlTm9kZSA9IG51bGw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJykge1xyXG4gICAgICAgICAgICBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdHlwZU5vZGUpIHtcclxuICAgICAgICBkb2N0eXBlTm9kZS5uYW1lID0gbmFtZTtcclxuICAgICAgICBkb2N0eXBlTm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnN5c3RlbUlkID0gc3lzdGVtSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgcHVibGljSWQ6IHB1YmxpY0lkLFxyXG4gICAgICAgICAgICBzeXN0ZW1JZDogc3lzdGVtSWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgZG9jdW1lbnQucXVpcmtzTW9kZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzUXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XHJcbn07XHJcblxyXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcclxuICAgIHBhcmVudE5vZGUuY2hpbGROb2Rlcy5wdXNoKG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSk7XHJcblxyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XHJcblxyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCkge1xyXG4gICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpIHtcclxuICAgICAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHRCZWZvcmUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpIC0gMV07XHJcblxyXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLm5vZGVOYW1lID09PSAnI3RleHQnKVxyXG4gICAgICAgIHByZXZOb2RlLnZhbHVlICs9IHRleHQ7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcclxufTtcclxuXHJcbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XHJcbiAgICB2YXIgcmVjaXBpZW50QXR0cnNNYXAgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY2lwaWVudE5vZGUuYXR0cnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgcmVjaXBpZW50QXR0cnNNYXAucHVzaChyZWNpcGllbnROb2RlLmF0dHJzW2ldLm5hbWUpO1xyXG5cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAocmVjaXBpZW50QXR0cnNNYXAuaW5kZXhPZihhdHRyc1tqXS5uYW1lKSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cnMucHVzaChhdHRyc1tqXSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIHRyYXZlcnNpbmdcclxuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbn07XHJcblxyXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2RlcztcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5hdHRycztcclxufTtcclxuXHJcbi8vTm9kZSBkYXRhXHJcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAodGV4dE5vZGUpIHtcclxuICAgIHJldHVybiB0ZXh0Tm9kZS52YWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKGNvbW1lbnROb2RlKSB7XHJcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZDtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XHJcbiAgICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQ7XHJcbn07XHJcblxyXG4vL05vZGUgdHlwZXNcclxuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI3RleHQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0NvbW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJztcclxufTtcclxuXHJcbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gISFub2RlLnRhZ05hbWU7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpO1xuXG4vL0NvbnZlcnNpb24gdGFibGVzIGZvciBET00gTGV2ZWwxIHN0cnVjdHVyZSBlbXVsYXRpb25cbnZhciBub2RlVHlwZXMgPSB7XG4gICAgZWxlbWVudDogMSxcbiAgICB0ZXh0OiAzLFxuICAgIGNkYXRhOiA0LFxuICAgIGNvbW1lbnQ6IDhcbn07XG5cbnZhciBub2RlUHJvcGVydHlTaG9ydGhhbmRzID0ge1xuICAgIHRhZ05hbWU6ICduYW1lJyxcbiAgICBjaGlsZE5vZGVzOiAnY2hpbGRyZW4nLFxuICAgIHBhcmVudE5vZGU6ICdwYXJlbnQnLFxuICAgIHByZXZpb3VzU2libGluZzogJ3ByZXYnLFxuICAgIG5leHRTaWJsaW5nOiAnbmV4dCcsXG4gICAgbm9kZVZhbHVlOiAnZGF0YSdcbn07XG5cbi8vTm9kZVxudmFyIE5vZGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbn07XG5cbk5vZGUucHJvdG90eXBlID0ge1xuICAgIGdldCBmaXJzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bMF0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IGxhc3RDaGlsZCgpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgfSxcblxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVUeXBlc1t0aGlzLnR5cGVdIHx8IG5vZGVUeXBlcy5lbGVtZW50O1xuICAgIH1cbn07XG5cbk9iamVjdC5rZXlzKG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzaG9ydGhhbmQgPSBub2RlUHJvcGVydHlTaG9ydGhhbmRzW2tleV07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Nob3J0aGFuZF0gfHwgbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzW3Nob3J0aGFuZF0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuXG4vL05vZGUgY29uc3RydWN0aW9uXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID1cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAncm9vdCcsXG4gICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XG4gICAgdmFyIGF0dHJpYnMgPSB7fSxcbiAgICAgICAgYXR0cmlic05hbWVzcGFjZSA9IHt9LFxuICAgICAgICBhdHRyaWJzUHJlZml4ID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgYXR0cmlic05hbWVzcGFjZVthdHRyTmFtZV0gPSBhdHRyc1tpXS5uYW1lc3BhY2U7XG4gICAgICAgIGF0dHJpYnNQcmVmaXhbYXR0ck5hbWVdID0gYXR0cnNbaV0ucHJlZml4O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6IHRhZ05hbWUgPT09ICdzY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdzdHlsZScgPyB0YWdOYW1lIDogJ3RhZycsXG4gICAgICAgIG5hbWU6IHRhZ05hbWUsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlVVJJLFxuICAgICAgICBhdHRyaWJzOiBhdHRyaWJzLFxuICAgICAgICAneC1hdHRyaWJzTmFtZXNwYWNlJzogYXR0cmlic05hbWVzcGFjZSxcbiAgICAgICAgJ3gtYXR0cmlic1ByZWZpeCc6IGF0dHJpYnNQcmVmaXgsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgIH0pO1xufTtcblxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG5cbi8vVHJlZSBtdXRhdGlvblxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBkYXRhID0gRG9jdHlwZS5zZXJpYWxpemVDb250ZW50KG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCksXG4gICAgICAgIGRvY3R5cGVOb2RlID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LmNoaWxkcmVuW2ldLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIGRvY3VtZW50LmNoaWxkcmVuW2ldLm5hbWUgPT09ICchZG9jdHlwZScpIHtcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGRyZW5baV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xuICAgICAgICBkb2N0eXBlTm9kZS5kYXRhID0gZGF0YTtcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtbmFtZSddID0gbmFtZTtcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXSA9IHB1YmxpY0lkO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1zeXN0ZW1JZCddID0gc3lzdGVtSWQ7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LCBuZXcgTm9kZSh7XG4gICAgICAgICAgICB0eXBlOiAnZGlyZWN0aXZlJyxcbiAgICAgICAgICAgIG5hbWU6ICchZG9jdHlwZScsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgJ3gtbmFtZSc6IG5hbWUsXG4gICAgICAgICAgICAneC1wdWJsaWNJZCc6IHB1YmxpY0lkLFxuICAgICAgICAgICAgJ3gtc3lzdGVtSWQnOiBzeXN0ZW1JZFxuICAgICAgICB9KSk7XG4gICAgfVxuXG59O1xuXG5leHBvcnRzLnNldFF1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcbn07XG5cbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XG59O1xuXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcbiAgICB2YXIgcHJldiA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgdmFyIGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcHJldiA9IHJlZmVyZW5jZU5vZGUucHJldjtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XG4gICAgfVxuXG4gICAgcmVmZXJlbmNlTm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICBuZXdOb2RlLm5leHQgPSByZWZlcmVuY2VOb2RlO1xuXG4gICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5zZXJ0aW9uSWR4LCAwLCBuZXdOb2RlKTtcbiAgICBuZXdOb2RlLnBhcmVudCA9IHBhcmVudE5vZGU7XG59O1xuXG5leHBvcnRzLmRldGFjaE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKSxcbiAgICAgICAgICAgIHByZXYgPSBub2RlLnByZXYsXG4gICAgICAgICAgICBuZXh0ID0gbm9kZS5uZXh0O1xuXG4gICAgICAgIG5vZGUucHJldiA9IG51bGw7XG4gICAgICAgIG5vZGUubmV4dCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHByZXYpXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0O1xuXG4gICAgICAgIGlmIChuZXh0KVxuICAgICAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcblxuICAgICAgICBub2RlLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gICAgdmFyIGxhc3RDaGlsZCA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgIGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgbGFzdENoaWxkLmRhdGEgKz0gdGV4dDtcbiAgICBlbHNlXG4gICAgICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcblxuICAgIGlmIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS50eXBlID09PSAndGV4dCcpXG4gICAgICAgIHByZXZOb2RlLmRhdGEgKz0gdGV4dDtcbiAgICBlbHNlXG4gICAgICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgcmVmZXJlbmNlTm9kZSk7XG59O1xuXG5leHBvcnRzLmFkb3B0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChyZWNpcGllbnROb2RlLCBhdHRycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlLmF0dHJpYnNbYXR0ck5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5uYW1lc3BhY2U7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNQcmVmaXgnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8vVHJlZSB0cmF2ZXJzaW5nXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuWzBdO1xufTtcblxuZXhwb3J0cy5nZXRDaGlsZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcbn07XG5cbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50O1xufTtcblxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGF0dHJMaXN0ID0gW107XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cmlicykge1xuICAgICAgICBpZiAobm9kZS5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBhdHRyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLmF0dHJpYnNbbmFtZV0sXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBub2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVtuYW1lXSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IG5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW25hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdHRyTGlzdDtcbn07XG5cblxuLy9Ob2RlIGRhdGFcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbn07XG5cbmV4cG9ydHMuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2U7XG59O1xuXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xuICAgIHJldHVybiB0ZXh0Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtbmFtZSddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ107XG59O1xuXG5cbi8vTm9kZSB0eXBlc1xuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAndGV4dCc7XG59O1xuXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdjb21tZW50Jztcbn07XG5cbmV4cG9ydHMuaXNEb2N1bWVudFR5cGVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAnZGlyZWN0aXZlJyAmJiBub2RlLm5hbWUgPT09ICchZG9jdHlwZSc7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiAhIW5vZGUuYXR0cmlicztcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL0NvbnN0XHJcbnZhciBOT0FIX0FSS19DQVBBQ0lUWSA9IDM7XHJcblxyXG4vL0xpc3Qgb2YgZm9ybWF0dGluZyBlbGVtZW50c1xyXG52YXIgRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZW50cmllcyA9IFtdO1xyXG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyO1xyXG4gICAgdGhpcy5ib29rbWFyayA9IG51bGw7XHJcbn07XHJcblxyXG4vL0VudHJ5IHR5cGVzXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgPSAnTUFSS0VSX0VOVFJZJztcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlkgPSAnRUxFTUVOVF9FTlRSWSc7XHJcblxyXG4vL05vYWggQXJrJ3MgY29uZGl0aW9uXHJcbi8vT1BUSU1JWkFUSU9OOiBhdCBmaXJzdCB3ZSB0cnkgdG8gZmluZCBwb3NzaWJsZSBjYW5kaWRhdGVzIGZvciBleGNsdXNpb24gdXNpbmdcclxuLy9saWdodHdlaWdodCBoZXVyaXN0aWNzIHdpdGhvdXQgdGhvcm91Z2ggYXR0cmlidXRlcyBjaGVjay5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5sZW5ndGggPj0gTk9BSF9BUktfQ0FQQUNJVFkpIHtcclxuICAgICAgICB2YXIgbmVBdHRyc0xlbmd0aCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCkubGVuZ3RoLFxyXG4gICAgICAgICAgICBuZVRhZ05hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lTmFtZXNwYWNlVVJJID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobmV3RWxlbWVudCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVudHJ5LmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50QXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gbmVUYWdOYW1lICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gbmVOYW1lc3BhY2VVUkkgJiZcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycy5sZW5ndGggPT09IG5lQXR0cnNMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7aWR4OiBpLCBhdHRyczogZWxlbWVudEF0dHJzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkgPyBbXSA6IGNhbmRpZGF0ZXM7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uID0gZnVuY3Rpb24gKG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBjYW5kaWRhdGVzID0gdGhpcy5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMobmV3RWxlbWVudCksXHJcbiAgICAgICAgY0xlbmd0aCA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChjTGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIG5lQXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5ld0VsZW1lbnQpLFxyXG4gICAgICAgICAgICBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXAgPSB7fTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBidWlsZCBhdHRycyBtYXAgZm9yIHRoZSBuZXcgZWxlbWVudCBzbyB3ZSBjYW4gcGVyZm9ybSBmYXN0IGxvb2t1cHNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmVBdHRyID0gbmVBdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXBbbmVBdHRyLm5hbWVdID0gbmVBdHRyLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZUF0dHJzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjQXR0ciA9IGNhbmRpZGF0ZXNbal0uYXR0cnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5lQXR0cnNNYXBbY0F0dHIubmFtZV0gIT09IGNBdHRyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY0xlbmd0aC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA8IE5PQUhfQVJLX0NBUEFDSVRZKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9OT1RFOiByZW1vdmUgYm90dG9tbW9zdCBjYW5kaWRhdGVzIHVudGlsIE5vYWgncyBBcmsgY29uZGl0aW9uIHdpbGwgbm90IGJlIG1ldFxyXG4gICAgICAgIGZvciAodmFyIGkgPSBjTGVuZ3RoIC0gMTsgaSA+PSBOT0FIX0FSS19DQVBBQ0lUWSAtIDE7IGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGNhbmRpZGF0ZXNbaV0uaWR4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHt0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZfSk7XHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5wdXNoRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCB0b2tlbikge1xyXG4gICAgdGhpcy5fZW5zdXJlTm9haEFya0NvbmRpdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XHJcbiAgICAgICAgdHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlksXHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICB0b2tlbjogdG9rZW5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB2YXIgYm9va21hcmtJZHggPSB0aGlzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgZm9yICg7IGJvb2ttYXJrSWR4ID49IDA7IGJvb2ttYXJrSWR4LS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2Jvb2ttYXJrSWR4XSA9PT0gdGhpcy5ib29rbWFyaylcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRyaWVzLnNwbGljZShib29rbWFya0lkeCArIDEsIDAsIHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUucmVtb3ZlRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1tpXSA9PT0gZW50cnkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5jbGVhclRvTGFzdE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllcy5wb3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9TZWFyY2hcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnlJblNjb3BlV2l0aFRhZ05hbWUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSAmJiBlbnRyeS5lbGVtZW50ID09IGVsZW1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgT3BlbkVsZW1lbnRTdGFjayA9IHJlcXVpcmUoJy4vb3Blbl9lbGVtZW50X3N0YWNrJyksXG4gICAgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xuXG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUztcblxuXG5mdW5jdGlvbiBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCBlbmRUYWdUb2tlbikge1xuICAgIGlmIChlbGVtZW50Ll9fbG9jYXRpb24pXG4gICAgICAgIGVsZW1lbnQuX19sb2NhdGlvbi5lbmQgPSBlbmRUYWdUb2tlbi5sb2NhdGlvbi5lbmQ7XG59XG5cbi8vTk9URTogcGF0Y2ggb3BlbiBlbGVtZW50cyBzdGFjaywgc28gd2UgY2FuIGFzc2lnbiBlbmQgbG9jYXRpb24gZm9yIHRoZSBlbGVtZW50c1xuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4pO1xuICAgICAgICBPcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgc3RhY2sucG9wQWxsVXBUb0h0bWxFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+IDA7IGktLSlcbiAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKHRoaXMuaXRlbXNbaV0sIHBhcnNlci5jdXJyZW50VG9rZW4pO1xuXG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICBzdGFjay5yZW1vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCBwYXJzZXIuY3VycmVudFRva2VuKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgdmFyIHBhcnNlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcnNlcik7XG5cbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Jlc2V0LmNhbGwodGhpcywgaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgcGF0Y2hPcGVuRWxlbWVudHNTdGFjayh0aGlzLm9wZW5FbGVtZW50cywgcGFyc2VyKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCB8fFxuICAgICAgICAgICAgICh0b2tlbi50YWdOYW1lID09PSAkLkJPRFkgJiYgdGhpcy5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG9rZW4udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0RvY3R5cGVcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBwYXJzZXJQcm90by5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxuICAgICAgICAgICAgY25MZW5ndGggPSBkb2N1bWVudENoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnRDaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9FbGVtZW50c1xuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgLy9TbyB3ZSB3aWxsIHVzZSB0b2tlbiBsb2NhdGlvbiBzdG9yZWQgaW4gdGhpcyBtZXRob2RzIGZvciB0aGUgZWxlbWVudC5cbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHBhcnNlclByb3RvLl9hdHRhY2hFbGVtZW50VG9UcmVlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHBhcnNlci5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydFRlbXBsYXRlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcblxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy9Db21tZW50c1xuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgIH07XG5cbiAgICAvL1RleHRcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbjtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBoYXNGb3N0ZXJQYXJlbnQgPSB0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpLFxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIHRleHROb2RlSWR4ID0gaGFzRm9zdGVyUGFyZW50ICYmIHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cbiAgICAgICAgaWYgKHRleHROb2RlLl9fbG9jYXRpb24pXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxuICAgIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QnKSxcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL01pc2MgY29uc3RhbnRzXG52YXIgU0VBUkNIQUJMRV9JTkRFWF9ERUZBVUxUX1BST01QVCA9ICdUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAnLFxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxuICAgIEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSU5JVElBTF9NT0RFID0gJ0lOSVRJQUxfTU9ERScsXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxuICAgIElOX0hFQURfTU9ERSA9ICdJTl9IRUFEX01PREUnLFxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxuICAgIFRFWFRfTU9ERSA9ICdURVhUX01PREUnLFxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXG4gICAgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERScsXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxuICAgIElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJyxcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXG4gICAgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnLFxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXG4gICAgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJyxcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG52YXIgSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQID0ge307XG5cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEJPRFldID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DQVBUSU9OXSA9IElOX0NBUFRJT05fTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkJPRFldID0gSU5fQk9EWV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcblxuLy9UZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzd2l0Y2ggbWFwXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xuXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ0FQVElPTl0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URk9PVF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRSXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xuXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXG52YXIgXyA9IHt9O1xuXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBkb2N0eXBlSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcblxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcblxuX1tCRUZPUkVfSEVBRF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcblxuX1tJTl9IRUFEX01PREVdID0ge307XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XG5cbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xuXG5fW0lOX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tURVhUX01PREVdID0ge307XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGV4dDtcblxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9UQUJMRV9URVhUX01PREVdID0ge307XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xuXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fUk9XX01PREVdID0ge307XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DRUxMX01PREVdID0ge307XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNlbGw7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XG5cbl9bQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHk7XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcbiAgICAgICAgYXR0cnMgPSBbXTtcblxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IEFUVFJTLkFDVElPTixcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpbmRleFByb21wdCA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLlBST01QVCk7XG5cbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaXNpbmRleEF0dHJzID0gaXNpbmRleFN0YXJ0VGFnVG9rZW4uYXR0cnMsXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNpbmRleEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IEFUVFJTLk5BTUUgJiYgbmFtZSAhPT0gQVRUUlMuQUNUSU9OICYmIG5hbWUgIT09IEFUVFJTLlBST01QVClcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xuICAgIH1cblxuICAgIGlucHV0QXR0cnMucHVzaCh7XG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXG4gICAgICAgIHZhbHVlOiBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUVcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEF0dHJzO1xufVxuXG4vL1BhcnNlclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcbn07XG5cbi8vQVBJXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHJldHVybiBkb2N1bWVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICBmcmFnbWVudENvbnRleHQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5URU1QTEFURSwgTlMuSFRNTCwgW10pO1xuXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcblxuICAgIHRoaXMuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB0aGlzLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHZhciByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb2N1bWVudE1vY2spLFxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xufTtcblxuLy9SZXNldCBzdGF0ZVxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAnJztcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG5cbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbn07XG5cbi8vUGFyc2luZyBsb29wXG5QYXJzZXIucHJvdG90eXBlLl9pdGVyYXRlUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcblxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuc3RvcHBlZClcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XG59O1xuXG4vL1RleHQgcGFyc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcbiAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufTtcblxuLy9GcmFnbWVudCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XG4gICAgICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0IDpcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB9IHdoaWxlIChub2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn07XG5cbi8vVHJlZSBtdXRhdGlvblxuUGFyc2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKHRtcGwpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgdmFyIGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTtcblxuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICB9XG59O1xuXG4vL1Rva2VuIHByb2Nlc3NpbmdcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcblxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0NoYXJhY3RlclRva2VuID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXG4gICAgICAgIGlzTWF0aE1MVGV4dFN0YXJ0VGFnID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xuXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZVN0YXJ0VGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xuICAgIHJldHVybiBmYWtlVG9rZW47XG59O1xuXG4vL0ludGVncmF0aW9uIHBvaW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSxcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycyk7XG59O1xuXG4vL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB1bm9wZW5JZHg7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy9DbG9zZSBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VUYWJsZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xufTtcblxuLy9JbnNlcnRpb24gbW9kZXNcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AsIGxhc3QgPSBmYWxzZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgbGFzdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcblxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuaGVhZEVsZW1lbnQgPyBBRlRFUl9IRUFEX01PREUgOiBCRUZPUkVfSEVBRF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcbiAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoYW5jZXN0b3IpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wdXNoVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbW9kZTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3BvcFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1t0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3BdO1xufTtcblxuLy9Gb3N0ZXIgcGFyZW50aW5nXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2F0aW9uID0ge1xuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG5cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcblxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50VGV4dCA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICBlbHNlXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChsb2NhdGlvbi5wYXJlbnQsIGNoYXJzKTtcbn07XG5cbi8vU3BlY2lhbCBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xufTtcblxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcblxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG5cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcbiAgICAgICAgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLFxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBQV9JTk5FUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG5cbiAgICAgICAgLy9OT1RFOiBzdG9yZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcblxuICAgICAgICB2YXIgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGNvbW1vbkFuY2VzdG9yKSlcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbnMsIHRva2VuLmF0dHJzKTtcblxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcblxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG59XG5cbi8vQWxnb3JpdGhtIGVudHJ5IHBvaW50XG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG5cblxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaWdub3JlVG9rZW4ocCwgdG9rZW4pIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLzEyLjIuNS40LjEgVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcbiAgICAgICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjIgVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNCBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuQ09NTUFORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XG5cbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TVFlMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG5cbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCh0b2tlbi50YWdOYW1lID09PSAkLkxJICYmIHRuID09PSAkLkxJKSB8fFxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRuICE9PSAkLkFERFJFU1MgJiYgdG4gIT09ICQuRElWICYmIHRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufVxuXG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XG4gICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuTEFCRUwpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkxBQkVMKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcbn1cblxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGlmIChwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9DQVBUSU9OX01PREUgfHxcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xufVxuXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG5cbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICBlbHNlXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG59XG5cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXG4gICAgICAgICAgICAgICAgYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxuICAgICAgICAgICAgICAgIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcbiAgICAgICAgICAgICAgICBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgICAgICAgICBzdmdTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXG4gICAgICAgICAgICAgICAgbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcbiAgICAgICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxuICAgICAgICAgICAgICAgIGlzaW5kZXhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXG4gICAgICAgICAgICAgICAgbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJPRFkpO1xuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5MSSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPiAtMSlcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5cblxuZnVuY3Rpb24gZW9mSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XG59XG5cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xufVxuXG5mdW5jdGlvbiB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UQUJMRSk7XG5cbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5UUilcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVClcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cblxuLy8xMi4yLjUuNC4xMCBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4xMSBUaGUgXCJpbiBjYXB0aW9uXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xMiBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNPTEdST1VQKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5cbi8vMTIuMi41LjQuMTUgVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcblxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQgfHwgdG4gPT09ICQuS0VZR0VOIHx8IHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgdmFyIHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0sXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OICYmIHByZXZPcGVuRWxlbWVudFRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE3IFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE4IFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cblxuLy8xMi4yLjUuNC4xOSBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcblxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREU7XG59XG5cbi8vMTIuMi41LjQuMjIgVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwLm9wZW5FbGVtZW50cy5jdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qYWtlYXJjaGliYWxkL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDIuMy4wXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzRnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheSA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkX2lzQXJyYXk7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gPSAwO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdG9TdHJpbmcgPSB7fS50b1N0cmluZztcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dDtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbl0gPSBjYWxsYmFjaztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICsgMV0gPSBhcmc7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICs9IDI7XG4gICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9PT0gMikge1xuICAgICAgICAvLyBJZiBsZW4gaXMgMiwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guXG4gICAgICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHNldEFzYXAoYXNhcEZuKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcCA9IGFzYXBGbjtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpID8gd2luZG93IDogdW5kZWZpbmVkO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3Nlckdsb2JhbCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyV2luZG93IHx8IHt9O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYge30udG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4gICAgLy8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElFMTBcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgLy8gbm9kZVxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpIHtcbiAgICAgIHZhciBuZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgICAvLyBub2RlIHZlcnNpb24gMC4xMC54IGRpc3BsYXlzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5leHRUaWNrIGlzIHVzZWQgcmVjdXJzaXZlbHlcbiAgICAgIC8vIHNldEltbWVkaWF0ZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIGluc3RlYWRcbiAgICAgIHZhciB2ZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLm1hdGNoKC9eKD86KFxcZCspXFwuKT8oPzooXFxkKylcXC4pPyhcXCp8XFxkKykkLyk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2ZXJzaW9uKSAmJiB2ZXJzaW9uWzFdID09PSAnMCcgJiYgdmVyc2lvblsyXSA9PT0gJzEwJykge1xuICAgICAgICBuZXh0VGljayA9IHNldEltbWVkaWF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgbmV4dFRpY2sobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdmVydHhcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dChsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBsaWIkZXM2JHByb21pc2UkYXNhcCQkQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoKTtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gKGl0ZXJhdGlvbnMgPSArK2l0ZXJhdGlvbnMgJSAyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gd2ViIHdvcmtlclxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNZXNzYWdlQ2hhbm5lbCgpIHtcbiAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VTZXRUaW1lb3V0KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCwgMSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuOyBpKz0yKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpXTtcbiAgICAgICAgdmFyIGFyZyA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdO1xuXG4gICAgICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaSsxXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJGF0dGVtcHRWZXJ0ZXgoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVZlcnR4VGltZXIoKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2g7XG4gICAgLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbiAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTmV4dFRpY2soKTtcbiAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTXV0YXRpb25PYnNlcnZlcigpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGlzV29ya2VyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VTZXRUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCgpIHt9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORyAgID0gdm9pZCAwO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQgPSAxO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCAgPSAyO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGNhbm5vdFJldHVybk93bigpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZ2V0VGhlbihwcm9taXNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlLCB0aGVuKSB7XG4gICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAoZnVuY3Rpb24ocHJvbWlzZSkge1xuICAgICAgICB2YXIgc2VhbGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAgIGlmIChzZWFsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgc2VhbGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCBwcm9taXNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICAgICAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHRoZW5hYmxlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpIHtcbiAgICAgIGlmIChtYXliZVRoZW5hYmxlLmNvbnN0cnVjdG9yID09PSBwcm9taXNlLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRoZW4gPSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKG1heWJlVGhlbmFibGUpO1xuXG4gICAgICAgIGlmICh0aGVuID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUikge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUi5lcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzRnVuY3Rpb24odGhlbikpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc2VsZkZ1bGxmaWxsbWVudCgpKTtcbiAgICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24ocHJvbWlzZSkge1xuICAgICAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICAgICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cblxuICAgICAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRDtcblxuICAgICAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoLCBwcm9taXNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKSB7XG4gICAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcpIHsgcmV0dXJuOyB9XG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEO1xuICAgICAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoUmVqZWN0aW9uLCBwcm9taXNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gICAgICB2YXIgbGVuZ3RoID0gc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gICAgICBwYXJlbnQuX29uZXJyb3IgPSBudWxsO1xuXG4gICAgICBzdWJzY3JpYmVyc1tsZW5ndGhdID0gY2hpbGQ7XG4gICAgICBzdWJzY3JpYmVyc1tsZW5ndGggKyBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRURdID0gb25GdWxmaWxsbWVudDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEXSAgPSBvblJlamVjdGlvbjtcblxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaChwcm9taXNlKSB7XG4gICAgICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgICAgIHZhciBzZXR0bGVkID0gcHJvbWlzZS5fc3RhdGU7XG5cbiAgICAgIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIHZhciBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICBjaGlsZCA9IHN1YnNjcmliZXJzW2ldO1xuICAgICAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzZXR0bGVkLCBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCkge1xuICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRFcnJvck9iamVjdCgpO1xuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICAgICAgcmV0dXJuIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzZXR0bGVkLCBwcm9taXNlLCBjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB2YXIgaGFzQ2FsbGJhY2sgPSBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzRnVuY3Rpb24oY2FsbGJhY2spLFxuICAgICAgICAgIHZhbHVlLCBlcnJvciwgc3VjY2VlZGVkLCBmYWlsZWQ7XG5cbiAgICAgIGlmIChoYXNDYWxsYmFjaykge1xuICAgICAgICB2YWx1ZSA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHRyeUNhdGNoKGNhbGxiYWNrLCBkZXRhaWwpO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvciA9IHZhbHVlLmVycm9yO1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICAvLyBub29wXG4gICAgICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUpe1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiByZWplY3RQcm9taXNlKHJlYXNvbikge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGVudW1lcmF0b3IuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICAgIGVudW1lcmF0b3IucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcblxuICAgICAgaWYgKGVudW1lcmF0b3IuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2lucHV0ICAgICA9IGlucHV0O1xuICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCAgICAgPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgICAgICBlbnVtZXJhdG9yLl9pbml0KCk7XG5cbiAgICAgICAgaWYgKGVudW1lcmF0b3IubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW51bWVyYXRvci5sZW5ndGggPSBlbnVtZXJhdG9yLmxlbmd0aCB8fCAwO1xuICAgICAgICAgIGVudW1lcmF0b3IuX2VudW1lcmF0ZSgpO1xuICAgICAgICAgIGlmIChlbnVtZXJhdG9yLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl9yZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fdmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5KGlucHV0KTtcbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yO1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgdmFyIGxlbmd0aCAgPSBlbnVtZXJhdG9yLmxlbmd0aDtcbiAgICAgIHZhciBwcm9taXNlID0gZW51bWVyYXRvci5wcm9taXNlO1xuICAgICAgdmFyIGlucHV0ICAgPSBlbnVtZXJhdG9yLl9pbnB1dDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBlbnVtZXJhdG9yLl9lYWNoRW50cnkoaW5wdXRbaV0sIGkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG4gICAgICB2YXIgYyA9IGVudW1lcmF0b3IuX2luc3RhbmNlQ29uc3RydWN0b3I7XG5cbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzTWF5YmVUaGVuYWJsZShlbnRyeSkpIHtcbiAgICAgICAgaWYgKGVudHJ5LmNvbnN0cnVjdG9yID09PSBjICYmIGVudHJ5Ll9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICAgIGVudHJ5Ll9vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl93aWxsU2V0dGxlQXQoYy5yZXNvbHZlKGVudHJ5KSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZy0tO1xuICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbihzdGF0ZSwgaSwgdmFsdWUpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gZW51bWVyYXRvci5wcm9taXNlO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcpIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW51bWVyYXRvci5fcmVzdWx0W2ldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24ocHJvbWlzZSwgaSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVELCBpLCByZWFzb24pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRhbGwkJGFsbChlbnRyaWVzKSB7XG4gICAgICByZXR1cm4gbmV3IGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0KHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRhbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRhbGwkJGFsbDtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRyYWNlKGVudHJpZXMpIHtcbiAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcblxuICAgICAgaWYgKCFsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIGZ1bmN0aW9uIG9uRnVsZmlsbG1lbnQodmFsdWUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG9uUmVqZWN0aW9uKHJlYXNvbikge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUoQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKSwgdW5kZWZpbmVkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2U7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkcmVzb2x2ZShvYmplY3QpIHtcbiAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gICAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gQ29uc3RydWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG4gICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIG9iamVjdCk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0KHJlYXNvbikge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJHJlamVjdDtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkY291bnRlciA9IDA7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNOZXcoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlO1xuICAgIC8qKlxuICAgICAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICAgICAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgICAgIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlIHJlYXNvblxuICAgICAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIFRlcm1pbm9sb2d5XG4gICAgICAtLS0tLS0tLS0tLVxuXG4gICAgICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAgICAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAgICAgLSBgdmFsdWVgIGlzIGFueSBsZWdhbCBKYXZhU2NyaXB0IHZhbHVlIChpbmNsdWRpbmcgdW5kZWZpbmVkLCBhIHRoZW5hYmxlLCBvciBhIHByb21pc2UpLlxuICAgICAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gICAgICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gICAgICAtIGBzZXR0bGVkYCB0aGUgZmluYWwgcmVzdGluZyBzdGF0ZSBvZiBhIHByb21pc2UsIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cblxuICAgICAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gICAgICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICAgICAgc3RhdGUuICBQcm9taXNlcyB0aGF0IGFyZSByZWplY3RlZCBoYXZlIGEgcmVqZWN0aW9uIHJlYXNvbiBhbmQgYXJlIGluIHRoZVxuICAgICAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgICAgIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICAgICAgcHJvbWlzZSwgdGhlbiB0aGUgb3JpZ2luYWwgcHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgd2lsbCBtYXRjaCB0aGUgdmFsdWUnc1xuICAgICAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gICAgICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gICAgICBpdHNlbGYgZnVsZmlsbC5cblxuXG4gICAgICBCYXNpYyBVc2FnZTpcbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBgYGBqc1xuICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgLy8gb24gc3VjY2Vzc1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcblxuICAgICAgICAvLyBvbiBmYWlsdXJlXG4gICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyBvbiBmdWxmaWxsbWVudFxuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIC8vIG9uIHJlamVjdGlvblxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgVXNhZ2U6XG4gICAgICAtLS0tLS0tLS0tLS0tLS1cblxuICAgICAgUHJvbWlzZXMgc2hpbmUgd2hlbiBhYnN0cmFjdGluZyBhd2F5IGFzeW5jaHJvbm91cyBpbnRlcmFjdGlvbnMgc3VjaCBhc1xuICAgICAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmdW5jdGlvbiBnZXRKU09OKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsKTtcbiAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05FKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgLy8gb24gcmVqZWN0aW9uXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gICAgICBgYGBqc1xuICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICAgICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgICAgIF0pLnRoZW4oZnVuY3Rpb24odmFsdWVzKXtcbiAgICAgICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgICAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEBjbGFzcyBQcm9taXNlXG4gICAgICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICAgICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgICAgQGNvbnN0cnVjdG9yXG4gICAgKi9cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZShyZXNvbHZlcikge1xuICAgICAgdGhpcy5faWQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkY291bnRlcisrO1xuICAgICAgdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xuXG4gICAgICBpZiAobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICAgICAgaWYgKCFsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzRnVuY3Rpb24ocmVzb2x2ZXIpKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJG5lZWRzUmVzb2x2ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZSkpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNOZXcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5hbGwgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRhbGwkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucmFjZSA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucmVzb2x2ZSA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucmVqZWN0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0U2NoZWR1bGVyO1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLl9zZXRBc2FwID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHNldEFzYXA7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX2FzYXAgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcDtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgICAgIGNvbnN0cnVjdG9yOiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZSxcblxuICAgIC8qKlxuICAgICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgICB3aGljaCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZVxuICAgICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgICAvLyB1c2VyIGlzIGF2YWlsYWJsZVxuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIENoYWluaW5nXG4gICAgICAtLS0tLS0tLVxuXG4gICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgICAgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2UncyBmdWxmaWxsbWVudFxuICAgICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgcmV0dXJuIHVzZXIubmFtZTtcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodXNlck5hbWUpIHtcbiAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICAgIH0pO1xuXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgICB9KTtcbiAgICAgIGBgYFxuICAgICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQXNzaW1pbGF0aW9uXG4gICAgICAtLS0tLS0tLS0tLS1cblxuICAgICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICAgIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBoYW5kbGVyLiBUaGUgZG93bnN0cmVhbSBwcm9taXNlIHdpbGwgdGhlbiBiZSBwZW5kaW5nXG4gICAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFNpbXBsZSBFeGFtcGxlXG4gICAgICAtLS0tLS0tLS0tLS0tLVxuXG4gICAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfVxuICAgICAgYGBgXG5cbiAgICAgIEVycmJhY2sgRXhhbXBsZVxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFJlc3VsdChmdW5jdGlvbihyZXN1bHQsIGVycil7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyBmYWlsdXJlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBQcm9taXNlIEV4YW1wbGU7XG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIGF1dGhvciwgYm9va3M7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfVxuICAgICAgYGBgXG5cbiAgICAgIEVycmJhY2sgRXhhbXBsZVxuXG4gICAgICBgYGBqc1xuXG4gICAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG5cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcblxuICAgICAgfVxuXG4gICAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICAvLyBmYWlsdXJlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBQcm9taXNlIEV4YW1wbGU7XG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIGZpbmRBdXRob3IoKS5cbiAgICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICAgIHRoZW4oZnVuY3Rpb24oYm9va3Mpe1xuICAgICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCB0aGVuXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgICAgQHJldHVybiB7UHJvbWlzZX1cbiAgICAqL1xuICAgICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IHBhcmVudC5fc3RhdGU7XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQgJiYgIW9uRnVsZmlsbG1lbnQgfHwgc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICYmICFvblJlamVjdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG4gICAgICAgIHZhciByZXN1bHQgPSBwYXJlbnQuX3Jlc3VsdDtcblxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbc3RhdGUgLSAxXTtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW52b2tlQ2FsbGJhY2soc3RhdGUsIGNoaWxkLCBjYWxsYmFjaywgcmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfSxcblxuICAgIC8qKlxuICAgICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgICAgYXMgdGhlIGNhdGNoIGJsb2NrIG9mIGEgdHJ5L2NhdGNoIHN0YXRlbWVudC5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHN5bmNocm9ub3VzXG4gICAgICB0cnkge1xuICAgICAgICBmaW5kQXV0aG9yKCk7XG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfVxuXG4gICAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEBtZXRob2QgY2F0Y2hcbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkcG9seWZpbGwoKSB7XG4gICAgICB2YXIgbG9jYWw7XG5cbiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gZ2xvYmFsO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICAgIGlmIChQICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSkgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9jYWwuUHJvbWlzZSA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0O1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbDtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlID0ge1xuICAgICAgJ1Byb21pc2UnOiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkZGVmYXVsdCxcbiAgICAgICdwb2x5ZmlsbCc6IGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkZGVmYXVsdFxuICAgIH07XG5cbiAgICAvKiBnbG9iYWwgZGVmaW5lOnRydWUgbW9kdWxlOnRydWUgd2luZG93OiB0cnVlICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gbGliJGVzNiRwcm9taXNlJHVtZCQkRVM2UHJvbWlzZTsgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGVbJ2V4cG9ydHMnXSkge1xuICAgICAgbW9kdWxlWydleHBvcnRzJ10gPSBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzWydFUzZQcm9taXNlJ10gPSBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlO1xuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkZGVmYXVsdCgpO1xufSkuY2FsbCh0aGlzKTtcblxuIiwiLypcbkNvcHlyaWdodCAoQykgMjAxNSBGcmVkIEsuIFNjaG90dCA8ZmtzY2hvdHRAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT5cbkNvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPlxuQ29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwgPGtyaXMua293YWxAY2l4YXIuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMSBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG5tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG5BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG5ESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG5PTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG5USElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbi8qZXNsaW50IG5vLXVuZGVmaW5lZDowLCBuby11c2UtYmVmb3JlLWRlZmluZTogMCovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgc3ludGF4ID0gcmVxdWlyZShcIi4vbGliL3N5bnRheFwiKSxcbiAgICB0b2tlbkluZm8gPSByZXF1aXJlKFwiLi9saWIvdG9rZW4taW5mb1wiKSxcbiAgICBhc3ROb2RlVHlwZXMgPSByZXF1aXJlKFwiLi9saWIvYXN0LW5vZGUtdHlwZXNcIiksXG4gICAgYXN0Tm9kZUZhY3RvcnkgPSByZXF1aXJlKFwiLi9saWIvYXN0LW5vZGUtZmFjdG9yeVwiKSxcbiAgICBkZWZhdWx0RmVhdHVyZXMgPSByZXF1aXJlKFwiLi9saWIvZmVhdHVyZXNcIiksXG4gICAgTWVzc2FnZXMgPSByZXF1aXJlKFwiLi9saWIvbWVzc2FnZXNcIiksXG4gICAgWEhUTUxFbnRpdGllcyA9IHJlcXVpcmUoXCIuL2xpYi94aHRtbC1lbnRpdGllc1wiKSxcbiAgICBTdHJpbmdNYXAgPSByZXF1aXJlKFwiLi9saWIvc3RyaW5nLW1hcFwiKSxcbiAgICBjb21tZW50QXR0YWNobWVudCA9IHJlcXVpcmUoXCIuL2xpYi9jb21tZW50LWF0dGFjaG1lbnRcIik7XG5cbnZhciBUb2tlbiA9IHRva2VuSW5mby5Ub2tlbixcbiAgICBUb2tlbk5hbWUgPSB0b2tlbkluZm8uVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VucyA9IHRva2VuSW5mby5GbkV4cHJUb2tlbnMsXG4gICAgUmVnZXggPSBzeW50YXguUmVnZXgsXG4gICAgUHJvcGVydHlLaW5kLFxuICAgIHNvdXJjZSxcbiAgICBzdHJpY3QsXG4gICAgaW5kZXgsXG4gICAgbGluZU51bWJlcixcbiAgICBsaW5lU3RhcnQsXG4gICAgbGVuZ3RoLFxuICAgIGxvb2thaGVhZCxcbiAgICBzdGF0ZSxcbiAgICBleHRyYTtcblxuUHJvcGVydHlLaW5kID0ge1xuICAgIERhdGE6IDEsXG4gICAgR2V0OiAyLFxuICAgIFNldDogNFxufTtcblxuXG4vLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuXG4vLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXRcbi8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLlxuLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC5cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFTU0VSVDogXCIgKyBtZXNzYWdlKTtcbiAgICB9XG59XG5cbi8vIDcuNCBDb21tZW50c1xuXG5mdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHtcbiAgICB2YXIgY29tbWVudDtcblxuICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09IFwibnVtYmVyXCIsIFwiQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb25cIik7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRlbiB0aGUgY29tbWVudHNcbiAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcgdGhlIGxleGljYWwgYW5hbHlzaXMuXG4gICAgLy8gVGh1cywgd2UgbmVlZCB0byBza2lwIGFkZGluZyBhIGNvbW1lbnQgaWYgdGhlIGNvbW1lbnQgYXJyYXkgYWxyZWFkeVxuICAgIC8vIGhhbmRsZWQgaXQuXG4gICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID0gc3RhcnQ7XG5cbiAgICBjb21tZW50ID0ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xuICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdO1xuICAgIH1cbiAgICBpZiAoZXh0cmEubG9jKSB7XG4gICAgICAgIGNvbW1lbnQubG9jID0gbG9jO1xuICAgIH1cbiAgICBleHRyYS5jb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuXG4gICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgY29tbWVudEF0dGFjaG1lbnQuYWRkQ29tbWVudChjb21tZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQpIHtcbiAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0O1xuICAgIGxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zmc2V0XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRDb21tZW50KFwiTGluZVwiLCBjb21tZW50LCBzdGFydCwgaW5kZXggLSAxLCBsb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4KTtcbiAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICAgIGFkZENvbW1lbnQoXCJMaW5lXCIsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNraXBNdWx0aUxpbmVDb21tZW50KCkge1xuICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDtcblxuICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICBzdGFydCA9IGluZGV4IC0gMjtcbiAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHtcbiAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoIFwiKi9cIi5cbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJGKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoXCJCbG9ja1wiLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG59XG5cbmZ1bmN0aW9uIHNraXBDb21tZW50KCkge1xuICAgIHZhciBjaCwgc3RhcnQ7XG5cbiAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChzeW50YXguaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyBcIi9cIlxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDJGKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMgXCIqXCJcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzIFwiLVwiXG4gICAgICAgICAgICAvLyBVKzAwM0UgaXMgXCI+XCJcbiAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7XG4gICAgICAgICAgICAgICAgLy8gXCItLT5cIiBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzIFwiPFwiXG4gICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gXCIhLS1cIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYFxuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7XG5cbiAgICBsZW4gPSAocHJlZml4ID09PSBcInVcIikgPyA0IDogMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHN5bnRheC5pc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBcIjAxMjM0NTY3ODlhYmNkZWZcIi5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG59XG5cbi8qKlxuICogU2NhbnMgYW4gZXh0ZW5kZWQgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZSBmcm9tIHNvdXJjZS4gVGhyb3dzIGFuXG4gKiBlcnJvciBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkgb3IgaWYgdGhlIGNvZGUgcG9pbnQgdmFsdWUgaXMgdG9vIGxhcmdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cmluZyBjcmVhdGVkIGJ5IHRoZSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCkge1xuICAgIHZhciBjaCwgY29kZSwgY3UxLCBjdTI7XG5cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgY29kZSA9IDA7XG5cbiAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLlxuICAgIGlmIChjaCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIFwiMDEyMzQ1Njc4OWFiY2RlZlwiLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPiAweDEwRkZGRiB8fCBjaCAhPT0gXCJ9XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgLy8gVVRGLTE2IEVuY29kaW5nXG4gICAgaWYgKGNvZGUgPD0gMHhGRkZGKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cbiAgICBjdTEgPSAoKGNvZGUgLSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDA7XG4gICAgY3UyID0gKChjb2RlIC0gMHgxMDAwMCkgJiAxMDIzKSArIDB4REMwMDtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjdTEsIGN1Mik7XG59XG5cbmZ1bmN0aW9uIGdldEVzY2FwZWRJZGVudGlmaWVyKCkge1xuICAgIHZhciBjaCwgaWQ7XG5cbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspO1xuICAgIGlkID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAvLyBcIlxcdVwiIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gXCJcXFxcXCIgfHwgIXN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBjaDtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmICghc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgICAgICAvLyBcIlxcdVwiIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoXCJ1XCIpO1xuICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gXCJcXFxcXCIgfHwgIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZCArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHtcbiAgICB2YXIgc3RhcnQsIGNoO1xuXG4gICAgc3RhcnQgPSBpbmRleCsrO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgaW5kZXggPSBzdGFydDtcbiAgICAgICAgICAgIHJldHVybiBnZXRFc2NhcGVkSWRlbnRpZmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7XG4gICAgdmFyIHN0YXJ0LCBpZCwgdHlwZTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgIGlkID0gKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmllcigpIDogZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci5cbiAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyO1xuICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzS2V5d29yZChpZCwgc3RyaWN0LCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkO1xuICAgIH0gZWxzZSBpZiAoaWQgPT09IFwibnVsbFwiKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDtcbiAgICB9IGVsc2UgaWYgKGlkID09PSBcInRydWVcIiB8fCBpZCA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5cbi8vIDcuNyBQdW5jdHVhdG9yc1xuXG5mdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHtcbiAgICB2YXIgc3RhcnQgPSBpbmRleCxcbiAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSxcbiAgICAgICAgY29kZTIsXG4gICAgICAgIGNoMSA9IHNvdXJjZVtpbmRleF0sXG4gICAgICAgIGNoMixcbiAgICAgICAgY2gzLFxuICAgICAgICBjaDQ7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG4gICAgICAgIGNhc2UgNDA6ICAgLy8gKCBvcGVuIGJyYWNrZXRcbiAgICAgICAgY2FzZSA0MTogICAvLyApIGNsb3NlIGJyYWNrZXRcbiAgICAgICAgY2FzZSA1OTogICAvLyA7IHNlbWljb2xvblxuICAgICAgICBjYXNlIDQ0OiAgIC8vICwgY29tbWFcbiAgICAgICAgY2FzZSA5MTogICAvLyBbXG4gICAgICAgIGNhc2UgOTM6ICAgLy8gXVxuICAgICAgICBjYXNlIDU4OiAgIC8vIDpcbiAgICAgICAgY2FzZSA2MzogICAvLyA/XG4gICAgICAgIGNhc2UgMTI2OiAgLy8gflxuICAgICAgICAgICAgKytpbmRleDtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAxMjM6ICAvLyB7IG9wZW4gY3VybHkgYnJhY2VcbiAgICAgICAgY2FzZSAxMjU6ICAvLyB9IGNsb3NlIGN1cmx5IGJyYWNlXG4gICAgICAgICAgICArK2luZGV4O1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY29kZSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29rYWhlYWQyIGZ1bmN0aW9uIGNhbiBjYXVzZSB0b2tlbnMgdG8gYmUgc2Nhbm5lZCB0d2ljZSBhbmQgaW4gZG9pbmcgc29cbiAgICAgICAgICAgIC8vIHdvdWxkIHdyZWNrIHRoZSBjdXJseSBzdGFjayBieSBwdXNoaW5nIHRoZSBzYW1lIHRva2VuIG9udG8gdGhlIHN0YWNrIHR3aWNlLlxuICAgICAgICAgICAgLy8gY3VybHlMYXN0SW5kZXggZW5zdXJlcyBlYWNoIHRva2VuIGlzIHB1c2hlZCBvciBwb3BwZWQgZXhhY3RseSBvbmNlXG4gICAgICAgICAgICBpZiAoaW5kZXggPiBzdGF0ZS5jdXJseUxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5TGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDEyMykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goXCJ7XCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblxuICAgICAgICAgICAgLy8gXCI9XCIgKGNoYXIgIzYxKSBtYXJrcyBhbiBhc3NpZ25tZW50IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgICAgICAgICBpZiAoY29kZTIgPT09IDYxKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6ICAvLyAlXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6ICAvLyAmXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6ICAvLyAqOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQzOiAgLy8gK1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ1OiAgLy8gLVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OiAgLy8gL1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDYwOiAgLy8gPFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDYyOiAgLy8gPlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDk0OiAgLy8gXlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyNDogLy8gfFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzM6IC8vICFcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MTogLy8gPVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDYxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBQZWVrIG1vcmUgY2hhcmFjdGVycy5cblxuICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdO1xuICAgIGNoMyA9IHNvdXJjZVtpbmRleCArIDJdO1xuICAgIGNoNCA9IHNvdXJjZVtpbmRleCArIDNdO1xuXG4gICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPlwiKSB7XG4gICAgICAgIGlmIChjaDQgPT09IFwiPVwiKSB7XG4gICAgICAgICAgICBpbmRleCArPSA0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIj4+Pj1cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49XG5cbiAgICBpZiAoY2gxID09PSBcIj5cIiAmJiBjaDIgPT09IFwiPlwiICYmIGNoMyA9PT0gXCI+XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI+Pj5cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiPFwiICYmIGNoMiA9PT0gXCI8XCIgJiYgY2gzID09PSBcIj1cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIjw8PVwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPVwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPj49XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGUgLi4uIG9wZXJhdG9yIChzcHJlYWQsIHJlc3RQYXJhbXMsIEpTWCwgZXRjLilcbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnNwcmVhZCB8fFxuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcyB8fFxuICAgICAgICAoZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCAmJiBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSlcbiAgICApIHtcbiAgICAgICAgaWYgKGNoMSA9PT0gXCIuXCIgJiYgY2gyID09PSBcIi5cIiAmJiBjaDMgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIi4uLlwiLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8XG4gICAgaWYgKGNoMSA9PT0gY2gyICYmIChcIistPD4mfFwiLmluZGV4T2YoY2gxKSA+PSAwKSkge1xuICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjaDEgKyBjaDIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB0aGUgPT4gZm9yIGFycm93IGZ1bmN0aW9uc1xuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMuYXJyb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgaWYgKGNoMSA9PT0gXCI9XCIgJiYgY2gyID09PSBcIj5cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCI9PlwiLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwiPD49ISstKiUmfF4vXCIuaW5kZXhPZihjaDEpID49IDApIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNoMSA9PT0gXCIuXCIpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG59XG5cbi8vIDcuOC4zIE51bWVyaWMgTGl0ZXJhbHNcblxuZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHtcbiAgICB2YXIgbnVtYmVyID0gXCJcIjtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN5bnRheC5pc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KFwiMHhcIiArIG51bWJlciwgMTYpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQpIHtcbiAgICB2YXIgY2gsIG51bWJlciA9IFwiXCI7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggIT09IFwiMFwiICYmIGNoICE9PSBcIjFcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBvbmx5IDBiIG9yIDBCXG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuXG4gICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBzeW50YXguaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCAyKSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwocHJlZml4LCBzdGFydCkge1xuICAgIHZhciBudW1iZXIsIG9jdGFsO1xuXG4gICAgaWYgKHN5bnRheC5pc09jdGFsRGlnaXQocHJlZml4KSkge1xuICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgIG51bWJlciA9IFwiMFwiICsgc291cmNlW2luZGV4KytdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9jdGFsID0gZmFsc2U7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIG51bWJlciA9IFwiXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghc3ludGF4LmlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAoIW9jdGFsICYmIG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gb25seSAwbyBvciAwT1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLFxuICAgICAgICBvY3RhbDogb2N0YWwsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7XG4gICAgdmFyIG51bWJlciwgc3RhcnQsIGNoO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChzeW50YXguaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSBcIi5cIiksXG4gICAgICAgIFwiTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50XCIpO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICBudW1iZXIgPSBcIlwiO1xuICAgIGlmIChjaCAhPT0gXCIuXCIpIHtcbiAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG5cbiAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCBcIjB4XCIuXG4gICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCBcIjBcIi5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJ4XCIgfHwgY2ggPT09IFwiWFwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5hcnkgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInXG4gICAgICAgICAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmJpbmFyeUxpdGVyYWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSBcImJcIiB8fCBjaCA9PT0gXCJCXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoZXh0cmEuZWNtYUZlYXR1cmVzLm9jdGFsTGl0ZXJhbHMgJiYgKGNoID09PSBcIm9cIiB8fCBjaCA9PT0gXCJPXCIpKSB8fCBzeW50YXguaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoIFwiMFwiIHN1Y2ggYXMgXCIwOVwiIGlzIGlsbGVnYWwuXG4gICAgICAgICAgICBpZiAoY2ggJiYgc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCIuXCIpIHtcbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiZVwiIHx8IGNoID09PSBcIkVcIikge1xuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSBcIitcIiB8fCBjaCA9PT0gXCItXCIpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG4vKipcbiAqIFNjYW4gYSBzdHJpbmcgZXNjYXBlIHNlcXVlbmNlIGFuZCByZXR1cm4gaXRzIHNwZWNpYWwgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoIFRoZSBzdGFydGluZyBjaGFyYWN0ZXIgb2YgdGhlIGdpdmVuIHNlcXVlbmNlLlxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhbmQgYSBmbGFnXG4gKiBpZiB0aGUgZXNjYXBlIHNlcXVlbmNlIHdhcyBhbiBvY3RhbC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCkge1xuICAgIHZhciBjb2RlLFxuICAgICAgICB1bmVzY2FwZWQsXG4gICAgICAgIHJlc3RvcmUsXG4gICAgICAgIGVzY2FwZWRDaCxcbiAgICAgICAgb2N0YWwgPSBmYWxzZTtcblxuICAgIC8vIEFuIGVzY2FwZSBzZXF1ZW5jZSBjYW5ub3QgYmUgZW1wdHlcbiAgICBpZiAoIWNoKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXHJcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwidVwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwie1wiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBFUzYgZXh0ZW5kZWQgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXMuXG4gICAgICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMudW5pY29kZUNvZGVQb2ludEVzY2FwZXMpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInVcIiB8fCBjaCA9PT0gXCJ4XCIpIHtcbiAgICAgICAgLy8gSGFuZGxlIG90aGVyIHVuaWNvZGUgYW5kIGhleCBjb2RlcyBub3JtYWxseVxuICAgICAgICByZXN0b3JlID0gaW5kZXg7XG4gICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICBpZiAodW5lc2NhcGVkKSB7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSB1bmVzY2FwZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSBjaDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiblwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxuXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJyXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInRcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcdFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxiXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJmXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXGZcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInZcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcdlwiO1xuICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgY29kZSA9IFwiMDEyMzQ1NjdcIi5pbmRleE9mKGNoKTtcblxuICAgICAgICAvLyBcXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIFwiMDEyMzQ1NjdcIi5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG5cbiAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgaWYgKFwiMDEyM1wiLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgc3ludGF4LmlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIFwiMDEyMzQ1NjdcIi5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXNjYXBlZENoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlc2NhcGVkQ2ggPSBjaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjaDogZXNjYXBlZENoLFxuICAgICAgICBvY3RhbDogb2N0YWxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuU3RyaW5nTGl0ZXJhbCgpIHtcbiAgICB2YXIgc3RyID0gXCJcIixcbiAgICAgICAgY2gsXG4gICAgICAgIGVzY2FwZWRTZXF1ZW5jZSxcbiAgICAgICAgb2N0YWwgPSBmYWxzZSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcixcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQsXG4gICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTtcblxuICAgIGFzc2VydCgocXVvdGUgPT09IFwiJ1wiIHx8IHF1b3RlID09PSBcIlxcXCJcIiksXG4gICAgICAgIFwiU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlXCIpO1xuXG4gICAgKytpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgcXVvdGUgPSBcIlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGVzY2FwZWRTZXF1ZW5jZSA9IHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCk7XG4gICAgICAgICAgICBzdHIgKz0gZXNjYXBlZFNlcXVlbmNlLmNoO1xuICAgICAgICAgICAgb2N0YWwgPSBlc2NhcGVkU2VxdWVuY2Uub2N0YWwgfHwgb2N0YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVvdGUgIT09IFwiXCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlcixcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgdGVtcGxhdGUgc3RyaW5nIGFuZCByZXR1cm4gYSB0b2tlbi4gVGhpcyBzY2FucyBib3RoIHRoZSBmaXJzdCBhbmRcbiAqIHN1YnNlcXVlbnQgcGllY2VzIG9mIGEgdGVtcGxhdGUgc3RyaW5nIGFuZCBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IGJhY2t0aWNrXG4gKiBvciB0aGUgY2xvc2luZyB9IGhhdmUgYWxyZWFkeSBiZWVuIHNjYW5uZWQuXG4gKiBAcmV0dXJucyB7VG9rZW59IFRoZSB0ZW1wbGF0ZSBzdHJpbmcgdG9rZW4uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7XG4gICAgdmFyIGNvb2tlZCA9IFwiXCIsXG4gICAgICAgIGNoLFxuICAgICAgICBlc2NhcGVkU2VxdWVuY2UsXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZSxcbiAgICAgICAgdGFpbCA9IGZhbHNlLFxuICAgICAgICBoZWFkID0gKHNvdXJjZVtpbmRleF0gPT09IFwiYFwiKTtcblxuICAgICsraW5kZXg7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgaWYgKGNoID09PSBcImBcIikge1xuICAgICAgICAgICAgdGFpbCA9IHRydWU7XG4gICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIiRcIikge1xuICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09IFwie1wiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgZXNjYXBlZFNlcXVlbmNlID0gc2NhbkVzY2FwZVNlcXVlbmNlKGNoKTtcblxuICAgICAgICAgICAgaWYgKGVzY2FwZWRTZXF1ZW5jZS5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29va2VkICs9IGVzY2FwZWRTZXF1ZW5jZS5jaDtcblxuICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIGNvb2tlZCArPSBcIlxcblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+IHN0YXRlLmN1cmx5TGFzdEluZGV4KSB7XG4gICAgICAgIHN0YXRlLmN1cmx5TGFzdEluZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgaWYgKCF0YWlsKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGVhZCkge1xuICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLlRlbXBsYXRlLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgY29va2VkOiBjb29rZWQsXG4gICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZShzdGFydCArIDEsIGluZGV4IC0gKCh0YWlsKSA/IDEgOiAyKSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgICB2YXIgdG1wID0gcGF0dGVybixcbiAgICAgICAgdmFsaWRGbGFncyA9IFwiZ21zaVwiO1xuXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5yZWdleFlGbGFnKSB7XG4gICAgICAgIHZhbGlkRmxhZ3MgKz0gXCJ5XCI7XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5yZWdleFVGbGFnKSB7XG4gICAgICAgIHZhbGlkRmxhZ3MgKz0gXCJ1XCI7XG4gICAgfVxuXG4gICAgaWYgKCFSZWdFeHAoXCJeW1wiICsgdmFsaWRGbGFncyArIFwiXSokXCIpLnRlc3QoZmxhZ3MpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHBGbGFnKTtcbiAgICB9XG5cblxuICAgIGlmIChmbGFncy5pbmRleE9mKFwidVwiKSA+PSAwKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgZWFjaCBhc3RyYWwgc3ltYm9sIGFuZCBldmVyeSBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlIHdpdGggYSBzaW5nbGUgQVNDSUkgc3ltYm9sIHRvIGF2b2lkIHRocm93aW5nIG9uXG4gICAgICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZVxuICAgICAgICAvLyBgL3VgIGZsYWcuXG4gICAgICAgIC8vIE5vdGU6IHJlcGxhY2luZyB3aXRoIHRoZSBBU0NJSSBzeW1ib2wgYHhgIG1pZ2h0IGNhdXNlIGZhbHNlXG4gICAgICAgIC8vIG5lZ2F0aXZlcyBpbiB1bmxpa2VseSBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1xcdXs2MX0tYl1gIGlzIGFcbiAgICAgICAgLy8gcGVyZmVjdGx5IHZhbGlkIHBhdHRlcm4gdGhhdCBpcyBlcXVpdmFsZW50IHRvIGBbYS1iXWAsIGJ1dCBpdFxuICAgICAgICAvLyB3b3VsZCBiZSByZXBsYWNlZCBieSBgW3gtYl1gIHdoaWNoIHRocm93cyBhbiBlcnJvci5cbiAgICAgICAgdG1wID0gdG1wXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXHVcXHsoWzAtOWEtZkEtRl0rKVxcfS9nLCBmdW5jdGlvbiAoJDAsICQxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQxLCAxNikgPD0gMHgxMEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwieFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLCBcInhcIik7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgdHJ5IHtcbiAgICAgICAgUmVnRXhwKHRtcCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvclxuICAgIC8vIGBudWxsYCBpbiBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3MgaXRcbiAgICAvLyB1c2VzLlxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwQm9keSgpIHtcbiAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJvZHk7XG5cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KGNoID09PSBcIi9cIiwgXCJSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaFwiKTtcbiAgICBzdHIgPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICAvLyBFQ01BLTI2MiA3LjguNVxuICAgICAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIl1cIikge1xuICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guXG4gICAgYm9keSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBib2R5LFxuICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7XG4gICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlO1xuXG4gICAgc3RyID0gXCJcIjtcbiAgICBmbGFncyA9IFwiXCI7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxcXFwiICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwidVwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9IFwiXFxcXHVcIjsgcmVzdG9yZSA8IGluZGV4OyArK3Jlc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9yZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IFwidVwiO1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCJcXFxcdVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGZsYWdzLFxuICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwKCkge1xuICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHZhbHVlO1xuXG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBza2lwQ29tbWVudCgpO1xuICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTtcbiAgICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpO1xuICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFncy52YWx1ZSk7XG5cbiAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsXG4gICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkge1xuICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7XG4gICAgbG9jLmVuZCA9IHtcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgIH07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5IFwiL1wiIG9yIFwiLz1cIlxuICAgICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09IFwiUHVuY3R1YXRvclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcIi9cIiB8fCB0b2tlbi52YWx1ZSA9PT0gXCIvPVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcIlJlZ3VsYXJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0ZXJhbCxcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCxcbiAgICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sXG4gICAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnZXg7XG59XG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHtcbiAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7XG4gICAgdmFyIHByZXZUb2tlbixcbiAgICAgICAgY2hlY2tUb2tlbjtcbiAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFwcmV2VG9rZW4pIHtcbiAgICAgICAgLy8gTm90aGluZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uXG4gICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICB9XG4gICAgaWYgKHByZXZUb2tlbi50eXBlID09PSBcIlB1bmN0dWF0b3JcIikge1xuICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSBcIl1cIikge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCIpXCIpIHtcbiAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlblBhcmVuVG9rZW4gLSAxXTtcbiAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gXCJLZXl3b3JkXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09IFwiaWZcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJ3aGlsZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSBcImZvclwiIHx8XG4gICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSBcIndpdGhcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSBcIn1cIikge1xuICAgICAgICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUgc2Vuc2UsXG4gICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXSAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXS50eXBlID09PSBcIktleXdvcmRcIikge1xuICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07XG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07XG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzXG4gICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGV4cHJlc3Npb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xhcmF0aW9uLlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICB9XG4gICAgaWYgKHByZXZUb2tlbi50eXBlID09PSBcIktleXdvcmRcIikge1xuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgIHZhciBjaCxcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd1RlbXBsYXRlU3RyaW5ncyA9IGV4dHJhLmVjbWFGZWF0dXJlcy50ZW1wbGF0ZVN0cmluZ3M7XG5cbiAgICAvKlxuICAgICAqIElmIEpTWCBpc24ndCBhbGxvd2VkIG9yIEpTWCBpcyBhbGxvd2VkIGFuZCB3ZSdyZSBub3QgaW5zaWRlIGFuIEpTWCBjaGlsZCxcbiAgICAgKiB0aGVuIHNraXAgYW55IGNvbW1lbnRzLlxuICAgICAqL1xuICAgIGlmICghYWxsb3dKU1ggfHwgIXN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgc2tpcENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW2luZGV4LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBpbnNpZGUgYW4gSlNYIGNoaWxkLCB0aGVuIGFib3J0IHJlZ3VsYXIgdG9rZW5pemF0aW9uXG4gICAgaWYgKGFsbG93SlNYICYmIHN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGFkdmFuY2VKU1hDaGlsZCgpO1xuICAgIH1cblxuICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDtcbiAgICBpZiAoY2ggPT09IDB4MjggfHwgY2ggPT09IDB4MjkgfHwgY2ggPT09IDB4M0IpIHtcbiAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgfVxuXG4gICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS5cbiAgICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHtcbiAgICAgICAgaWYgKGFsbG93SlNYICYmIHN0YXRlLmluSlNYVGFnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbkpTWFN0cmluZ0xpdGVyYWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWFRhZyAmJiBzeW50YXguaXNKU1hJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuSlNYSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIFRlbXBsYXRlIHN0cmluZ3Mgc3RhcnQgd2l0aCBiYWNrdGljayAoVSswMDk2KSBvciBjbG9zaW5nIGN1cmx5IGJyYWNlICgxMjUpIGFuZCBiYWNrdGljay5cbiAgICBpZiAoYWxsb3dUZW1wbGF0ZVN0cmluZ3MpIHtcblxuICAgICAgICAvLyB0ZW1wbGF0ZSBzdHJpbmdzIHN0YXJ0IHdpdGggYmFja3RpY2sgKDk2KSBvciBvcGVuIGN1cmx5ICgxMjUpIGJ1dCBvbmx5IGlmIHRoZSBvcGVuXG4gICAgICAgIC8vIGN1cmx5IGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGN1cmx5IGZyb20gYSB0ZW1wbGF0ZS5cbiAgICAgICAgaWYgKGNoID09PSA5NiB8fCAoY2ggPT09IDEyNSAmJiBzdGF0ZS5jdXJseVN0YWNrW3N0YXRlLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09IFwidGVtcGxhdGVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZFxuICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4MkUpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICB9XG5cbiAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguXG4gICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNoID09PSAweDJGKSB7XG4gICAgICAgIHJldHVybiBhZHZhbmNlU2xhc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFRva2VuKCkge1xuICAgIHZhciBsb2MsIHRva2VuLCByYW5nZSwgdmFsdWUsIGVudHJ5LFxuICAgICAgICBhbGxvd0pTWCA9IGV4dHJhLmVjbWFGZWF0dXJlcy5qc3g7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghYWxsb3dKU1ggfHwgIXN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgc2tpcENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRva2VuID0gYWR2YW5jZSgpO1xuICAgIGxvYy5lbmQgPSB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByYW5nZSA9IFt0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV1dO1xuICAgICAgICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pO1xuICAgICAgICBlbnRyeSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBlXSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHJhbmdlOiByYW5nZSxcbiAgICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0b2tlbi5yZWdleCkge1xuICAgICAgICAgICAgZW50cnkucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogdG9rZW4ucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogdG9rZW4ucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciB0b2tlbjtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIGluZGV4ID0gdG9rZW4ucmFuZ2VbMV07XG4gICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0O1xuXG4gICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09IFwidW5kZWZpbmVkXCIpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7XG5cbiAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDtcblxuICAgIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gcGVlaygpIHtcbiAgICB2YXIgcG9zLFxuICAgICAgICBsaW5lLFxuICAgICAgICBzdGFydDtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09IFwidW5kZWZpbmVkXCIpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7XG5cbiAgICBpbmRleCA9IHBvcztcbiAgICBsaW5lTnVtYmVyID0gbGluZTtcbiAgICBsaW5lU3RhcnQgPSBzdGFydDtcbn1cblxuZnVuY3Rpb24gbG9va2FoZWFkMigpIHtcbiAgICB2YXIgYWR2LCBwb3MsIGxpbmUsIHN0YXJ0LCByZXN1bHQ7XG5cbiAgICAvLyBJZiB3ZSBhcmUgY29sbGVjdGluZyB0aGUgdG9rZW5zLCBkb24ndCBncmFiIHRoZSBuZXh0IG9uZSB5ZXQuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBhZHYgPSAodHlwZW9mIGV4dHJhLmFkdmFuY2UgPT09IFwiZnVuY3Rpb25cIikgPyBleHRyYS5hZHZhbmNlIDogYWR2YW5jZTtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgLy8gU2NhbiBmb3IgdGhlIG5leHQgaW1tZWRpYXRlIHRva2VuLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChsb29rYWhlYWQgPT09IG51bGwpIHtcbiAgICAgICAgbG9va2FoZWFkID0gYWR2KCk7XG4gICAgfVxuICAgIGluZGV4ID0gbG9va2FoZWFkLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSBsb29rYWhlYWQubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSBsb29rYWhlYWQubGluZVN0YXJ0O1xuXG4gICAgLy8gR3JhYiB0aGUgdG9rZW4gcmlnaHQgYWZ0ZXIuXG4gICAgcmVzdWx0ID0gYWR2KCk7XG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBKU1hcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWU7XG4gICAgfVxuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QubmFtZXNwYWNlLm5hbWUgKyBcIjpcIiArIG9iamVjdC5uYW1lLm5hbWU7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9iamVjdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYTWVtYmVyRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3Qub2JqZWN0KSArIFwiLlwiICtcbiAgICAgICAgICAgIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0LnByb3BlcnR5KVxuICAgICAgICApO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93VW5leHBlY3RlZChvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYSWRlbnRpZmllcigpIHtcbiAgICB2YXIgY2gsIHN0YXJ0LCB2YWx1ZSA9IFwiXCI7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNKU1hJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5KU1hJZGVudGlmaWVyLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYRW50aXR5KCkge1xuICAgIHZhciBjaCwgc3RyID0gXCJcIiwgc3RhcnQgPSBpbmRleCwgY291bnQgPSAwLCBjb2RlO1xuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoY2ggPT09IFwiJlwiLCBcIkVudGl0eSBtdXN0IHN0YXJ0IHdpdGggYW4gYW1wZXJzYW5kXCIpO1xuICAgIGluZGV4Kys7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGNvdW50KysgPCAxMCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGNoO1xuICAgIH1cblxuICAgIC8vIFdlbGwtZm9ybWVkIGVudGl0eSAoZW5kaW5nIHdhcyBmb3VuZCkuXG4gICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICAvLyBOdW1lcmljIGVudGl0eS5cbiAgICAgICAgaWYgKHN0clswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIGlmIChzdHJbMV0gPT09IFwieFwiKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9ICsoXCIwXCIgKyBzdHIuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgbGVhZGluZyB6ZXJvcyBpbiBvcmRlciB0byBhdm9pZCB0cmVhdGluZyBhcyBvY3RhbCBpbiBvbGQgYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgY29kZSA9ICtzdHIuc3Vic3RyKDEpLnJlcGxhY2UoUmVnZXguTGVhZGluZ1plcm9zLCBcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc05hTihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB9IGVsc2UgaWYgKFhIVE1MRW50aXRpZXNbc3RyXSkge1xuICAgICAgICAgICAgcmV0dXJuIFhIVE1MRW50aXRpZXNbc3RyXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyZWF0IG5vbi1lbnRpdHkgc2VxdWVuY2VzIGFzIHJlZ3VsYXIgdGV4dC5cbiAgICBpbmRleCA9IHN0YXJ0ICsgMTtcbiAgICByZXR1cm4gXCImXCI7XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hUZXh0KHN0b3BDaGFycykge1xuICAgIHZhciBjaCwgc3RyID0gXCJcIiwgc3RhcnQ7XG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoc3RvcENoYXJzLmluZGV4T2YoY2gpICE9PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSBcIiZcIikge1xuICAgICAgICAgICAgc3RyICs9IHNjYW5KU1hFbnRpdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5KU1hUZXh0LFxuICAgICAgICB2YWx1ZTogc3RyLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWFN0cmluZ0xpdGVyYWwoKSB7XG4gICAgdmFyIGlubmVyVG9rZW4sIHF1b3RlLCBzdGFydDtcblxuICAgIHF1b3RlID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoKHF1b3RlID09PSBcIlxcXCJcIiB8fCBxdW90ZSA9PT0gXCInXCIpLFxuICAgICAgICBcIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZVwiKTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgKytpbmRleDtcblxuICAgIGlubmVyVG9rZW4gPSBzY2FuSlNYVGV4dChbcXVvdGVdKTtcblxuICAgIGlmIChxdW90ZSAhPT0gc291cmNlW2luZGV4XSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICArK2luZGV4O1xuXG4gICAgaW5uZXJUb2tlbi5yYW5nZSA9IFtzdGFydCwgaW5kZXhdO1xuXG4gICAgcmV0dXJuIGlubmVyVG9rZW47XG59XG5cbi8qXG4gKiBCZXR3ZWVuIEpTWCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgKGUuZy4gPGZvbz5IRVJFPC9mb28+KSwgYW55dGhpbmcgdGhhdFxuICogaXMgbm90IGFub3RoZXIgSlNYIHRhZyBhbmQgaXMgbm90IGFuIGV4cHJlc3Npb24gd3JhcHBlZCBieSB7fSBpcyB0ZXh0LlxuICovXG5mdW5jdGlvbiBhZHZhbmNlSlNYQ2hpbGQoKSB7XG4gICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgLy8geyAoMTIzKSBhbmQgPCAoNjApXG4gICAgaWYgKGNoICE9PSAxMjMgJiYgY2ggIT09IDYwKSB7XG4gICAgICAgIHJldHVybiBzY2FuSlNYVGV4dChbXCI8XCIsIFwie1wiXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYSWRlbnRpZmllcigpIHtcbiAgICB2YXIgdG9rZW4sIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5KU1hJZGVudGlmaWVyKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE5hbWVzcGFjZWROYW1lKCkge1xuICAgIHZhciBuYW1lc3BhY2UsIG5hbWUsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgbmFtZXNwYWNlID0gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG4gICAgZXhwZWN0KFwiOlwiKTtcbiAgICBuYW1lID0gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hNZW1iZXJFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgZXhwciA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYTWVtYmVyRXhwcmVzc2lvbihleHByLCBwYXJzZUpTWElkZW50aWZpZXIoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVsZW1lbnROYW1lKCkge1xuICAgIGlmIChsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiOlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWE5hbWVzcGFjZWROYW1lKCk7XG4gICAgfVxuICAgIGlmIChsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiLlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWE1lbWJlckV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUpTWElkZW50aWZpZXIoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpIHtcbiAgICB2YXIgdmFsdWUsIG1hcmtlcjtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgXCJKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImV4cHJlc3Npb25cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI8XCIpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VKU1hFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSlNYVGV4dCkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdmFsdWUgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkSlNYQXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKTtcbiAgICB3aGlsZSAoc291cmNlLmNoYXJBdChpbmRleCkgIT09IFwifVwiKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEVtcHR5RXhwcmVzc2lvbigpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCkge1xuICAgIHZhciBleHByZXNzaW9uLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBmYWxzZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkge1xuICAgIHZhciBleHByZXNzaW9uLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSA9IHRydWU7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuICAgIGV4cGVjdChcIi4uLlwiKTtcblxuICAgIHN0YXRlLmluSlNYU3ByZWFkQXR0cmlidXRlID0gZmFsc2U7XG5cbiAgICBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWFNwcmVhZEF0dHJpYnV0ZShleHByZXNzaW9uKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlKCkge1xuICAgIHZhciBuYW1lLCBtYXJrZXI7XG5cbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgbmFtZSA9IHBhcnNlSlNYQXR0cmlidXRlTmFtZSgpO1xuXG4gICAgLy8gSFRNTCBlbXB0eSBhdHRyaWJ1dGVcbiAgICBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hBdHRyaWJ1dGUobmFtZSwgcGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQXR0cmlidXRlKG5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hDaGlsZCgpIHtcbiAgICB2YXIgdG9rZW4sIG1hcmtlcjtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHRva2VuID0gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7XG4gICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSlNYVGV4dCkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKTtcbiAgICAgICAgdG9rZW4gPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiA9IHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQ2xvc2luZ0VsZW1lbnQoKSB7XG4gICAgdmFyIG5hbWUsIG9yaWdJbkpTWENoaWxkLCBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSB0cnVlO1xuICAgIGV4cGVjdChcIjxcIik7XG4gICAgZXhwZWN0KFwiL1wiKTtcbiAgICBuYW1lID0gcGFyc2VKU1hFbGVtZW50TmFtZSgpO1xuICAgIC8vIEJlY2F1c2UgYWR2YW5jZSgpIChjYWxsZWQgYnkgbGV4KCkgY2FsbGVkIGJ5IGV4cGVjdCgpKSBleHBlY3RzIHRoZXJlXG4gICAgLy8gdG8gYmUgYSB2YWxpZCB0b2tlbiBhZnRlciA+LCBpdCBuZWVkcyB0byBrbm93IHdoZXRoZXIgdG8gbG9vayBmb3IgYVxuICAgIC8vIHN0YW5kYXJkIEpTIHRva2VuIG9yIGFuIEpTWCB0ZXh0IG5vZGVcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG4gICAgZXhwZWN0KFwiPlwiKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hDbG9zaW5nRWxlbWVudChuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKSB7XG4gICAgdmFyIG5hbWUsIGF0dHJpYnV0ZXMgPSBbXSwgc2VsZkNsb3NpbmcgPSBmYWxzZSwgb3JpZ0luSlNYQ2hpbGQsXG4gICAgICAgIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIjxcIik7XG5cbiAgICBuYW1lID0gcGFyc2VKU1hFbGVtZW50TmFtZSgpO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICBsb29rYWhlYWQudmFsdWUgIT09IFwiL1wiICYmXG4gICAgICAgICAgICBsb29rYWhlYWQudmFsdWUgIT09IFwiPlwiKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChwYXJzZUpTWEF0dHJpYnV0ZSgpKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiL1wiKSB7XG4gICAgICAgIGV4cGVjdChcIi9cIik7XG4gICAgICAgIC8vIEJlY2F1c2UgYWR2YW5jZSgpIChjYWxsZWQgYnkgbGV4KCkgY2FsbGVkIGJ5IGV4cGVjdCgpKSBleHBlY3RzXG4gICAgICAgIC8vIHRoZXJlIHRvIGJlIGEgdmFsaWQgdG9rZW4gYWZ0ZXIgPiwgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRvXG4gICAgICAgIC8vIGxvb2sgZm9yIGEgc3RhbmRhcmQgSlMgdG9rZW4gb3IgYW4gSlNYIHRleHQgbm9kZVxuICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgICAgIGV4cGVjdChcIj5cIik7XG4gICAgICAgIHNlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gdHJ1ZTtcbiAgICAgICAgZXhwZWN0KFwiPlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbGVtZW50KCkge1xuICAgIHZhciBvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQgPSBudWxsLCBjaGlsZHJlbiA9IFtdLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBvcGVuaW5nRWxlbWVudCA9IHBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTtcblxuICAgIGlmICghb3BlbmluZ0VsZW1lbnQuc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7IC8vIENhbGwgbG9va2FoZWFkMigpIHdpdGggaW5KU1hDaGlsZCA9IGZhbHNlIGJlY2F1c2UgPC8gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGluIHRoZSBjaGlsZFxuICAgICAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gXCI8XCIgJiYgbG9va2FoZWFkMigpLnZhbHVlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHBhcnNlSlNYQ2hpbGQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgICAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcbiAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSBwYXJzZUpTWENsb3NpbmdFbGVtZW50KCk7XG4gICAgICAgIGlmIChnZXRRdWFsaWZpZWRKU1hOYW1lKGNsb3NpbmdFbGVtZW50Lm5hbWUpICE9PSBnZXRRdWFsaWZpZWRKU1hOYW1lKG9wZW5pbmdFbGVtZW50Lm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FeHBlY3RlZEpTWENsb3NpbmdUYWcsIGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFtZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBXaGVuIChlcnJvbmVvdXNseSkgd3JpdGluZyB0d28gYWRqYWNlbnQgdGFncyBsaWtlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIHggPSA8ZGl2Pm9uZTwvZGl2PjxkaXY+dHdvPC9kaXY+O1xuICAgICAqXG4gICAgICogdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBpcyBhIGJpdCBpbmNvbXByZWhlbnNpYmxlLiBTaW5jZSBpdFwic1xuICAgICAqIHJhcmVseSAobmV2ZXI/KSB1c2VmdWwgdG8gd3JpdGUgYSBsZXNzLXRoYW4gc2lnbiBhZnRlciBhbiBKU1hcbiAgICAgKiBlbGVtZW50LCB3ZSBkaXNhbGxvdyBpdCBoZXJlIGluIHRoZSBwYXJzZXIgaW4gb3JkZXIgdG8gcHJvdmlkZSBhXG4gICAgICogYmV0dGVyIGVycm9yIG1lc3NhZ2UuIChJbiB0aGUgcmFyZSBjYXNlIHRoYXQgdGhlIGxlc3MtdGhhbiBvcGVyYXRvclxuICAgICAqIHdhcyBpbnRlbmRlZCwgdGhlIGxlZnQgdGFnIGNhbiBiZSB3cmFwcGVkIGluIHBhcmVudGhlc2VzLilcbiAgICAgKi9cbiAgICBpZiAoIW9yaWdJbkpTWENoaWxkICYmIG1hdGNoKFwiPFwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuQWRqYWNlbnRKU1hFbGVtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYRWxlbWVudChvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKSk7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2NhdGlvbiBtYXJrZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEFwcGxpZXMgbG9jYXRpb24gaW5mb3JtYXRpb24gdG8gdGhlIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGdpdmVuIG1hcmtlci5cbiAqIFRoZSBtYXJrZXIgaW5kaWNhdGVzIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgbm9kZSBpcyBzYWlkIHRvIGhhdmUgdG8gYmVndW5cbiAqIGluIHRoZSBzb3VyY2UgY29kZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHRoZSBub2RlLlxuICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBhcHBseSBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0by5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSB0aGF0IHdhcyBwYXNzZWQgaW4uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJBcHBseShtYXJrZXIsIG5vZGUpIHtcblxuICAgIC8vIGFkZCByYW5nZSBpbmZvcm1hdGlvbiB0byB0aGUgbm9kZSBpZiBwcmVzZW50XG4gICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgIG5vZGUucmFuZ2UgPSBbbWFya2VyLm9mZnNldCwgaW5kZXhdO1xuICAgIH1cblxuICAgIC8vIGFkZCBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0aGUgbm9kZSBpZiBwcmVzZW50XG4gICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICBub2RlLmxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbWFya2VyLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBtYXJrZXIuY29sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEF0dGFjaCBleHRyYS5zb3VyY2UgaW5mb3JtYXRpb24gdG8gdGhlIGxvY2F0aW9uLCBpZiBwcmVzZW50XG4gICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHtcbiAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0dGFjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyBjb21tZW50cyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICBjb21tZW50QXR0YWNobWVudC5wcm9jZXNzQ29tbWVudChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYXRpb24gbWFya2VyIGluIHRoZSBzb3VyY2UgY29kZS4gTG9jYXRpb24gbWFya2VycyBhcmUgdXNlZCBmb3JcbiAqIHRyYWNraW5nIHdoZXJlIHRva2VucyBhbmQgbm9kZXMgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEEgbWFya2VyIG9iamVjdCBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlciBkb2Vzbid0IGhhdmVcbiAqICAgICAgYW55IGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQ3JlYXRlKCkge1xuXG4gICAgaWYgKCFleHRyYS5sb2MgJiYgIWV4dHJhLnJhbmdlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2tpcENvbW1lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogaW5kZXgsXG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbDogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2NhdGlvbiBtYXJrZXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBMb2NhdGlvbiBtYXJrZXJzIGFyZSB1c2VkIGZvclxuICogdHJhY2tpbmcgd2hlcmUgdG9rZW5zIGFuZCBub2RlcyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGlzIG1ldGhvZFxuICogZG9lc24ndCBza2lwIGNvbW1lbnRzIG9yIGV4dHJhIHdoaXRlc3BhY2Ugd2hpY2ggaXMgaW1wb3J0YW50IGZvciBKU1guXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG1hcmtlciBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBoYXZlXG4gKiAgICAgIGFueSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckNyZWF0ZVByZXNlcnZlV2hpdGVzcGFjZSgpIHtcblxuICAgIGlmICghZXh0cmEubG9jICYmICFleHRyYS5yYW5nZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogaW5kZXgsXG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbDogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTeW50YXggVHJlZSBEZWxlZ2F0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0IHRva2VuLlxuXG5mdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3IoKSB7XG4gICAgdmFyIHBvcywgbGluZSwgc3RhcnQsIGZvdW5kO1xuXG4gICAgcG9zID0gaW5kZXg7XG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc3RhcnQgPSBsaW5lU3RhcnQ7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBmb3VuZCA9IGxpbmVOdW1iZXIgIT09IGxpbmU7XG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG5cbiAgICByZXR1cm4gZm91bmQ7XG59XG5cbi8vIFRocm93IGFuIGV4Y2VwdGlvblxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdlRm9ybWF0KSB7XG5cbiAgICB2YXIgZXJyb3IsXG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAvJShcXGQpL2csXG4gICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsIFwiTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICBpZiAodHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJMaW5lIFwiICsgdG9rZW4ubGluZU51bWJlciArIFwiOiBcIiArIG1zZyk7XG4gICAgICAgIGVycm9yLmluZGV4ID0gdG9rZW4ucmFuZ2VbMF07XG4gICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5yYW5nZVswXSAtIGxpbmVTdGFydCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJMaW5lIFwiICsgbGluZU51bWJlciArIFwiOiBcIiArIG1zZyk7XG4gICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxpbmVTdGFydCArIDE7XG4gICAgfVxuXG4gICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7XG4gICAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgpIHtcbiAgICB0cnkge1xuICAgICAgICB0aHJvd0Vycm9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLlxuXG5mdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7XG4gICAgfVxuXG4gICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLlxuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbmZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbmZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZFxuLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbmZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7XG4gICAgdmFyIG9wO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgcmV0dXJuIG9wID09PSBcIj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIqPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi89XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIrPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi09XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPDw9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj4+PVwiIHx8XG4gICAgICAgIG9wID09PSBcIiY9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiXj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJ8PVwiO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIHZhciBsaW5lO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKFwifVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuXG5mdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7XG4gICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRtcDtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwiXVwiKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTsgLy8gb25seSBnZXQgaGVyZSB3aGVuIHlvdSBoYXZlIFthLCxdIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTtcbiAgICAgICAgICAgIGlmICghKG1hdGNoKFwiXVwiKSkpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCIsXCIpOyAvLyBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG59XG5cbi8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtSW5mbywgb3B0aW9ucykge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHN0cmljdCxcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQsXG4gICAgICAgIGdlbmVyYXRvciA9IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBib2R5O1xuXG4gICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yO1xuXG4gICAgLypcbiAgICAgKiBFc3ByaW1hIHVzZXMgcGFyc2VDb25jaXNlQm9keSgpIGhlcmUsIHdoaWNoIGlzIGluY29ycmVjdC4gT2JqZWN0IGxpdGVyYWxcbiAgICAgKiBtZXRob2RzIG11c3QgaGF2ZSBicmFjZXMuXG4gICAgICovXG4gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShvcHRpb25zLm1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJhbUluZm8ucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBtZXRob2Q7XG5cbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbXMsIHtcbiAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zID8gb3B0aW9ucy5nZW5lcmF0b3IgOiBmYWxzZSxcbiAgICAgICAgbWFya2VyOiBtYXJrZXJcbiAgICB9KTtcblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRva2VuID0gbGV4KCksXG4gICAgICAgIGFsbG93T2JqZWN0TGl0ZXJhbENvbXB1dGVkID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXMsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIHJlc3VsdDtcblxuICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpKTtcblxuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblxuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAoKCFzdGF0ZS5pbk9iamVjdExpdGVyYWwgfHwgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBwcm9wZXJ0aWVzIHdlIHNob3VsZCBza2lwIHRoZSBbIGFuZCBdLCBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBvbmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLlxuICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cblxuICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICBzd2l0Y2ggKGxvb2thaGVhZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCI7XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhvZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0IGxpdGVyYWxzLFxuLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbi8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbi8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4vLyBpcyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLlxuZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtYXJrZXIpIHtcbiAgICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE1hcmtlcjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNldGA7XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG5cbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiZ2V0XCIsIGtleSwgdmFsdWUsIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7IG1hcmtlcjogbWV0aG9kTWFya2VyIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJzZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcImluaXRcIiwga2V5LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgR2VuZXJhdG9yIFByb3BlcnRpZXNcbiAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXkgKHVzdWFsbHkgYW4gaWRlbnRpZmllcikuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgZ2VuZXJhdG9yIHByb3BlcnR5IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoa2V5LCBtYXJrZXIpIHtcblxuICAgIHZhciBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcblxuICAgIGlmICghbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLy8gVE9ETyhuemFrYXMpOiBVcGRhdGUgdG8gbWF0Y2ggRXNwcmltYVxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sIGtleSwgaWQsIGNvbXB1dGVkLCBtZXRob2RNYXJrZXIsIG9wdGlvbnM7XG4gICAgdmFyIGFsbG93Q29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgYWxsb3dNZXRob2QgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHMsXG4gICAgICAgIGFsbG93U2hvcnRoYW5kID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgY29tcHV0ZWQgPSAodG9rZW4udmFsdWUgPT09IFwiW1wiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgKGFsbG93Q29tcHV0ZWQgJiYgY29tcHV0ZWQpKSB7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2sgZm9yIGdldHRlcnMgYW5kIHNldHRlcnMuIEJlIGNhcmVmdWwhIFwiZ2V0XCIgYW5kIFwic2V0XCIgYXJlIGxlZ2FsXG4gICAgICAgICAqIG1ldGhvZCBuYW1lcy4gSXQncyBvbmx5IGEgZ2V0dGVyIG9yIHNldHRlciBpZiBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24ob3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsIHByb3BlcnR5IChrZXk6dmFsdWUpXG4gICAgICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWV0aG9kIHNob3J0aGFuZCAoa2V5KCl7Li4ufSlcbiAgICAgICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmluZyBkZWZhdWx0cyAoc2hvcnRoYW5kIHN5bnRheClcbiAgICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFwiPVwiLCBpZCwgdmFsdWUpKTtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIHZhciBmdWxsUHJvcGVydHkgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIHNob3J0aGFuZFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZnVsbFByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIE9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGlzIGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5LiBDb21wdXRlZFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIGNhbm5vdCB1c2Ugc2hvcnRoYW5kIG5vdGF0aW9uLCBzbyB0aGF0J3MgYSBzeW50YXggZXJyb3IuXG4gICAgICAgICAqIElmIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGFyZW4ndCBhbGxvdywgdGhlbiB0aGlzIGlzIGFuIGF1dG9tYXRpY1xuICAgICAgICAgKiBzeW50YXggZXJyb3IuIERlc3RydWN0dXJpbmcgaXMgYW5vdGhlciBjYXNlIHdpdGggYSBzaW1pbGFyIHNob3J0aGFuZCBzeW50YXguXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY29tcHV0ZWQgfHwgKCFhbGxvd1Nob3J0aGFuZCAmJiAhYWxsb3dEZXN0cnVjdHVyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG9ydGhhbmQgcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG9ubHkgcG9zc2liaWxpdHkgaW4gdGhpcyBicmFuY2ggaXMgYSBzaG9ydGhhbmQgZ2VuZXJhdG9yXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzIHx8ICFtYXRjaChcIipcIikgfHwgIWFsbG93TWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoaWQsIG1hcmtlcik7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIElmIHdlJ3ZlIG1hZGUgaXQgaGVyZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHJlcHJlc2VudGVkXG4gICAgICogYnkgYSBzdHJpbmcgKGkuZSwgeyBcImZvb1wiOiAyfSkuIFRoZSBvbmx5IG9wdGlvbnMgaGVyZSBhcmUgbm9ybWFsXG4gICAgICogcHJvcGVydHkgd2l0aCBhIGNvbG9uIG9yIGEgbWV0aG9kLlxuICAgICAqL1xuICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgIC8vIGNoZWNrIGZvciBwcm9wZXJ0eSB2YWx1ZVxuICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgbWV0aG9kXG4gICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vIG90aGVyIG9wdGlvbnMsIHRoaXMgaXMgYmFkXG4gICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGROYW1lKGtleSkge1xuICAgIHZhciB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAoa2V5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBrZXkubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKGtleS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0R1cGxpY2F0ZXMgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByb3BlcnR5Rm4sXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN0b3JlZEtpbmQsXG4gICAgICAgIHByZXZpb3VzSW5PYmplY3RMaXRlcmFsID0gc3RhdGUuaW5PYmplY3RMaXRlcmFsLFxuICAgICAgICBraW5kTWFwID0gbmV3IFN0cmluZ01hcCgpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHkuY29tcHV0ZWQpIHtcblxuICAgICAgICAgICAgbmFtZSA9IGdldEZpZWxkTmFtZShwcm9wZXJ0eS5rZXkpO1xuICAgICAgICAgICAgcHJvcGVydHlGbiA9IChwcm9wZXJ0eS5raW5kID09PSBcImdldFwiKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0O1xuICAgICAgICAgICAga2luZCA9IChwcm9wZXJ0eS5raW5kID09PSBcImluaXRcIikgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IHByb3BlcnR5Rm47XG5cbiAgICAgICAgICAgIGlmIChraW5kTWFwLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHN0b3JlZEtpbmQgPSBraW5kTWFwLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmVkS2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhICYmIG5hbWUgPT09IFwiX19wcm90b19fXCIgJiYgYWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEdXBsaWNhdGUgJ19fcHJvdG9fXycgbGl0ZXJhbCBwcm9wZXJ0aWVzIGFyZSBmb3JiaWRkZW4gaW4gRVMgNlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5EdXBsaWNhdGVQcm90b3R5cGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhICYmICFhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIG9ubHkgZm9yYmlkZGVuIGluIEVTIDUgc3RyaWN0IG1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkS2luZCAmIGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JHZXRTZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtpbmRNYXAuc2V0KG5hbWUsIHN0b3JlZEtpbmQgfCBraW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwga2luZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHN0YXRlLmluT2JqZWN0TGl0ZXJhbCA9IHByZXZpb3VzSW5PYmplY3RMaXRlcmFsO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudCBhbmQgcmV0dXJuIGl0cyBBU1ROb2RlIHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uIFBhcnNpbmcgJiBzY2FubmluZyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uLmhlYWQgVHJ1ZSBpZiB0aGlzIGVsZW1lbnQgaXMgdGhlIGZpcnN0IGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIHRlbXBsYXRlIGVsZW1lbnQgbm9kZSB3aXRoIG1hcmtlciBpbmZvIGFwcGxpZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVFbGVtZW50KG9wdGlvbikge1xuICAgIHZhciBtYXJrZXIsIHRva2VuO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5UZW1wbGF0ZSB8fCAob3B0aW9uLmhlYWQgJiYgIWxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlRWxlbWVudChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByYXc6IHRva2VuLnZhbHVlLnJhdyxcbiAgICAgICAgICAgICAgICBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRva2VuLnRhaWxcbiAgICAgICAgKVxuICAgICk7XG59XG5cbi8qKlxuICogUGFyc2UgYSB0ZW1wbGF0ZSBzdHJpbmcgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyBBU1ROb2RlIHJlcHJlc2VudGF0aW9uXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIHRlbXBsYXRlIGxpdGVyYWwgbm9kZSB3aXRoIG1hcmtlciBpbmZvIGFwcGxpZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkge1xuICAgIHZhciBxdWFzaSwgcXVhc2lzLCBleHByZXNzaW9ucywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogdHJ1ZSB9KTtcbiAgICBxdWFzaXMgPSBbIHF1YXNpIF07XG4gICAgZXhwcmVzc2lvbnMgPSBbXTtcblxuICAgIHdoaWxlICghcXVhc2kudGFpbCkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IGZhbHNlIH0pO1xuICAgICAgICBxdWFzaXMucHVzaChxdWFzaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpKTtcbn1cblxuLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICArK3N0YXRlLnBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cblxuLy8gMTEuMSBQcmltYXJ5IEV4cHJlc3Npb25zXG5cbmZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHR5cGUsIHRva2VuLCBleHByLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCxcbiAgICAgICAgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIGFsbG93U3VwZXIgPSBhbGxvd0NsYXNzZXMgfHwgZXh0cmEuZWNtYUZlYXR1cmVzLnN1cGVySW5GdW5jdGlvbnM7XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dKU1ggJiYgbWF0Y2goXCI8XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0eXBlID0gbG9va2FoZWFkLnR5cGU7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZChcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGxvd1N1cGVyICYmIG1hdGNoS2V5d29yZChcInN1cGVyXCIpICYmIHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3VwZXIoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwidGhpc1wiKSkge1xuICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRoaXNFeHByZXNzaW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93Q2xhc3NlcyAmJiBtYXRjaEtleXdvcmQoXCJjbGFzc1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09IFwidHJ1ZVwiKTtcbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSBudWxsO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIi9cIikgfHwgbWF0Y2goXCIvPVwiKSkge1xuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGNvbGxlY3RSZWdleCgpLCBzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHNjYW5SZWdFeHAoKSwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBwZWVrKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG59XG5cbi8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgYXJnO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGFyZyA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgIGlmIChtYXRjaChcIi4uLlwiKSkge1xuICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTcHJlYWRFbGVtZW50KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7XG4gICAgdmFyIHRva2VuLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkge1xuICAgIGV4cGVjdChcIi5cIik7XG5cbiAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgdmFyIGV4cHI7XG5cbiAgICBleHBlY3QoXCJbXCIpO1xuXG4gICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiXVwiKTtcblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5ld0V4cHJlc3Npb24oKSB7XG4gICAgdmFyIGNhbGxlZSwgYXJncyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwibmV3XCIpO1xuICAgIGNhbGxlZSA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpO1xuICAgIGFyZ3MgPSBtYXRjaChcIihcIikgPyBwYXJzZUFyZ3VtZW50cygpIDogW107XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7XG4gICAgdmFyIGV4cHIsIGFyZ3MsXG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG4gICAgZXhwciA9IG1hdGNoS2V5d29yZChcIm5ld1wiKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO1xuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBvbmx5IHN0YXJ0IHBhcnNpbmcgdGVtcGxhdGUgbGl0ZXJhbCBpZiB0aGUgbG9va2FoZWFkIGlzIGEgaGVhZCAoYmVnaW5uaW5nIHdpdGggYClcbiAgICB3aGlsZSAobWF0Y2goXCIuXCIpIHx8IG1hdGNoKFwiW1wiKSB8fCBtYXRjaChcIihcIikgfHwgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiW1wiLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCIuXCIsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsXG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IG1hdGNoS2V5d29yZChcIm5ld1wiKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO1xuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBvbmx5IHN0YXJ0IHBhcnNpbmcgdGVtcGxhdGUgbGl0ZXJhbCBpZiB0aGUgbG9va2FoZWFkIGlzIGEgaGVhZCAoYmVnaW5uaW5nIHdpdGggYClcbiAgICB3aGlsZSAobWF0Y2goXCIuXCIpIHx8IG1hdGNoKFwiW1wiKSB8fCAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiW1wiLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCIuXCIsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5cbi8vIDExLjMgUG9zdGZpeCBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLCB0b2tlbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgaWYgKChtYXRjaChcIisrXCIpIHx8IG1hdGNoKFwiLS1cIikpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICAgICAgLy8gMTEuMy4xLCAxMS4zLjJcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbi8vIDExLjQgVW5hcnkgT3BlcmF0b3JzXG5cbmZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgZXhwcixcbiAgICAgICAgbWFya2VyO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIisrXCIpIHx8IG1hdGNoKFwiLS1cIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICAvLyAxMS40LjQsIDExLjQuNVxuICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiK1wiKSB8fCBtYXRjaChcIi1cIikgfHwgbWF0Y2goXCJ+XCIpIHx8IG1hdGNoKFwiIVwiKSkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZChcImRlbGV0ZVwiKSB8fCBtYXRjaEtleXdvcmQoXCJ2b2lkXCIpIHx8IG1hdGNoS2V5d29yZChcInR5cGVvZlwiKSkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSBcImRlbGV0ZVwiICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHtcbiAgICB2YXIgcHJlYyA9IDA7XG5cbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICBjYXNlIFwifHxcIjpcbiAgICAgICAgcHJlYyA9IDE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIiYmXCI6XG4gICAgICAgIHByZWMgPSAyO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ8XCI6XG4gICAgICAgIHByZWMgPSAzO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCJeXCI6XG4gICAgICAgIHByZWMgPSA0O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCImXCI6XG4gICAgICAgIHByZWMgPSA1O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCI9PVwiOlxuICAgIGNhc2UgXCIhPVwiOlxuICAgIGNhc2UgXCI9PT1cIjpcbiAgICBjYXNlIFwiIT09XCI6XG4gICAgICAgIHByZWMgPSA2O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCI8XCI6XG4gICAgY2FzZSBcIj5cIjpcbiAgICBjYXNlIFwiPD1cIjpcbiAgICBjYXNlIFwiPj1cIjpcbiAgICBjYXNlIFwiaW5zdGFuY2VvZlwiOlxuICAgICAgICBwcmVjID0gNztcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiaW5cIjpcbiAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPDxcIjpcbiAgICBjYXNlIFwiPj5cIjpcbiAgICBjYXNlIFwiPj4+XCI6XG4gICAgICAgIHByZWMgPSA4O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCIrXCI6XG4gICAgY2FzZSBcIi1cIjpcbiAgICAgICAgcHJlYyA9IDk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIipcIjpcbiAgICBjYXNlIFwiL1wiOlxuICAgIGNhc2UgXCIlXCI6XG4gICAgICAgIHByZWMgPSAxMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlYztcbn1cblxuLy8gMTEuNSBNdWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnNcbi8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzXG4vLyAxMS43IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzXG4vLyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0b3JzXG4vLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9yc1xuLy8gMTEuMTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzXG4vLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnNcbmZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgdG9rZW4sIHByZWMsIHByZXZpb3VzQWxsb3dJbiwgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaSxcbiAgICAgICAgbWFya2VyLCBtYXJrZXJzO1xuXG4gICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcbiAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGxlZnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHByZXZpb3VzQWxsb3dJbik7XG4gICAgaWYgKHByZWMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgIGxleCgpO1xuXG4gICAgbWFya2VycyA9IFttYXJrZXIsIG1hcmtlckNyZWF0ZSgpXTtcbiAgICByaWdodCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdO1xuXG4gICAgd2hpbGUgKChwcmVjID0gYmluYXJ5UHJlY2VkZW5jZShsb29rYWhlYWQsIHByZXZpb3VzQWxsb3dJbikpID4gMCkge1xuXG4gICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy5cbiAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkge1xuICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7XG4gICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgbWFya2Vycy5wb3AoKTtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTtcbiAgICAgICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hpZnQuXG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgICAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlckNyZWF0ZSgpKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgfVxuXG4gICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3RhY2suXG4gICAgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgZXhwciA9IHN0YWNrW2ldO1xuICAgIG1hcmtlcnMucG9wKCk7XG4gICAgd2hpbGUgKGkgPiAxKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTtcbiAgICAgICAgaSAtPSAyO1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpO1xuICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyAxMS4xMiBDb25kaXRpb25hbCBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKG1hdGNoKFwiP1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcbiAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG4gICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG4gICAgICAgIGV4cGVjdChcIjpcIik7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7XG4gICAgICAgIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbi8vIFtFUzZdIDE0LjIgQXJyb3cgRnVuY3Rpb25cblxuZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgaSwgbGVuLCBwYXJhbSwgcGFyYW1zLCBvcHRpb25zLFxuICAgICAgICBhbGxvd1Jlc3RQYXJhbXMgPSBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcztcblxuICAgIHBhcmFtcyA9IFtdO1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICB9O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgcGFyYW0gPSBleHByZXNzaW9uc1tpXTtcbiAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBwYXJhbS5uYW1lKTtcbiAgICAgICAgfSAgZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgcGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGFzc2VydChpID09PSBsZW4gLSAxLCBcIkl0IGlzIGd1YXJhbnRlZWQgdGhhdCBTcHJlYWRFbGVtZW50IGlzIGxhc3QgZWxlbWVudCBieSBwYXJzZUV4cHJlc3Npb25cIik7XG4gICAgICAgICAgICBpZiAocGFyYW0uYXJndW1lbnQudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiW1wiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbGxvd1Jlc3RQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW4ndCBnZXQgY29ycmVjdCBsaW5lL2NvbHVtbiBoZXJlIDooXG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0uYXJndW1lbnQpO1xuICAgICAgICAgICAgcGFyYW0udHlwZSA9IGFzdE5vZGVUeXBlcy5SZXN0RWxlbWVudDtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbikge1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaW5kIGEgbGVzcyBoYWNreSB3YXkgb2YgZG9pbmcgdGhpc1xuICAgICAgICAgICAgcGFyYW0udHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5vcGVyYXRvcjtcblxuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0LCBwYXJhbS5sZWZ0Lm5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgIHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zLCBtYXJrZXIpIHtcbiAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHk7XG5cbiAgICBleHBlY3QoXCI9PlwiKTtcbiAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcblxuICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7XG5cbiAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Iob3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5zdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgIGJvZHksXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbi8vIDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3JzXG5cbi8vIDEyLjE0LjUgQXNzaWdubWVudFBhdHRlcm5cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByKSB7XG4gICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nO1xuXG4gICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKHByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCkge1xuICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIuYXJndW1lbnQpO1xuICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNTcHJlYWQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiAmJiBleHByLm9wZXJhdG9yID09PSBcIj1cIikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24gJiZcbiAgICAgICAgICAgIGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkNhbGxFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIDEzLjIuMyBCaW5kaW5nUGF0dGVyblxuXG5mdW5jdGlvbiByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGV4cHIpIHtcbiAgICB2YXIgaSwgbGVuLCBwcm9wZXJ0eSwgZWxlbWVudCxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmc7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtpbmQgIT09IFwiaW5pdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgZXhwciwgZXhwci5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgLy8gQmluZGluZ1Jlc3RFbGVtZW50IG9ubHkgYWxsb3dzIEJpbmRpbmdJZGVudGlmaWVyXG4gICAgICAgIGlmIChleHByLmFyZ3VtZW50LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvcm1hbHNMaXN0KTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIuYXJndW1lbnQsIGV4cHIuYXJndW1lbnQubmFtZSk7XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbiAmJiBleHByLm9wZXJhdG9yID09PSBcIj1cIikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgbGVmdCwgcmlnaHQsIG5vZGUsIHBhcmFtcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSBmYWxzZSxcbiAgICAgICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2lzQ291bnQsXG4gICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgLy8gTm90ZSB0aGF0ICd5aWVsZCcgaXMgdHJlYXRlZCBhcyBhIGtleXdvcmQgaW4gc3RyaWN0IG1vZGUsIGJ1dCBhXG4gICAgLy8gY29udGV4dHVhbCBrZXl3b3JkIChpZGVudGlmaWVyKSBpbiBub24tc3RyaWN0IG1vZGUsIHNvIHdlIG5lZWRcbiAgICAvLyB0byB1c2UgbWF0Y2hLZXl3b3JkIGFuZCBtYXRjaENvbnRleHR1YWxLZXl3b3JkIGFwcHJvcHJpYXRlbHkuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiAoKHN0YXRlLnlpZWxkQWxsb3dlZCAmJiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwieWllbGRcIikpIHx8IChzdHJpY3QgJiYgbWF0Y2hLZXl3b3JkKFwieWllbGRcIikpKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VZaWVsZEV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQyKCk7XG4gICAgICAgIGlmICgodG9rZW4udmFsdWUgPT09IFwiKVwiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHx8IHRva2VuLnZhbHVlID09PSBcIi4uLlwiKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaChcIj0+XCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKHBhcmFtcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHJldmVydCB0byB0aGUgcHJldmlvdXMgbG9va2FoZWFkIHN0eWxlIG9iamVjdFxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIG5vZGUgPSBsZWZ0ID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICAgIGlmIChtYXRjaChcIj0+XCIpICYmXG4gICAgICAgICAgICAoc3RhdGUucGFyZW50aGVzaXNDb3VudCA9PT0gb2xkUGFyZW50aGVzaXNDb3VudCB8fFxuICAgICAgICAgICAgc3RhdGUucGFyZW50aGVzaXNDb3VudCA9PT0gKG9sZFBhcmVudGhlc2lzQ291bnQgKyAxKSkpIHtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uIHx8XG4gICAgICAgICAgICBub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KFsgbm9kZSBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TZXF1ZW5jZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KG5vZGUuZXhwcmVzc2lvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoQXNzaWduKCkpIHtcblxuICAgICAgICAvLyAxMS4xMy4xXG4gICAgICAgIGlmIChzdHJpY3QgJiYgbGVmdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChsZWZ0Lm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRVMubmV4dCBkcmFmIDExLjEzIFJ1bnRpbWUgU2VtYW50aWNzIHN0ZXAgMVxuICAgICAgICBpZiAobWF0Y2goXCI9XCIpICYmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uIHx8IG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikpIHtcbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4obm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTGVmdEhhbmRTaWRlKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIG5vZGUgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBsZWZ0LCByaWdodCkpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xufVxuXG4vLyAxMS4xNCBDb21tYSBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLFxuICAgICAgICBleHByZXNzaW9ucyA9IFsgZXhwciBdLFxuICAgICAgICBzZXF1ZW5jZSwgc3ByZWFkRm91bmQ7XG5cbiAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChleHByKTtcblxuICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzcHJlYWRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2VxdWVuY2UgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9ucykpO1xuICAgIH1cblxuICAgIGlmIChzcHJlYWRGb3VuZCAmJiBsb29rYWhlYWQyKCkudmFsdWUgIT09IFwiPT5cIikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsU3ByZWFkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxdWVuY2UgfHwgZXhwcjtcbn1cblxuLy8gMTIuMSBCbG9ja1xuXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7XG4gICAgdmFyIGxpc3QgPSBbXSxcbiAgICAgICAgc3RhdGVtZW50O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7XG4gICAgdmFyIGJsb2NrLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlzdCgpO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSk7XG59XG5cbi8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkge1xuICAgIHZhciB0b2tlbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBpZCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGluaXQgPSBudWxsO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAvLyAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFZlcmlmeSBhZ2FpbnN0IGZlYXR1cmUgZmxhZ3NcbiAgICBpZiAoa2luZCA9PT0gXCJjb25zdFwiKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0KTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI9XCIpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTtcbiAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnM7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidmFyXCIpO1xuXG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBcInZhclwiKTtcbn1cblxuLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YFxuLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LlxuLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3Rcbi8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldFxuZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHtcbiAgICB2YXIgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoa2luZCk7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVJlc3RFbGVtZW50KCkge1xuICAgIHZhciBwYXJhbSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsZXgoKTtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXN0RWxlbWVudChwYXJhbSkpO1xufVxuXG4vLyAxMi4zIEVtcHR5IFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICAgIGV4cGVjdChcIjtcIik7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7XG59XG5cbi8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkge1xuICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xufVxuXG4vLyAxMi41IElmIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaWZcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImVsc2VcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbn1cblxuLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImRvXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcIndoaWxlXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHtcbiAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3BlcmF0b3IsIG9sZEluSXRlcmF0aW9uO1xuICAgIHZhciBhbGxvd0Zvck9mID0gZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmb3JcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ2YXJcIikgfHxcbiAgICAgICAgICAgIChhbGxvd0Jsb2NrQmluZGluZ3MgJiYgKG1hdGNoS2V5d29yZChcImxldFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjb25zdFwiKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiaW5cIikgfHwgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyBcInZhclwiIGNoZWNrIGhlcmUgcmVhbGx5IG5lZWRlZD8gd2FzblwidCBpbiAxLjIuMlxuICAgICAgICAgICAgICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09IFwiaW5cIiB8fCBpbml0LmtpbmQgIT09IFwidmFyXCIpICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwZWN0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFwiO1wiKTtcblxuICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYgb3B0cy5pZ25vcmVCb2R5KSkge1xuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KTtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mICYmIG9wZXJhdG9yLnZhbHVlID09PSBcIm9mXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xufVxuXG4vLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNvbnRpbnVlXCIpO1xuXG4gICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06IFwiY29udGludWU7XCIuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTtcbn1cblxuLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGxhYmVsID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJicmVha1wiKTtcblxuICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkge1xuICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwicmV0dXJuXCIpO1xuXG4gICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSAmJiAhZXh0cmEuZWNtYUZlYXR1cmVzLmdsb2JhbFJldHVybikge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgIH1cblxuICAgIC8vIFwicmV0dXJuXCIgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHtcbiAgICB2YXIgb2JqZWN0LCBib2R5O1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkP1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2l0aFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG59XG5cbi8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZChcImNhc2VcIik7XG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgZXhwZWN0KFwiOlwiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2FzZVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJzd2l0Y2hcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGNhc2VzID0gW107XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xuICAgIH1cblxuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlO1xuICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpO1xuICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xufVxuXG4vLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGFyZ3VtZW50O1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRocm93XCIpO1xuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTtcbiAgICB9XG5cbiAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHtcbiAgICB2YXIgcGFyYW0sIGJvZHksXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICAgICAgfTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjYXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG4gICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuXG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIDEyLjE0LjFcbiAgICBpZiAoc3RyaWN0ICYmIHBhcmFtLm5hbWUgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJsb2NrLCBoYW5kbGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ0cnlcIik7XG5cbiAgICBibG9jayA9IHBhcnNlQmxvY2soKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJjYXRjaFwiKSkge1xuICAgICAgICBoYW5kbGVyID0gcGFyc2VDYXRjaENsYXVzZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmaW5hbGx5XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKTtcbn1cblxuLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICAgIGV4cGVjdEtleXdvcmQoXCJkZWJ1Z2dlclwiKTtcblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVEZWJ1Z2dlclN0YXRlbWVudCgpO1xufVxuXG4vLyAxMiBTdGF0ZW1lbnRzXG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkge1xuICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhYmVsZWRCb2R5LFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiO1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYnJlYWtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUJyZWFrU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VDb250aW51ZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkZWJ1Z2dlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZm9yXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VGb3JTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSk7XG4gICAgICAgICAgICBjYXNlIFwiaWZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUlmU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VUaHJvd1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0cnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRyeVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndoaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ3aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaXRoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHNcbiAgICBpZiAoKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpICYmIG1hdGNoKFwiOlwiKSkge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoc3RhdGUubGFiZWxTZXQuaGFzKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sIFwiTGFiZWxcIiwgZXhwci5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LnNldChleHByLm5hbWUsIHRydWUpO1xuICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LmRlbGV0ZShleHByLm5hbWUpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSk7XG4gICAgfVxuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG59XG5cbi8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb25cblxuLy8gZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbi8vICAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4vLyAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbi8vIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkge1xuICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBvbGRQYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7XG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoO1xuICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7XG4gICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDtcblxuICAgIHN0YXRlLmxhYmVsU2V0ID0gbmV3IFN0cmluZ01hcCgpO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IHRydWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcblxuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICB9XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7XG4gICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9uQm9keTtcbiAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSBvbGRQYXJlbnRoZXNpc0NvdW50O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoc291cmNlRWxlbWVudHMpKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgbmFtZSkge1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBhcmFtU2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJhbVNldC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3B0aW9ucy5wYXJhbVNldC5zZXQobmFtZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW0ob3B0aW9ucykge1xuICAgIHZhciB0b2tlbiwgcGFyYW0sIGRlZixcbiAgICAgICAgYWxsb3dSZXN0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXMsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nLFxuICAgICAgICBhbGxvd0RlZmF1bHRQYXJhbXMgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVmYXVsdFBhcmFtcyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBpZiAodG9rZW4udmFsdWUgPT09IFwiLi4uXCIpIHtcbiAgICAgICAgaWYgKCFhbGxvd1Jlc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VSZXN0RWxlbWVudCgpO1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCB0b2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgaWYgKGFsbG93RGVmYXVsdFBhcmFtcyB8fCBhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZGVmID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgKytvcHRpb25zLmRlZmF1bHRDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZikge1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXNzaWdubWVudFBhdHRlcm4oXG4gICAgICAgICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgICAgICAgZGVmXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgIH1cblxuICAgIHJldHVybiAhbWF0Y2goXCIpXCIpO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgIHZhciBvcHRpb25zO1xuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgZGVmYXVsdENvdW50OiAwLFxuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZFxuICAgIH07XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKCFtYXRjaChcIilcIikpIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIXBhcnNlUGFyYW0ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cGVjdChcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihpZGVudGlmaWVySXNPcHRpb25hbCkge1xuICAgICAgICB2YXIgaWQgPSBudWxsLCBib2R5LCB0b2tlbiwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgZ2VuZXJhdG9yLFxuICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgICAgICBleHBlY3RLZXl3b3JkKFwiZnVuY3Rpb25cIik7XG5cbiAgICAgICAgZ2VuZXJhdG9yID0gZmFsc2U7XG4gICAgICAgIGlmIChhbGxvd0dlbmVyYXRvcnMgJiYgbWF0Y2goXCIqXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGdlbmVyYXRvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICFtYXRjaChcIihcIikpIHtcblxuICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG5cbiAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7XG4gICAgICAgIGlmICh0bXAubWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRtcC5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGdlbmVyYXRvciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpO1xuICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7XG4gICAgaWYgKHRtcC5tZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTtcbiAgICB9XG5cbiAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG5cbiAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChzdHJpY3QgJiYgdG1wLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHRtcC5wYXJhbXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWllbGRFeHByZXNzaW9uKCkge1xuICAgIHZhciB5aWVsZFRva2VuLCBkZWxlZ2F0ZUZsYWcsIGV4cHIsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgeWllbGRUb2tlbiA9IGxleCgpO1xuICAgIGFzc2VydCh5aWVsZFRva2VuLnZhbHVlID09PSBcInlpZWxkXCIsIFwiQ2FsbGVkIHBhcnNlWWllbGRFeHByZXNzaW9uIHdpdGggbm9uLXlpZWxkIGxvb2thaGVhZC5cIik7XG5cbiAgICBpZiAoIXN0YXRlLnlpZWxkQWxsb3dlZCkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxZaWVsZCk7XG4gICAgfVxuXG4gICAgZGVsZWdhdGVGbGFnID0gZmFsc2U7XG4gICAgaWYgKG1hdGNoKFwiKlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZGVsZWdhdGVGbGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKG51bGwsIGRlbGVnYXRlRmxhZykpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpICYmICFtYXRjaChcIilcIikpIHtcbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVlpZWxkRXhwcmVzc2lvbihleHByLCBkZWxlZ2F0ZUZsYWcpKTtcbn1cblxuLy8gTW9kdWxlcyBncmFtbWFyIGZyb206XG4vLyBwZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWxcblxuZnVuY3Rpb24gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBzcGVjaWZpZXI7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZE1vZHVsZVNwZWNpZmllcik7XG4gICAgfVxuICAgIHNwZWNpZmllciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHNwZWNpZmllcik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkge1xuICAgIHZhciBleHBvcnRlZCwgbG9jYWwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGlmIChtYXRjaEtleXdvcmQoXCJkZWZhdWx0XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBsb2NhbCA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihcImRlZmF1bHRcIikpO1xuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gXCJzb21ldGhpbmdcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGV4cG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydFNwZWNpZmllcihsb2NhbCwgZXhwb3J0ZWQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnROYW1lZERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBkZWNsYXJhdGlvbiA9IG51bGwsXG4gICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIsXG4gICAgICAgIHNyYyA9IG51bGwsIHNwZWNpZmllcnMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiZXhwb3J0XCIpO1xuXG4gICAgLy8gbm9uLWRlZmF1bHQgZXhwb3J0XG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gZXhwb3J0IHZhciBmID0gMTtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjb25zdFwiOlxuICAgICAgICAgICAgY2FzZSBcInZhclwiOlxuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIG51bGwpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuICAgIGlmICghbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZyb21JZGVudGlmaWVyIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIik7XG4gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7XG4gICAgICAgIH0gd2hpbGUgKG1hdGNoKFwiLFwiKSAmJiBsZXgoKSk7XG4gICAgfVxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcImZvb1wiO1xuICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSBcImZvb1wiO1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIH0gZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRlbnRpZmllcikge1xuICAgICAgICAvLyBjb3ZlcmluZzpcbiAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fTsgLy8gbWlzc2luZyBmcm9tQ2xhdXNlXG4gICAgICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY292ZXJcbiAgICAgICAgLy8gZXhwb3J0IHtmb299O1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNyYykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbigpIHtcbiAgICB2YXIgZGVjbGFyYXRpb24gPSBudWxsLFxuICAgICAgICBleHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgcG9zc2libGVJZGVudGlmaWVyVG9rZW4sXG4gICAgICAgIGFsbG93Q2xhc3NlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5jbGFzc2VzLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIC8vIGNvdmVyczpcbiAgICAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICBleHBlY3RLZXl3b3JkKFwiZXhwb3J0XCIpO1xuICAgIGV4cGVjdEtleXdvcmQoXCJkZWZhdWx0XCIpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImZ1bmN0aW9uXCIpIHx8IG1hdGNoS2V5d29yZChcImNsYXNzXCIpKSB7XG4gICAgICAgIHBvc3NpYmxlSWRlbnRpZmllclRva2VuID0gbG9va2FoZWFkMigpO1xuICAgICAgICBpZiAocG9zc2libGVJZGVudGlmaWVyVG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9vICgpIHt9XG4gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBmb28ge31cbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHt9XG4gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIHt9XG4gICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24odHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTtcbiAgICAgICAgfSBlbHNlIGlmIChhbGxvd0NsYXNzZXMgJiYgbG9va2FoZWFkLnZhbHVlID09PSBcImNsYXNzXCIpIHtcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGNvdmVyczpcbiAgICAvLyBleHBvcnQgZGVmYXVsdCB7fTtcbiAgICAvLyBleHBvcnQgZGVmYXVsdCBbXTtcbiAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIpO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihleHByZXNzaW9uKSk7XG59XG5cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbigpIHtcbiAgICB2YXIgc3JjLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIC8vIGNvdmVyczpcbiAgICAvLyBleHBvcnQgKiBmcm9tIFwiZm9vXCI7XG4gICAgZXhwZWN0S2V5d29yZChcImV4cG9ydFwiKTtcbiAgICBleHBlY3QoXCIqXCIpO1xuICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnRBbGxEZWNsYXJhdGlvbihzcmMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTtcbiAgICB9XG4gICAgdmFyIGRlY2xhcmF0aW9uVHlwZSA9IGxvb2thaGVhZDIoKS52YWx1ZTtcbiAgICBpZiAoZGVjbGFyYXRpb25UeXBlID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uVHlwZSA9PT0gXCIqXCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnROYW1lZERlY2xhcmF0aW9uKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgezxmb28gYXMgYmFyPn0gLi4uO1xuICAgIHZhciBsb2NhbCwgaW1wb3J0ZWQsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaW1wb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImFzXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBsb2NhbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0U3BlY2lmaWVyKGxvY2FsLCBpbXBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbWVkSW1wb3J0cygpIHtcbiAgICB2YXIgc3BlY2lmaWVycyA9IFtdO1xuICAgIC8vIHtmb28sIGJhciBhcyBiYXN9XG4gICAgZXhwZWN0KFwie1wiKTtcbiAgICBpZiAoIW1hdGNoKFwifVwiKSkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7XG4gICAgICAgIH0gd2hpbGUgKG1hdGNoKFwiLFwiKSAmJiBsZXgoKSk7XG4gICAgfVxuICAgIGV4cGVjdChcIn1cIik7XG4gICAgcmV0dXJuIHNwZWNpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPGZvbz4gLi4uO1xuICAgIHZhciBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcGVjaWZpZXJzLCBzcmMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgZXhwZWN0S2V5d29yZChcImltcG9ydFwiKTtcbiAgICBzcGVjaWZpZXJzID0gW107XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgXCJmb29cIjtcbiAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgJiYgaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvb1xuICAgICAgICAvLyBpbXBvcnQgZm9vLCAuLi5cbiAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vXG4gICAgICAgIC8vIGltcG9ydCAqIGFzIGZvb1xuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfVxuICAgICAgICAvLyBpbXBvcnQge2Jhcn1cbiAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuLy8gMTQgRnVuY3Rpb25zIGFuZCBjbGFzc2VzXG5cbi8vIDE0LjEgRnVuY3Rpb25zIGlzIGRlZmluZWQgYWJvdmUgKDEzIGluIEVTNSlcbi8vIDE0LjIgQXJyb3cgRnVuY3Rpb25zIERlZmluaXRpb25zIGlzIGRlZmluZWQgaW4gKDcuMyBhc3NpZ25tZW50cylcblxuLy8gMTQuMyBNZXRob2QgRGVmaW5pdGlvbnNcbi8vIDE0LjMuN1xuXG4vLyAxNC41IENsYXNzIERlZmluaXRpb25zXG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NCb2R5KCkge1xuICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBnZW5lcmF0b3IgPSBmYWxzZSxcbiAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMsXG4gICAgICAgIHRva2VuLCBpc1N0YXRpYywgYm9keSA9IFtdLCBtZXRob2QsIGNvbXB1dGVkLCBrZXk7XG5cbiAgICB2YXIgZXhpc3RpbmdQcm9wcyA9IHt9LFxuICAgICAgICB0b3BNYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgbWFya2VyO1xuXG4gICAgZXhpc3RpbmdQcm9wcy5zdGF0aWMgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgZXhpc3RpbmdQcm9wcy5wcm90b3R5cGUgPSBuZXcgU3RyaW5nTWFwKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgd2hpbGUgKCFtYXRjaChcIn1cIikpIHtcblxuICAgICAgICAvLyBleHRyYSBzZW1pY29sb25zIGFyZSBmaW5lXG4gICAgICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgZ2VuZXJhdG9yID0gbWF0Y2goXCIqXCIpO1xuICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgaWYgKCFhbGxvd0dlbmVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXG4gICAgICAgIC8vIHN0YXRpYyBnZW5lcmF0b3IgbWV0aG9kc1xuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbWF0Y2goXCIqXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5uYW1lID09PSBcInN0YXRpY1wiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgbWV0aG9kID0gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShrZXksIG1hcmtlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1hcmtlciwgZ2VuZXJhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZC5zdGF0aWMgPSBpc1N0YXRpYztcbiAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNTdGF0aWMpIHtcblxuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgKG1ldGhvZC5rZXkudmFsdWUgJiYgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgIT09IFwibWV0aG9kXCIgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSBcImNvbnN0cnVjdG9yXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZC50eXBlID0gYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb247XG4gICAgICAgICAgICBkZWxldGUgbWV0aG9kLm1ldGhvZDtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRoYW5kO1xuICAgICAgICAgICAgYm9keS5wdXNoKG1ldGhvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseSh0b3BNYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNsYXNzQm9keShib2R5KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkge1xuICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3QsIGNsYXNzQm9keTtcblxuICAgIC8vIGNsYXNzZXMgcnVuIGluIHN0cmljdCBtb2RlXG4gICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjbGFzc1wiKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7XG59XG5cbi8vIDE1IFByb2dyYW1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkge1xuXG4gICAgdmFyIGFsbG93Q2xhc3NlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5jbGFzc2VzLFxuICAgICAgICBhbGxvd01vZHVsZXMgPSBleHRyYS5lY21hRmVhdHVyZXMubW9kdWxlcyxcbiAgICAgICAgYWxsb3dCbG9ja0JpbmRpbmdzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmJsb2NrQmluZGluZ3M7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3J0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd01vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93Q2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwibGV0XCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93QmxvY2tCaW5kaW5ncykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5MaXRlcmFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmVcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7XG4gICAgICAgIGlmIChkaXJlY3RpdmUgPT09IFwidXNlIHN0cmljdFwiKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7XG4gICAgdmFyIGJvZHksXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgaXNNb2R1bGUgPSAhIWV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBwZWVrKCk7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgc3RyaWN0ID0gaXNNb2R1bGU7XG5cbiAgICBib2R5ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb2dyYW0oYm9keSwgaXNNb2R1bGUgPyBcIm1vZHVsZVwiIDogXCJzY3JpcHRcIikpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkge1xuICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTtcbiAgICAgICAgdG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5yZWdleCkge1xuICAgICAgICAgICAgdG9rZW4ucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogZW50cnkucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogZW50cnkucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgZXh0cmEudG9rZW5zID0gdG9rZW5zO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVG9rZW5pemVyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIHRvU3RyaW5nLFxuICAgICAgICB0b2tlbnM7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IHt9LFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogZGVmYXVsdEZlYXR1cmVzXG4gICAgfTtcblxuICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS5cbiAgICBvcHRpb25zLnRva2VucyA9IHRydWU7XG4gICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgZXh0cmEudG9rZW5pemUgPSB0cnVlO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLlxuICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7XG4gICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAtMTtcblxuICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5sb2M7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy5jb21tZW50KSB7XG4gICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzXG4gICAgaWYgKG9wdGlvbnMuZWNtYUZlYXR1cmVzICYmIHR5cGVvZiBvcHRpb25zLmVjbWFGZWF0dXJlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSBvcHRpb25zLmVjbWFGZWF0dXJlcztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwZWVrKCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTtcbiAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IG5ldyBTdHJpbmdNYXAoKSxcbiAgICAgICAgcGFyZW50aGVzaXNDb3VudDogMCxcbiAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsXG4gICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UsXG4gICAgICAgIGN1cmx5U3RhY2s6IFtdLFxuICAgICAgICBjdXJseUxhc3RJbmRleDogMCxcbiAgICAgICAgaW5KU1hTcHJlYWRBdHRyaWJ1dGU6IGZhbHNlLFxuICAgICAgICBpbkpTWENoaWxkOiBmYWxzZSxcbiAgICAgICAgaW5KU1hUYWc6IGZhbHNlXG4gICAgfTtcblxuICAgIGV4dHJhID0ge1xuICAgICAgICBlY21hRmVhdHVyZXM6IE9iamVjdC5jcmVhdGUoZGVmYXVsdEZlYXR1cmVzKVxuICAgIH07XG5cbiAgICAvLyBmb3IgdGVtcGxhdGUgc3RyaW5nc1xuICAgIHN0YXRlLmN1cmx5U3RhY2sgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMucmFuZ2U7XG4gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcbiAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50O1xuXG4gICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2tlbnMpIHtcbiAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGNvbW1lbnRBdHRhY2htZW50LnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSB7XG4gICAgICAgICAgICAgICAgYXJyb3dGdW5jdGlvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWdleFVGbGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4WUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9jdGFsTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VwZXJJbkZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3RQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9yT2Y6IHRydWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xhc3NlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2R1bGVzOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwbHkgcGFyc2luZyBmbGFncyBhZnRlciBzb3VyY2VUeXBlIHRvIGFsbG93IG92ZXJyaWRpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMuZWNtYUZlYXR1cmVzICYmIHR5cGVvZiBvcHRpb25zLmVjbWFGZWF0dXJlcyA9PT0gXCJvYmplY3RcIikge1xuXG4gICAgICAgICAgICAvLyBpZiBpdCdzIGEgbW9kdWxlLCBhdWdtZW50IHRoZSBlY21hRmVhdHVyZXNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmVjbWFGZWF0dXJlcykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzW2tleV0gPSBvcHRpb25zLmVjbWFGZWF0dXJlc1trZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSBvcHRpb25zLmVjbWFGZWF0dXJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpO1xuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTtcbiAgICAgICAgICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9ycztcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHRyYSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnRzLnZlcnNpb24gPSByZXF1aXJlKFwiLi9wYWNrYWdlLmpzb25cIikudmVyc2lvbjtcblxuZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplO1xuXG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5cbi8vIERlZXAgY29weS5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnRzLlN5bnRheCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5hbWUsIHR5cGVzID0ge307XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgZm9yIChuYW1lIGluIGFzdE5vZGVUeXBlcykge1xuICAgICAgICBpZiAoYXN0Tm9kZVR5cGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0eXBlc1tuYW1lXSA9IGFzdE5vZGVUeXBlc1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUodHlwZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn0oKSk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBmYWN0b3J5IGZvciBjcmVhdGluZyBBU1Qgbm9kZXNcbiAqIEBhdXRob3IgRnJlZCBLLiBTY2hvdHRcbiAqIEBjb3B5cmlnaHQgMjAxNCBGcmVkIEsuIFNjaG90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBhc3ROb2RlVHlwZXMgPSByZXF1aXJlKFwiLi9hc3Qtbm9kZS10eXBlc1wiKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQXJyYXkgRXhwcmVzc2lvbiBBU1ROb2RlIG91dCBvZiBhbiBhcnJheSBvZiBlbGVtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBlbGVtZW50cyBBbiBhcnJheSBvZiBBU1ROb2RlIGVsZW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXJyYXkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24sXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFycm93IEZ1bmN0aW9uIEV4cHJlc3Npb24gQVNUTm9kZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW1zIFRoZSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgYXJyb3cgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgIEFsd2F5cyBmYWxzZSBmb3IgZGVjbGFyYXRpb25zLCBidXQga2VwdCBoZXJlIHRvIGJlIGluIHN5bmMgd2l0aFxuICAgICAqICAgICAgRnVuY3Rpb25FeHByZXNzaW9uIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24sXG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhc3NpZ25tZW50IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24sXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFzc2lnbm1lbnQgcGF0dGVybiAoZGVmYXVsdCBwYXJhbWV0ZXJzKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFzc2lnbm1lbnQgcGF0dGVyblxuICAgICAqL1xuICAgIGNyZWF0ZUFzc2lnbm1lbnRQYXR0ZXJuOiBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJpbmFyeSBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgYXNzaWdubWVudCBvcGVyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGJpbmFyeSBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSBcInx8XCIgfHwgb3BlcmF0b3IgPT09IFwiJiZcIikgPyBhc3ROb2RlVHlwZXMuTG9naWNhbEV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICAgICAgICBhc3ROb2RlVHlwZXMuQmluYXJ5RXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgYmxvY2sgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBibG9jayBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGJsb2NrIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQmxvY2tTdGF0ZW1lbnQsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgYnJlYWsgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsYWJlbCBUaGUgYnJlYWsgc3RhdGVtZW50IGxhYmVsXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBicmVhayBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5CcmVha1N0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNhbGwgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gY2FsbGVlIFRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gYXJncyBBbiBhcnJheSBvZiBBU1ROb2RlcyByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgY2FsbCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uKGNhbGxlZSwgYXJncykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNhbGxFeHByZXNzaW9uLFxuICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsXG4gICAgICAgICAgICBcImFyZ3VtZW50c1wiOiBhcmdzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2F0Y2ggY2xhdXNlL2Jsb2NrXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbSBBbnkgY2F0Y2ggY2xhdXNlIGV4ZXB0aW9uL2NvbmRpdGlvbmFsIHBhcmFtZXRlciBpbmZvcm1hdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgY2F0Y2ggYmxvY2sgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNhdGNoIGNsYXVzZVxuICAgICAqL1xuICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5jdGlvbihwYXJhbSwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNhdGNoQ2xhdXNlLFxuICAgICAgICAgICAgcGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjbGFzcyBib2R5LlxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGJvZHkgb2YgdGhlIGNsYXNzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgY2xhc3MgYm9keS5cbiAgICAgKi9cbiAgICBjcmVhdGVDbGFzc0JvZHk6IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DbGFzc0JvZHksXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUNsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DbGFzc0V4cHJlc3Npb24sXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBzdXBlckNsYXNzOiBzdXBlckNsYXNzLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbihpZCwgc3VwZXJDbGFzcywgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNsYXNzRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBzdXBlckNsYXNzOiBzdXBlckNsYXNzLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVNZXRob2REZWZpbml0aW9uOiBmdW5jdGlvbihwcm9wZXJ0eVR5cGUsIGtpbmQsIGtleSwgdmFsdWUsIGNvbXB1dGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTWV0aG9kRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgICAgIFwic3RhdGljXCI6IHByb3BlcnR5VHlwZSA9PT0gXCJzdGF0aWNcIixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNvbmRpdGlvbmFsIHRvIGV2YWx1YXRlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb2RlIHRvIGJlIHJ1biBpZiB0aGUgdGVzdCByZXR1cm5zIHRydWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFsdGVybmF0ZSBUaGUgY29kZSB0byBiZSBydW4gaWYgdGhlIHRlc3QgcmV0dXJucyBmYWxzZVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LFxuICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjb250aW51ZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0gez9BU1ROb2RlfSBsYWJlbCBUaGUgb3B0aW9uYWwgY29udGludWUgbGFiZWwgKG51bGwgaWYgbm90IHNldClcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGNvbnRpbnVlIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNvbnRpbnVlU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZGVidWdnZXIgc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRGVidWdnZXJTdGF0ZW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gZW1wdHkgc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGVtcHR5IHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FbXB0eVN0YXRlbWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBleHByZXNzaW9uIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHByZXNzaW9uU3RhdGVtZW50LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHdoaWxlIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgd2hpbGUgY29uZGl0aW9uYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHdoaWxlIGxvb3AgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHdoaWxlIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVdoaWxlU3RhdGVtZW50OiBmdW5jdGlvbih0ZXN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuV2hpbGVTdGF0ZW1lbnQsXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGRvLi53aGlsZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGRvLi53aGlsZSBjb25kaXRpb25hbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZG8uLndoaWxlIGxvb3AgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGRvLi53aGlsZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbih0ZXN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRG9XaGlsZVN0YXRlbWVudCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdCBUaGUgaW5pdGlhbGl6YXRpb24gZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgY29uZGl0aW9uYWwgdGVzdCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB1cGRhdGUgVGhlIHVwZGF0ZSBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZvciBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZvclN0YXRlbWVudCxcbiAgICAgICAgICAgIGluaXQ6IGluaXQsXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yLi5pbiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQtc2lkZSB2YXJpYWJsZSBmb3IgdGhlIHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodC1zaWRlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3IuLmluIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbihsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZvckluU3RhdGVtZW50LFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBlYWNoOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvci4ub2Ygc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0LXNpZGUgdmFyaWFibGUgZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0LXNpZGUgb2JqZWN0XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZvci4ub2Ygc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9yT2ZTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRm9yT2ZTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgZnVuY3Rpb24gbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW1zIFRoZSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdlbmVyYXRvciBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvciwgZmFsc2UgaWYgbm90LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgQWx3YXlzIGZhbHNlIGZvciBkZWNsYXJhdGlvbnMsIGJ1dCBrZXB0IGhlcmUgdG8gYmUgaW4gc3luYyB3aXRoXG4gICAgICogICAgICBGdW5jdGlvbkV4cHJlc3Npb24gb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiAhIWdlbmVyYXRvcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICEhZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbXMgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZnVuY3Rpb24gYm9keVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2VuZXJhdG9yIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLCBmYWxzZSBpZiBub3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb24sXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6ICEhZ2VuZXJhdG9yLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogISFleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlkZW50aWZpZXJcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5hbWUgVGhlIGlkZW50aWZpZXIgbmFtZVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBpZGVudGlmaWVyXG4gICAgICovXG4gICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlmIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gY29uc2VxdWVudCBUaGUgY29uc2VxdWVudCBpZiBzdGF0ZW1lbnQgdG8gcnVuXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhbHRlcm5hdGUgdGhlIFwiZWxzZVwiIGFsdGVybmF0ZSBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gaWYgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLklmU3RhdGVtZW50LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsXG4gICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGxhYmVsZWQgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsYWJlbCBUaGUgc3RhdGVtZW50IGxhYmVsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBsYWJlbGVkIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbGFiZWxlZCBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbihsYWJlbCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkxhYmVsZWRTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIGxpdGVyYWwgZnJvbSB0aGUgc291cmNlIGNvZGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRva2VuIFRoZSBBU1ROb2RlIHRva2VuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBsaXRlcmFsIGZyb21cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIG5ldyBsaXRlcmFsXG4gICAgICovXG4gICAgY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2U6IGZ1bmN0aW9uKHRva2VuLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTGl0ZXJhbCxcbiAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSxcbiAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSlcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByZWd1bGFyIGV4cHJlc3Npb25zIGhhdmUgcmVnZXggcHJvcGVydGllc1xuICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgIG5vZGUucmVnZXggPSB0b2tlbi5yZWdleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSB0ZW1wbGF0ZSBlbGVtZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlIERhdGEgb24gdGhlIGVsZW1lbnQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUucmF3IFRoZSByYXcgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlLmNvb2tlZCBUaGUgcHJvY2Vzc2VkIHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdGFpbCBUcnVlIGlmIHRoaXMgaXMgdGhlIGZpbmFsIGVsZW1lbnQgaW4gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGVtcGxhdGVFbGVtZW50OiBmdW5jdGlvbih2YWx1ZSwgdGFpbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRlbXBsYXRlRWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHRhaWw6IHRhaWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBxdWFzaXMgQW4gYXJyYXkgb2YgdGhlIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBleHByZXNzaW9ucyBBbiBhcnJheSBvZiB0aGUgdGVtcGxhdGUgc3RyaW5nIGV4cHJlc3Npb25zXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKi9cbiAgICBjcmVhdGVUZW1wbGF0ZUxpdGVyYWw6IGZ1bmN0aW9uKHF1YXNpcywgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UZW1wbGF0ZUxpdGVyYWwsXG4gICAgICAgICAgICBxdWFzaXM6IHF1YXNpcyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiBleHByZXNzaW9uc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHNwcmVhZCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgYXJyYXkgYmVpbmcgc3ByZWFkXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3ByZWFkIGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVTcHJlYWRFbGVtZW50OiBmdW5jdGlvbihhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRhZyBUaGUgdGFnIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHF1YXNpIEEgVGVtcGxhdGVMaXRlcmFsIEFTVE5vZGUgcmVwcmVzZW50aW5nXG4gICAgICogdGhlIHRlbXBsYXRlIHN0cmluZyBpdHNlbGYuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0YWdnZWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBjcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKHRhZywgcXVhc2kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICAgIHF1YXNpOiBxdWFzaVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc29yIFRoZSBtZW1iZXIgYWNjZXNzIG1ldGhvZCAoYnJhY2tldCBvciBwZXJpb2QpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBUaGUgb2JqZWN0LXByb3BlcnR5IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBtZW1iZXIgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gXCJbXCIsXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IG9iamVjdCB0eXBlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmdzIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG5ldyBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBwcm9wZXJ0aWVzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHRoYXQgcmVwcmVzZW50IGFsbCBvYmplY3RcbiAgICAgKiAgICAgIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZWQgdmFsdWVzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIFRoZSBwb3N0Zml4IG9wZXJhdG9yIChcIisrXCIsIFwiLS1cIiwgZXRjLilcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBvcGVyYXRvciBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHBvc3RmaXggZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgcHJvZ3JhbSBib2R5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVR5cGUgRWl0aGVyIFwibW9kdWxlXCIgb3IgXCJzY3JpcHRcIi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW50aXJlIHByb2dyYW1cbiAgICAgKi9cbiAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbihib2R5LCBzb3VyY2VUeXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvZ3JhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBzb3VyY2VUeXBlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSB0eXBlIG9mIHByb3BlcnR5IHJlcHJlc2VudGVkIChcImdldFwiLCBcInNldFwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHZhbHVlIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1ldGhvZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbHNvIGEgbWV0aG9kICh2YWx1ZSBpcyBhIGZ1bmN0aW9uKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvcnRoYW5kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHNob3J0aGFuZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29tcHV0ZWQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaGFzIGJlZW4gY29tcHV0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICovXG4gICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uKGtpbmQsIGtleSwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlByb3BlcnR5LFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBzaG9ydGhhbmQ6IHNob3J0aGFuZCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJlc3QgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJlc3QgYXJndW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXN0RWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSByZXR1cm4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJldHVybiBhcmd1bWVudCwgbnVsbCBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmV0dXJuU3RhdGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgY29udGFpbmluZyBlYWNoIGV4cHJlc3Npb24sIGluIG9yZGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKi9cbiAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIHN1cGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHN1cGVyXG4gICAgICovXG4gICAgY3JlYXRlU3VwZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN1cGVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjYXNlIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCB0aGUgc3dpdGNoIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2VcbiAgICAgKi9cbiAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoQ2FzZSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGlzY3JpbWluYW50IEFuIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0IGVhY2ggY2FzZSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjYXNlcyBBbiBhcnJheSBvZiBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24oZGlzY3JpbWluYW50LCBjYXNlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN3aXRjaFN0YXRlbWVudCxcbiAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LFxuICAgICAgICAgICAgY2FzZXM6IGNhc2VzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaGlzRXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRocm93IHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFyZ3VtZW50IHRvIHRocm93XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGhyb3dTdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBibG9jayBUaGUgdHJ5IGJsb2NrXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBoYW5kbGVyIEEgY2F0Y2ggaGFuZGxlclxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGZpbmFsaXplciBUaGUgZmluYWwgY29kZSBibG9jayB0byBydW4gYWZ0ZXIgdGhlIHRyeS9jYXRjaCBoYXMgcnVuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdHJ5IHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24oYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRyeVN0YXRlbWVudCxcbiAgICAgICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHVuYXJ5IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgdW5hcnkgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiKytcIiB8fCBvcGVyYXRvciA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVW5hcnlFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZGVjbGFyYXRpb25zIEFuIGFycmF5IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSBraW5kIG9mIHZhcmlhYmxlIGNyZWF0ZWQgKFwidmFyXCIsIFwibGV0XCIsIGV0Yy4pXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBraW5kOiBraW5kXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIHZhcmlhYmxlIElEXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSB2YXJpYWJsZSdzIGluaXRpYWwgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICovXG4gICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbihpZCwgaW5pdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGluaXQ6IGluaXRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXRoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb2JqZWN0IFRoZSB3aXRoIHN0YXRlbWVudCBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2l0aCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHdpdGggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24ob2JqZWN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuV2l0aFN0YXRlbWVudCxcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLllpZWxkRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCB8fCBudWxsLFxuICAgICAgICAgICAgZGVsZWdhdGU6IGRlbGVnYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hBdHRyaWJ1dGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYU3ByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWFNwcmVhZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWU6IGZ1bmN0aW9uKG5hbWVzcGFjZSwgbmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hNZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRWxlbWVudDogZnVuY3Rpb24ob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVsZW1lbnQsXG4gICAgICAgICAgICBvcGVuaW5nRWxlbWVudDogb3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBjbG9zaW5nRWxlbWVudDogY2xvc2luZ0VsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRW1wdHlFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEV4cHJlc3Npb25Db250YWluZXIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50OiBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE9wZW5pbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hDbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCwgZXhwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRTcGVjaWZpZXIsXG4gICAgICAgICAgICBleHBvcnRlZDogZXhwb3J0ZWQgfHwgbG9jYWwsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0QWxsRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBpbXBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbCB8fCBpbXBvcnRlZCxcbiAgICAgICAgICAgIGltcG9ydGVkOiBpbXBvcnRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24oc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIEFTVCBub2RlIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIsXG4gICAgQXJyYXlFeHByZXNzaW9uOiBcIkFycmF5RXhwcmVzc2lvblwiLFxuICAgIEFycmF5UGF0dGVybjogXCJBcnJheVBhdHRlcm5cIixcbiAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiLFxuICAgIEJsb2NrU3RhdGVtZW50OiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgQmluYXJ5RXhwcmVzc2lvbjogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgQnJlYWtTdGF0ZW1lbnQ6IFwiQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBDYWxsRXhwcmVzc2lvbjogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgIENhdGNoQ2xhdXNlOiBcIkNhdGNoQ2xhdXNlXCIsXG4gICAgQ2xhc3NCb2R5OiBcIkNsYXNzQm9keVwiLFxuICAgIENsYXNzRGVjbGFyYXRpb246IFwiQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIENsYXNzRXhwcmVzc2lvbjogXCJDbGFzc0V4cHJlc3Npb25cIixcbiAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgQ29udGludWVTdGF0ZW1lbnQ6IFwiQ29udGludWVTdGF0ZW1lbnRcIixcbiAgICBEb1doaWxlU3RhdGVtZW50OiBcIkRvV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBEZWJ1Z2dlclN0YXRlbWVudDogXCJEZWJ1Z2dlclN0YXRlbWVudFwiLFxuICAgIEVtcHR5U3RhdGVtZW50OiBcIkVtcHR5U3RhdGVtZW50XCIsXG4gICAgRXhwcmVzc2lvblN0YXRlbWVudDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgRm9yU3RhdGVtZW50OiBcIkZvclN0YXRlbWVudFwiLFxuICAgIEZvckluU3RhdGVtZW50OiBcIkZvckluU3RhdGVtZW50XCIsXG4gICAgRm9yT2ZTdGF0ZW1lbnQ6IFwiRm9yT2ZTdGF0ZW1lbnRcIixcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBGdW5jdGlvbkV4cHJlc3Npb246IFwiRnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgSWRlbnRpZmllcjogXCJJZGVudGlmaWVyXCIsXG4gICAgSWZTdGF0ZW1lbnQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBMaXRlcmFsOiBcIkxpdGVyYWxcIixcbiAgICBMYWJlbGVkU3RhdGVtZW50OiBcIkxhYmVsZWRTdGF0ZW1lbnRcIixcbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogXCJMb2dpY2FsRXhwcmVzc2lvblwiLFxuICAgIE1lbWJlckV4cHJlc3Npb246IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIE1ldGhvZERlZmluaXRpb246IFwiTWV0aG9kRGVmaW5pdGlvblwiLFxuICAgIE5ld0V4cHJlc3Npb246IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIE9iamVjdEV4cHJlc3Npb246IFwiT2JqZWN0RXhwcmVzc2lvblwiLFxuICAgIE9iamVjdFBhdHRlcm46IFwiT2JqZWN0UGF0dGVyblwiLFxuICAgIFByb2dyYW06IFwiUHJvZ3JhbVwiLFxuICAgIFByb3BlcnR5OiBcIlByb3BlcnR5XCIsXG4gICAgUmVzdEVsZW1lbnQ6IFwiUmVzdEVsZW1lbnRcIixcbiAgICBSZXR1cm5TdGF0ZW1lbnQ6IFwiUmV0dXJuU3RhdGVtZW50XCIsXG4gICAgU2VxdWVuY2VFeHByZXNzaW9uOiBcIlNlcXVlbmNlRXhwcmVzc2lvblwiLFxuICAgIFNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkRWxlbWVudFwiLFxuICAgIFN1cGVyOiBcIlN1cGVyXCIsXG4gICAgU3dpdGNoQ2FzZTogXCJTd2l0Y2hDYXNlXCIsXG4gICAgU3dpdGNoU3RhdGVtZW50OiBcIlN3aXRjaFN0YXRlbWVudFwiLFxuICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogXCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb25cIixcbiAgICBUZW1wbGF0ZUVsZW1lbnQ6IFwiVGVtcGxhdGVFbGVtZW50XCIsXG4gICAgVGVtcGxhdGVMaXRlcmFsOiBcIlRlbXBsYXRlTGl0ZXJhbFwiLFxuICAgIFRoaXNFeHByZXNzaW9uOiBcIlRoaXNFeHByZXNzaW9uXCIsXG4gICAgVGhyb3dTdGF0ZW1lbnQ6IFwiVGhyb3dTdGF0ZW1lbnRcIixcbiAgICBUcnlTdGF0ZW1lbnQ6IFwiVHJ5U3RhdGVtZW50XCIsXG4gICAgVW5hcnlFeHByZXNzaW9uOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgIFVwZGF0ZUV4cHJlc3Npb246IFwiVXBkYXRlRXhwcmVzc2lvblwiLFxuICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiLFxuICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogXCJWYXJpYWJsZURlY2xhcmF0b3JcIixcbiAgICBXaGlsZVN0YXRlbWVudDogXCJXaGlsZVN0YXRlbWVudFwiLFxuICAgIFdpdGhTdGF0ZW1lbnQ6IFwiV2l0aFN0YXRlbWVudFwiLFxuICAgIFlpZWxkRXhwcmVzc2lvbjogXCJZaWVsZEV4cHJlc3Npb25cIixcbiAgICBKU1hJZGVudGlmaWVyOiBcIkpTWElkZW50aWZpZXJcIixcbiAgICBKU1hOYW1lc3BhY2VkTmFtZTogXCJKU1hOYW1lc3BhY2VkTmFtZVwiLFxuICAgIEpTWE1lbWJlckV4cHJlc3Npb246IFwiSlNYTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIEpTWEVtcHR5RXhwcmVzc2lvbjogXCJKU1hFbXB0eUV4cHJlc3Npb25cIixcbiAgICBKU1hFeHByZXNzaW9uQ29udGFpbmVyOiBcIkpTWEV4cHJlc3Npb25Db250YWluZXJcIixcbiAgICBKU1hFbGVtZW50OiBcIkpTWEVsZW1lbnRcIixcbiAgICBKU1hDbG9zaW5nRWxlbWVudDogXCJKU1hDbG9zaW5nRWxlbWVudFwiLFxuICAgIEpTWE9wZW5pbmdFbGVtZW50OiBcIkpTWE9wZW5pbmdFbGVtZW50XCIsXG4gICAgSlNYQXR0cmlidXRlOiBcIkpTWEF0dHJpYnV0ZVwiLFxuICAgIEpTWFNwcmVhZEF0dHJpYnV0ZTogXCJKU1hTcHJlYWRBdHRyaWJ1dGVcIixcbiAgICBKU1hUZXh0OiBcIkpTWFRleHRcIixcbiAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIsXG4gICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIsXG4gICAgRXhwb3J0QWxsRGVjbGFyYXRpb246IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIixcbiAgICBFeHBvcnRTcGVjaWZpZXI6IFwiRXhwb3J0U3BlY2lmaWVyXCIsXG4gICAgSW1wb3J0RGVjbGFyYXRpb246IFwiSW1wb3J0RGVjbGFyYXRpb25cIixcbiAgICBJbXBvcnRTcGVjaWZpZXI6IFwiSW1wb3J0U3BlY2lmaWVyXCIsXG4gICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIsXG4gICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBcIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllclwiXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEF0dGFjaGVzIGNvbW1lbnRzIHRvIHRoZSBBU1QuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTUgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vYXN0LW5vZGUtdHlwZXNcIik7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZXh0cmEgPSB7XG4gICAgICAgIHRyYWlsaW5nQ29tbWVudHM6IFtdLFxuICAgICAgICBsZWFkaW5nQ29tbWVudHM6IFtdLFxuICAgICAgICBib3R0b21SaWdodFN0YWNrOiBbXVxuICAgIH07XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrID0gW107XG4gICAgfSxcblxuICAgIGFkZENvbW1lbnQ6IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdmFyIGxhc3RDaGlsZCxcbiAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMsXG4gICAgICAgICAgICBpO1xuXG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5Qcm9ncmFtKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBJZiB0aGUgZmlyc3QgY29tbWVudCBpbiB0cmFpbGluZ0NvbW1lbnRzIGNvbWVzIGFmdGVyIHRoZVxuICAgICAgICAgICAgICogY3VycmVudCBub2RlLCB0aGVuIHdlJ3JlIGdvb2QgLSBhbGwgY29tbWVudHMgaW4gdGhlIGFycmF5IHdpbGxcbiAgICAgICAgICAgICAqIGNvbWUgYWZ0ZXIgdGhlIG5vZGUgYW5kIHNvIGl0J3Mgc2FmZSB0byBhZGQgdGhlbiBhcyBvZmZpY2lhbFxuICAgICAgICAgICAgICogdHJhaWxpbmdDb21tZW50cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIE90aGVyd2lzZSwgaWYgdGhlIGZpcnN0IGNvbW1lbnQgZG9lc24ndCBjb21lIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgICAqIGN1cnJlbnQgbm9kZSwgdGhhdCBtZWFucyB3ZSBoYXZlIGEgbWl4IG9mIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICAgICAgICAgICAgICAgICogY29tbWVudHMgaW4gdGhlIGFycmF5IGFuZCB0aGF0IGxlYWRpbmdDb21tZW50cyBjb250YWlucyB0aGVcbiAgICAgICAgICAgICAgICAgKiBzYW1lIGl0ZW1zIGFzIHRyYWlsaW5nQ29tbWVudHMuIFJlc2V0IHRyYWlsaW5nQ29tbWVudHMgdG9cbiAgICAgICAgICAgICAgICAgKiB6ZXJvIGl0ZW1zIGFuZCB3ZSdsbCBoYW5kbGUgdGhpcyBieSBldmFsdWF0aW5nIGxlYWRpbmdDb21tZW50c1xuICAgICAgICAgICAgICAgICAqIGxhdGVyLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHMgJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBkZWxldGUgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFYXRpbmcgdGhlIHN0YWNrLlxuICAgICAgICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrLnBvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RDaGlsZCkge1xuICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgJiYgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlL2lzc3Vlcy8yXG5cbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIEluIHNwZWNpYWwgY2FzZXMsIHN1Y2ggYXMgcmV0dXJuICh3aXRob3V0IGEgdmFsdWUpIGFuZFxuICAgICAgICAgICAgICAgICAqIGRlYnVnZ2VyLCBhbGwgY29tbWVudHMgd2lsbCBlbmQgdXAgYXMgbGVhZGluZ0NvbW1lbnRzIGFuZFxuICAgICAgICAgICAgICAgICAqIHdpbGwgb3RoZXJ3aXNlIGJlIGVsaW1pbmF0ZWQuIFRoaXMgZXh0cmEgc3RlcCBydW5zIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICogYm90dG9tUmlnaHRTdGFjayBpcyBlbXB0eSBhbmQgdGhlcmUgYXJlIGNvbW1lbnRzIGxlZnRcbiAgICAgICAgICAgICAgICAgKiBpbiBsZWFkaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUaGlzIGxvb3AgZmlndXJlcyBvdXQgdGhlIHN0b3BwaW5nIHBvaW50IGJldHdlZW4gdGhlIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGJ5IGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIGZpcnN0IGNvbW1lbnQgdGhhdCBjb21lcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHNbaV0ucmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU3BsaXQgdGhlIGFycmF5IGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgY29tbWVudFxuICAgICAgICAgICAgICAgICAqIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIG5vZGUuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgY291bGRcbiAgICAgICAgICAgICAgICAgKiByZXN1bHQgaW4gYW4gZW1wdHkgYXJyYXksIGFuZCBpZiBzbywgdGhlIGFycmF5IG11c3QgYmVcbiAgICAgICAgICAgICAgICAgKiBkZWxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU2ltaWxhcmx5LCB0cmFpbGluZyBjb21tZW50cyBhcmUgYXR0YWNoZWQgbGF0ZXIuIFRoZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAqIG11c3QgYmUgcmVzZXQgdG8gbnVsbCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29tbWVudHMuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7XG4gICAgfVxuXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIGZlYXR1cmUgZmxhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBwYXJzZXIgYW5kIHRoZWlyIGRlZmF1bHRcbiAqICAgICAgc2V0dGluZ3MuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTUgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBhcnJvdyBmdW5jdGlvbnNcbiAgICBhcnJvd0Z1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBsZXQgYW5kIGNvbnN0XG4gICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlc3RydWN0dXJlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBkZXN0cnVjdHVyaW5nOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHJlZ2V4IHUgZmxhZ1xuICAgIHJlZ2V4VUZsYWc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggeSBmbGFnXG4gICAgcmVnZXhZRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgdGVtcGxhdGVTdHJpbmdzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGJpbmFyeSBsaXRlcmFsc1xuICAgIGJpbmFyeUxpdGVyYWxzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIEVTNiBvY3RhbCBsaXRlcmFsc1xuICAgIG9jdGFsTGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXNcbiAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlZmF1bHQgcGFyYW1ldGVyc1xuICAgIGRlZmF1bHRQYXJhbXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVzdCBwYXJhbWV0ZXJzXG4gICAgcmVzdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBmb3Itb2Ygc3RhdGVtZW50c1xuICAgIGZvck9mOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGNvbXB1dGVkIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHNob3J0aGFuZCBvYmplY3QgbGl0ZXJhbCBtZXRob2RzXG4gICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogZmFsc2UsXG5cbiAgICAvLyBBbGxvdyBkdXBsaWNhdGUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyAoZXhjZXB0ICdfX3Byb3RvX18nKVxuICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGdlbmVyYXRvcnMveWllbGRcbiAgICBnZW5lcmF0b3JzOiBmYWxzZSxcblxuICAgIC8vIHN1cHBvcnQgdGhlIHNwcmVhZCBvcGVyYXRvclxuICAgIHNwcmVhZDogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgc3VwZXIgaW4gZnVuY3Rpb25zXG4gICAgc3VwZXJJbkZ1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBjbGFzc2VzXG4gICAgY2xhc3NlczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBtb2R1bGVzXG4gICAgbW9kdWxlczogZmFsc2UsXG5cbiAgICAvLyBSZWFjdCBKU1ggcGFyc2luZ1xuICAgIGpzeDogZmFsc2UsXG5cbiAgICAvLyBhbGxvdyByZXR1cm4gc3RhdGVtZW50IGluIGdsb2JhbCBzY29wZVxuICAgIGdsb2JhbFJldHVybjogZmFsc2Vcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRXJyb3IgbWVzc2FnZXMgcmV0dXJuZWQgYnkgdGhlIHBhcnNlci5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gVjggd2hlcmUgcG9zc2libGVcbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFVuZXhwZWN0ZWRUb2tlbjogXCJVbmV4cGVjdGVkIHRva2VuICUwXCIsXG4gICAgVW5leHBlY3RlZE51bWJlcjogXCJVbmV4cGVjdGVkIG51bWJlclwiLFxuICAgIFVuZXhwZWN0ZWRTdHJpbmc6IFwiVW5leHBlY3RlZCBzdHJpbmdcIixcbiAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjogXCJVbmV4cGVjdGVkIGlkZW50aWZpZXJcIixcbiAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6IFwiVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkXCIsXG4gICAgVW5leHBlY3RlZFRlbXBsYXRlOiBcIlVuZXhwZWN0ZWQgcXVhc2kgJTBcIixcbiAgICBVbmV4cGVjdGVkRU9TOiBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIsXG4gICAgTmV3bGluZUFmdGVyVGhyb3c6IFwiSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93XCIsXG4gICAgSW52YWxpZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvblwiLFxuICAgIEludmFsaWRSZWdFeHBGbGFnOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZsYWdcIixcbiAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1pc3NpbmcgL1wiLFxuICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6IFwiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50XCIsXG4gICAgSW52YWxpZExIU0luRm9ybWFsc0xpc3Q6IFwiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3JtYWxzIGxpc3RcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JJbjogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pblwiLFxuICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogXCJNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBzdGF0ZW1lbnRcIixcbiAgICBOb0NhdGNoT3JGaW5hbGx5OiBcIk1pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnlcIixcbiAgICBOb1VuaW50aWFsaXplZENvbnN0OiBcIkNvbnN0IG11c3QgYmUgaW5pdGlhbGl6ZWRcIixcbiAgICBVbmtub3duTGFiZWw6IFwiVW5kZWZpbmVkIGxhYmVsICclMCdcIixcbiAgICBSZWRlY2xhcmF0aW9uOiBcIiUwICclMScgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZFwiLFxuICAgIElsbGVnYWxDb250aW51ZTogXCJJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudFwiLFxuICAgIElsbGVnYWxCcmVhazogXCJJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudFwiLFxuICAgIElsbGVnYWxSZXR1cm46IFwiSWxsZWdhbCByZXR1cm4gc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFlpZWxkOiBcIklsbGVnYWwgeWllbGQgZXhwcmVzc2lvblwiLFxuICAgIElsbGVnYWxTcHJlYWQ6IFwiSWxsZWdhbCBzcHJlYWQgZWxlbWVudFwiLFxuICAgIFN0cmljdE1vZGVXaXRoOiBcIlN0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnRcIixcbiAgICBTdHJpY3RDYXRjaFZhcmlhYmxlOiBcIkNhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RWYXJOYW1lOiBcIlZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFBhcmFtTmFtZTogXCJQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFBhcmFtRHVwZTogXCJTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lc1wiLFxuICAgIFRlbXBsYXRlT2N0YWxMaXRlcmFsOiBcIk9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzLlwiLFxuICAgIFBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcjogXCJSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxhc3QgZm9ybWFsIHBhcmFtZXRlclwiLFxuICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIGNhbiBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcIixcbiAgICBFbGVtZW50QWZ0ZXJTcHJlYWRFbGVtZW50OiBcIlNwcmVhZCBtdXN0IGJlIHRoZSBmaW5hbCBlbGVtZW50IG9mIGFuIGVsZW1lbnQgbGlzdFwiLFxuICAgIE9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXI6IFwiSW52YWxpZCByZXN0IHBhcmFtZXRlclwiLFxuICAgIE9iamVjdFBhdHRlcm5Bc1NwcmVhZDogXCJJbnZhbGlkIHNwcmVhZCBhcmd1bWVudFwiLFxuICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogXCJGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdERlbGV0ZTogXCJEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS5cIixcbiAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogXCJEdXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIER1cGxpY2F0ZVByb3RvdHlwZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSAnX19wcm90b19fJyBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBhcmUgbm90IGFsbG93ZWRcIixcbiAgICBDb25zdHJ1Y3RvclNwZWNpYWxNZXRob2Q6IFwiQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBhbiBhY2Nlc3NvclwiLFxuICAgIER1cGxpY2F0ZUNvbnN0cnVjdG9yOiBcIkEgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3JcIixcbiAgICBTdGF0aWNQcm90b3R5cGU6IFwiQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZVwiLFxuICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBBY2Nlc3NvckdldFNldDogXCJPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lXCIsXG4gICAgU3RyaWN0TEhTQXNzaWdubWVudDogXCJBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0TEhTUG9zdGZpeDogXCJQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQcmVmaXg6IFwiUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6IFwiVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgSW52YWxpZEpTWEF0dHJpYnV0ZVZhbHVlOiBcIkpTWCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgSlNYIHRleHRcIixcbiAgICBFeHBlY3RlZEpTWENsb3NpbmdUYWc6IFwiRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0YWcgZm9yICUwXCIsXG4gICAgQWRqYWNlbnRKU1hFbGVtZW50czogXCJBZGphY2VudCBKU1ggZWxlbWVudHMgbXVzdCBiZSB3cmFwcGVkIGluIGFuIGVuY2xvc2luZyB0YWdcIixcbiAgICBNaXNzaW5nRnJvbUNsYXVzZTogXCJNaXNzaW5nIGZyb20gY2xhdXNlXCIsXG4gICAgTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlOiBcIk1pc3NpbmcgYXMgYWZ0ZXIgaW1wb3J0ICpcIixcbiAgICBJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiBcIkludmFsaWQgbW9kdWxlIHNwZWNpZmllclwiLFxuICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlvbjogXCJJbGxlZ2FsIGltcG9ydCBkZWNsYXJhdGlvblwiLFxuICAgIElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjogXCJJbGxlZ2FsIGV4cG9ydCBkZWNsYXJhdGlvblwiXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEEgc2ltcGxlIG1hcCB0aGF0IGhlbHBzIGF2b2lkIGNvbGxpc2lvbnMgb24gdGhlIE9iamVjdCBwcm90b3R5cGUuXG4gKiBAYXV0aG9yIEphbXVuZCBGZXJndXNvblxuICogQGNvcHlyaWdodCAyMDE1IEphbXVuZCBGZXJndXNvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIFN0cmluZ01hcCgpIHtcbiAgICB0aGlzLiRkYXRhID0ge307XG59XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiB0aGlzLiRkYXRhW2tleV07XG59O1xuXG5TdHJpbmdNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgdGhpcy4kZGF0YVtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5TdHJpbmdNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuJGRhdGEsIGtleSk7XG59O1xuXG5TdHJpbmdNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICByZXR1cm4gZGVsZXRlIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nTWFwO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFZhcmlvdXMgc3ludGF4L3BhdHRlcm4gY2hlY2tzIGZvciBwYXJzaW5nLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKiBAY29weXJpZ2h0IDIwMTItMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzLlxudmFyIFJlZ2V4ID0ge1xuICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKFwiW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N0ZcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0RcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjBcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5N1xcdUE2QTAtXFx1QTZFRlxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBODAtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXVwiKSxcbiAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKFwiW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzAwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNDg3XFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODJEXFx1MDg0MC1cXHUwODVCXFx1MDhBMFxcdTA4QTItXFx1MDhBQ1xcdTA4RTQtXFx1MDhGRVxcdTA5MDAtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTZcXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxXFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRUZcXHUwQzAxLVxcdTBDMDNcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzNcXHUwQzM1LVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNThcXHUwQzU5XFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM4MlxcdTBDODNcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JDLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDREVcXHUwQ0UwLVxcdTBDRTNcXHUwQ0U2LVxcdTBDRUZcXHUwQ0YxXFx1MENGMlxcdTBEMDJcXHUwRDAzXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRC1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1N1xcdTBENjAtXFx1MEQ2M1xcdTBENjYtXFx1MEQ2RlxcdTBEN0EtXFx1MEQ3RlxcdTBEODJcXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCOVxcdTBFQkItXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRUM4LVxcdTBFQ0RcXHUwRUQwLVxcdTBFRDlcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEYxOFxcdTBGMTlcXHUwRjIwLVxcdTBGMjlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjcxLVxcdTBGODRcXHUwRjg2LVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAwMC1cXHUxMDQ5XFx1MTA1MC1cXHUxMDlEXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzNUQtXFx1MTM1RlxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxNFxcdTE3MjAtXFx1MTczNFxcdTE3NDAtXFx1MTc1M1xcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3NzJcXHUxNzczXFx1MTc4MC1cXHUxN0QzXFx1MTdEN1xcdTE3RENcXHUxN0REXFx1MTdFMC1cXHUxN0U5XFx1MTgwQi1cXHUxODBEXFx1MTgxMC1cXHUxODE5XFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFDXFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTk0Ni1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MTlEMC1cXHUxOUQ5XFx1MUEwMC1cXHUxQTFCXFx1MUEyMC1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3Ri1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUFBN1xcdTFCMDAtXFx1MUI0QlxcdTFCNTAtXFx1MUI1OVxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUJGM1xcdTFDMDAtXFx1MUMzN1xcdTFDNDAtXFx1MUM0OVxcdTFDNEQtXFx1MUM3RFxcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNGNlxcdTFEMDAtXFx1MURFNlxcdTFERkMtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDBDXFx1MjAwRFxcdTIwM0ZcXHUyMDQwXFx1MjA1NFxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OVxcdTMwOUFcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2OTdcXHVBNjlGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3OTNcXHVBN0EwLVxcdUE3QUFcXHVBN0Y4LVxcdUE4MjdcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzRcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QTkwMC1cXHVBOTJEXFx1QTkzMC1cXHVBOTUzXFx1QTk2MC1cXHVBOTdDXFx1QTk4MC1cXHVBOUMwXFx1QTlDRi1cXHVBOUQ5XFx1QUEwMC1cXHVBQTM2XFx1QUE0MC1cXHVBQTREXFx1QUE1MC1cXHVBQTU5XFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0JcXHVBQTgwLVxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUZcXHVBQUYyLVxcdUFBRjZcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUFCRjAtXFx1QUJGOVxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTI2XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjNGXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXVwiKSxcbiAgICBMZWFkaW5nWmVyb3M6IG5ldyBSZWdFeHAoXCJeMCsoPyEkKVwiKVxufTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBSZWdleDogUmVnZXgsXG5cbiAgICBpc0RlY2ltYWxEaWdpdDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7ICAgLy8gMC4uOVxuICAgIH0sXG5cbiAgICBpc0hleERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gXCIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGXCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgaXNPY3RhbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gXCIwMTIzNDU2N1wiLmluZGV4T2YoY2gpID49IDA7XG4gICAgfSxcblxuICAgIC8vIDcuMiBXaGl0ZSBTcGFjZVxuXG4gICAgaXNXaGl0ZVNwYWNlOiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8XG4gICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7XG4gICAgfSxcblxuICAgIC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzXG5cbiAgICBpc0xpbmVUZXJtaW5hdG9yOiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7XG4gICAgfSxcblxuICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVyc1xuXG4gICAgaXNJZGVudGlmaWVyU3RhcnQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLlpcbiAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uelxuICAgICAgICAgICAgKGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIGlzSWRlbnRpZmllclBhcnQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLlpcbiAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uelxuICAgICAgICAgICAgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpO1xuICAgIH0sXG5cbiAgICAvLyA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3Jkc1xuXG4gICAgaXNGdXR1cmVSZXNlcnZlZFdvcmQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJleHRlbmRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3J0XCI6XG4gICAgICAgICAgICBjYXNlIFwic3VwZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImltcGxlbWVudHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlcmZhY2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYWNrYWdlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHJpdmF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByb3RlY3RlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInB1YmxpY1wiOlxuICAgICAgICAgICAgY2FzZSBcInN0YXRpY1wiOlxuICAgICAgICAgICAgY2FzZSBcInlpZWxkXCI6XG4gICAgICAgICAgICBjYXNlIFwibGV0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpc1Jlc3RyaWN0ZWRXb3JkOiBmdW5jdGlvbihpZCkge1xuICAgICAgICByZXR1cm4gaWQgPT09IFwiZXZhbFwiIHx8IGlkID09PSBcImFyZ3VtZW50c1wiO1xuICAgIH0sXG5cbiAgICAvLyA3LjYuMS4xIEtleXdvcmRzXG5cbiAgICBpc0tleXdvcmQ6IGZ1bmN0aW9uKGlkLCBzdHJpY3QsIGVjbWFGZWF0dXJlcykge1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgdGhpcy5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiY29uc3RcIiBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LlxuICAgICAgICAvLyBcInlpZWxkXCIgYW5kIFwibGV0XCIgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuXG4gICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy5cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaWZcIikgfHwgKGlkID09PSBcImluXCIpIHx8IChpZCA9PT0gXCJkb1wiKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInZhclwiKSB8fCAoaWQgPT09IFwiZm9yXCIpIHx8IChpZCA9PT0gXCJuZXdcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRyeVwiKSB8fCAoaWQgPT09IFwibGV0XCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidGhpc1wiKSB8fCAoaWQgPT09IFwiZWxzZVwiKSB8fCAoaWQgPT09IFwiY2FzZVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidm9pZFwiKSB8fCAoaWQgPT09IFwid2l0aFwiKSB8fCAoaWQgPT09IFwiZW51bVwiKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcIndoaWxlXCIpIHx8IChpZCA9PT0gXCJicmVha1wiKSB8fCAoaWQgPT09IFwiY2F0Y2hcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRocm93XCIpIHx8IChpZCA9PT0gXCJjb25zdFwiKSB8fCAoIWVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzICYmIGlkID09PSBcInlpZWxkXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJjbGFzc1wiKSB8fCAoaWQgPT09IFwic3VwZXJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJyZXR1cm5cIikgfHwgKGlkID09PSBcInR5cGVvZlwiKSB8fCAoaWQgPT09IFwiZGVsZXRlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJzd2l0Y2hcIikgfHwgKGlkID09PSBcImV4cG9ydFwiKSB8fCAoaWQgPT09IFwiaW1wb3J0XCIpO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZGVmYXVsdFwiKSB8fCAoaWQgPT09IFwiZmluYWxseVwiKSB8fCAoaWQgPT09IFwiZXh0ZW5kc1wiKTtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcImZ1bmN0aW9uXCIpIHx8IChpZCA9PT0gXCJjb250aW51ZVwiKSB8fCAoaWQgPT09IFwiZGVidWdnZXJcIik7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaW5zdGFuY2VvZlwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzSlNYSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpXG4gICAgICAgIHJldHVybiAoY2ggIT09IDkyKSAmJiB0aGlzLmlzSWRlbnRpZmllclN0YXJ0KGNoKTtcbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgLy8gZXhjbHVkZSBiYWNrc2xhc2ggKFxcKSBhbmQgYWRkIGh5cGhlbiAoLSlcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIChjaCA9PT0gNDUgfHwgdGhpcy5pc0lkZW50aWZpZXJQYXJ0KGNoKSk7XG4gICAgfVxuXG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ29udGFpbnMgdG9rZW4gaW5mb3JtYXRpb24uXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgVG9rZW4gPSB7XG4gICAgQm9vbGVhbkxpdGVyYWw6IDEsXG4gICAgRU9GOiAyLFxuICAgIElkZW50aWZpZXI6IDMsXG4gICAgS2V5d29yZDogNCxcbiAgICBOdWxsTGl0ZXJhbDogNSxcbiAgICBOdW1lcmljTGl0ZXJhbDogNixcbiAgICBQdW5jdHVhdG9yOiA3LFxuICAgIFN0cmluZ0xpdGVyYWw6IDgsXG4gICAgUmVndWxhckV4cHJlc3Npb246IDksXG4gICAgVGVtcGxhdGU6IDEwLFxuICAgIEpTWElkZW50aWZpZXI6IDExLFxuICAgIEpTWFRleHQ6IDEyXG59O1xuXG52YXIgVG9rZW5OYW1lID0ge307XG5Ub2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gXCJCb29sZWFuXCI7XG5Ub2tlbk5hbWVbVG9rZW4uRU9GXSA9IFwiPGVuZD5cIjtcblRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9IFwiSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gXCJLZXl3b3JkXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gXCJOdWxsXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gXCJOdW1lcmljXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSBcIlB1bmN0dWF0b3JcIjtcblRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9IFwiU3RyaW5nXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gXCJSZWd1bGFyRXhwcmVzc2lvblwiO1xuVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9IFwiVGVtcGxhdGVcIjtcblRva2VuTmFtZVtUb2tlbi5KU1hJZGVudGlmaWVyXSA9IFwiSlNYSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWFRleHRdID0gXCJKU1hUZXh0XCI7XG5cbi8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi5cbnZhciBGbkV4cHJUb2tlbnMgPSBbXCIoXCIsIFwie1wiLCBcIltcIiwgXCJpblwiLCBcInR5cGVvZlwiLCBcImluc3RhbmNlb2ZcIiwgXCJuZXdcIixcbiAgICAgICAgICAgICAgICBcInJldHVyblwiLCBcImNhc2VcIiwgXCJkZWxldGVcIiwgXCJ0aHJvd1wiLCBcInZvaWRcIixcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgXCImPVwiLCBcInw9XCIsIFwiXj1cIiwgXCIsXCIsXG4gICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiK1wiLCBcIi1cIiwgXCIqXCIsIFwiL1wiLCBcIiVcIiwgXCIrK1wiLCBcIi0tXCIsIFwiPDxcIiwgXCI+PlwiLCBcIj4+PlwiLCBcIiZcIixcbiAgICAgICAgICAgICAgICBcInxcIiwgXCJeXCIsIFwiIVwiLCBcIn5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsXG4gICAgICAgICAgICAgICAgXCI8PVwiLCBcIjxcIiwgXCI+XCIsIFwiIT1cIiwgXCIhPT1cIl07XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVG9rZW46IFRva2VuLFxuICAgIFRva2VuTmFtZTogVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VuczogRm5FeHByVG9rZW5zXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIFhIVE1MIGVudGl0aWVzIHRoYXQgYXJlIHZhbGlkIGluIEpTWC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBxdW90OiBcIlxcdTAwMjJcIixcbiAgICBhbXA6IFwiJlwiLFxuICAgIGFwb3M6IFwiXFx1MDAyN1wiLFxuICAgIGx0OiBcIjxcIixcbiAgICBndDogXCI+XCIsXG4gICAgbmJzcDogXCJcXHUwMEEwXCIsXG4gICAgaWV4Y2w6IFwiXFx1MDBBMVwiLFxuICAgIGNlbnQ6IFwiXFx1MDBBMlwiLFxuICAgIHBvdW5kOiBcIlxcdTAwQTNcIixcbiAgICBjdXJyZW46IFwiXFx1MDBBNFwiLFxuICAgIHllbjogXCJcXHUwMEE1XCIsXG4gICAgYnJ2YmFyOiBcIlxcdTAwQTZcIixcbiAgICBzZWN0OiBcIlxcdTAwQTdcIixcbiAgICB1bWw6IFwiXFx1MDBBOFwiLFxuICAgIGNvcHk6IFwiXFx1MDBBOVwiLFxuICAgIG9yZGY6IFwiXFx1MDBBQVwiLFxuICAgIGxhcXVvOiBcIlxcdTAwQUJcIixcbiAgICBub3Q6IFwiXFx1MDBBQ1wiLFxuICAgIHNoeTogXCJcXHUwMEFEXCIsXG4gICAgcmVnOiBcIlxcdTAwQUVcIixcbiAgICBtYWNyOiBcIlxcdTAwQUZcIixcbiAgICBkZWc6IFwiXFx1MDBCMFwiLFxuICAgIHBsdXNtbjogXCJcXHUwMEIxXCIsXG4gICAgc3VwMjogXCJcXHUwMEIyXCIsXG4gICAgc3VwMzogXCJcXHUwMEIzXCIsXG4gICAgYWN1dGU6IFwiXFx1MDBCNFwiLFxuICAgIG1pY3JvOiBcIlxcdTAwQjVcIixcbiAgICBwYXJhOiBcIlxcdTAwQjZcIixcbiAgICBtaWRkb3Q6IFwiXFx1MDBCN1wiLFxuICAgIGNlZGlsOiBcIlxcdTAwQjhcIixcbiAgICBzdXAxOiBcIlxcdTAwQjlcIixcbiAgICBvcmRtOiBcIlxcdTAwQkFcIixcbiAgICByYXF1bzogXCJcXHUwMEJCXCIsXG4gICAgZnJhYzE0OiBcIlxcdTAwQkNcIixcbiAgICBmcmFjMTI6IFwiXFx1MDBCRFwiLFxuICAgIGZyYWMzNDogXCJcXHUwMEJFXCIsXG4gICAgaXF1ZXN0OiBcIlxcdTAwQkZcIixcbiAgICBBZ3JhdmU6IFwiXFx1MDBDMFwiLFxuICAgIEFhY3V0ZTogXCJcXHUwMEMxXCIsXG4gICAgQWNpcmM6IFwiXFx1MDBDMlwiLFxuICAgIEF0aWxkZTogXCJcXHUwMEMzXCIsXG4gICAgQXVtbDogXCJcXHUwMEM0XCIsXG4gICAgQXJpbmc6IFwiXFx1MDBDNVwiLFxuICAgIEFFbGlnOiBcIlxcdTAwQzZcIixcbiAgICBDY2VkaWw6IFwiXFx1MDBDN1wiLFxuICAgIEVncmF2ZTogXCJcXHUwMEM4XCIsXG4gICAgRWFjdXRlOiBcIlxcdTAwQzlcIixcbiAgICBFY2lyYzogXCJcXHUwMENBXCIsXG4gICAgRXVtbDogXCJcXHUwMENCXCIsXG4gICAgSWdyYXZlOiBcIlxcdTAwQ0NcIixcbiAgICBJYWN1dGU6IFwiXFx1MDBDRFwiLFxuICAgIEljaXJjOiBcIlxcdTAwQ0VcIixcbiAgICBJdW1sOiBcIlxcdTAwQ0ZcIixcbiAgICBFVEg6IFwiXFx1MDBEMFwiLFxuICAgIE50aWxkZTogXCJcXHUwMEQxXCIsXG4gICAgT2dyYXZlOiBcIlxcdTAwRDJcIixcbiAgICBPYWN1dGU6IFwiXFx1MDBEM1wiLFxuICAgIE9jaXJjOiBcIlxcdTAwRDRcIixcbiAgICBPdGlsZGU6IFwiXFx1MDBENVwiLFxuICAgIE91bWw6IFwiXFx1MDBENlwiLFxuICAgIHRpbWVzOiBcIlxcdTAwRDdcIixcbiAgICBPc2xhc2g6IFwiXFx1MDBEOFwiLFxuICAgIFVncmF2ZTogXCJcXHUwMEQ5XCIsXG4gICAgVWFjdXRlOiBcIlxcdTAwREFcIixcbiAgICBVY2lyYzogXCJcXHUwMERCXCIsXG4gICAgVXVtbDogXCJcXHUwMERDXCIsXG4gICAgWWFjdXRlOiBcIlxcdTAwRERcIixcbiAgICBUSE9STjogXCJcXHUwMERFXCIsXG4gICAgc3psaWc6IFwiXFx1MDBERlwiLFxuICAgIGFncmF2ZTogXCJcXHUwMEUwXCIsXG4gICAgYWFjdXRlOiBcIlxcdTAwRTFcIixcbiAgICBhY2lyYzogXCJcXHUwMEUyXCIsXG4gICAgYXRpbGRlOiBcIlxcdTAwRTNcIixcbiAgICBhdW1sOiBcIlxcdTAwRTRcIixcbiAgICBhcmluZzogXCJcXHUwMEU1XCIsXG4gICAgYWVsaWc6IFwiXFx1MDBFNlwiLFxuICAgIGNjZWRpbDogXCJcXHUwMEU3XCIsXG4gICAgZWdyYXZlOiBcIlxcdTAwRThcIixcbiAgICBlYWN1dGU6IFwiXFx1MDBFOVwiLFxuICAgIGVjaXJjOiBcIlxcdTAwRUFcIixcbiAgICBldW1sOiBcIlxcdTAwRUJcIixcbiAgICBpZ3JhdmU6IFwiXFx1MDBFQ1wiLFxuICAgIGlhY3V0ZTogXCJcXHUwMEVEXCIsXG4gICAgaWNpcmM6IFwiXFx1MDBFRVwiLFxuICAgIGl1bWw6IFwiXFx1MDBFRlwiLFxuICAgIGV0aDogXCJcXHUwMEYwXCIsXG4gICAgbnRpbGRlOiBcIlxcdTAwRjFcIixcbiAgICBvZ3JhdmU6IFwiXFx1MDBGMlwiLFxuICAgIG9hY3V0ZTogXCJcXHUwMEYzXCIsXG4gICAgb2NpcmM6IFwiXFx1MDBGNFwiLFxuICAgIG90aWxkZTogXCJcXHUwMEY1XCIsXG4gICAgb3VtbDogXCJcXHUwMEY2XCIsXG4gICAgZGl2aWRlOiBcIlxcdTAwRjdcIixcbiAgICBvc2xhc2g6IFwiXFx1MDBGOFwiLFxuICAgIHVncmF2ZTogXCJcXHUwMEY5XCIsXG4gICAgdWFjdXRlOiBcIlxcdTAwRkFcIixcbiAgICB1Y2lyYzogXCJcXHUwMEZCXCIsXG4gICAgdXVtbDogXCJcXHUwMEZDXCIsXG4gICAgeWFjdXRlOiBcIlxcdTAwRkRcIixcbiAgICB0aG9ybjogXCJcXHUwMEZFXCIsXG4gICAgeXVtbDogXCJcXHUwMEZGXCIsXG4gICAgT0VsaWc6IFwiXFx1MDE1MlwiLFxuICAgIG9lbGlnOiBcIlxcdTAxNTNcIixcbiAgICBTY2Fyb246IFwiXFx1MDE2MFwiLFxuICAgIHNjYXJvbjogXCJcXHUwMTYxXCIsXG4gICAgWXVtbDogXCJcXHUwMTc4XCIsXG4gICAgZm5vZjogXCJcXHUwMTkyXCIsXG4gICAgY2lyYzogXCJcXHUwMkM2XCIsXG4gICAgdGlsZGU6IFwiXFx1MDJEQ1wiLFxuICAgIEFscGhhOiBcIlxcdTAzOTFcIixcbiAgICBCZXRhOiBcIlxcdTAzOTJcIixcbiAgICBHYW1tYTogXCJcXHUwMzkzXCIsXG4gICAgRGVsdGE6IFwiXFx1MDM5NFwiLFxuICAgIEVwc2lsb246IFwiXFx1MDM5NVwiLFxuICAgIFpldGE6IFwiXFx1MDM5NlwiLFxuICAgIEV0YTogXCJcXHUwMzk3XCIsXG4gICAgVGhldGE6IFwiXFx1MDM5OFwiLFxuICAgIElvdGE6IFwiXFx1MDM5OVwiLFxuICAgIEthcHBhOiBcIlxcdTAzOUFcIixcbiAgICBMYW1iZGE6IFwiXFx1MDM5QlwiLFxuICAgIE11OiBcIlxcdTAzOUNcIixcbiAgICBOdTogXCJcXHUwMzlEXCIsXG4gICAgWGk6IFwiXFx1MDM5RVwiLFxuICAgIE9taWNyb246IFwiXFx1MDM5RlwiLFxuICAgIFBpOiBcIlxcdTAzQTBcIixcbiAgICBSaG86IFwiXFx1MDNBMVwiLFxuICAgIFNpZ21hOiBcIlxcdTAzQTNcIixcbiAgICBUYXU6IFwiXFx1MDNBNFwiLFxuICAgIFVwc2lsb246IFwiXFx1MDNBNVwiLFxuICAgIFBoaTogXCJcXHUwM0E2XCIsXG4gICAgQ2hpOiBcIlxcdTAzQTdcIixcbiAgICBQc2k6IFwiXFx1MDNBOFwiLFxuICAgIE9tZWdhOiBcIlxcdTAzQTlcIixcbiAgICBhbHBoYTogXCJcXHUwM0IxXCIsXG4gICAgYmV0YTogXCJcXHUwM0IyXCIsXG4gICAgZ2FtbWE6IFwiXFx1MDNCM1wiLFxuICAgIGRlbHRhOiBcIlxcdTAzQjRcIixcbiAgICBlcHNpbG9uOiBcIlxcdTAzQjVcIixcbiAgICB6ZXRhOiBcIlxcdTAzQjZcIixcbiAgICBldGE6IFwiXFx1MDNCN1wiLFxuICAgIHRoZXRhOiBcIlxcdTAzQjhcIixcbiAgICBpb3RhOiBcIlxcdTAzQjlcIixcbiAgICBrYXBwYTogXCJcXHUwM0JBXCIsXG4gICAgbGFtYmRhOiBcIlxcdTAzQkJcIixcbiAgICBtdTogXCJcXHUwM0JDXCIsXG4gICAgbnU6IFwiXFx1MDNCRFwiLFxuICAgIHhpOiBcIlxcdTAzQkVcIixcbiAgICBvbWljcm9uOiBcIlxcdTAzQkZcIixcbiAgICBwaTogXCJcXHUwM0MwXCIsXG4gICAgcmhvOiBcIlxcdTAzQzFcIixcbiAgICBzaWdtYWY6IFwiXFx1MDNDMlwiLFxuICAgIHNpZ21hOiBcIlxcdTAzQzNcIixcbiAgICB0YXU6IFwiXFx1MDNDNFwiLFxuICAgIHVwc2lsb246IFwiXFx1MDNDNVwiLFxuICAgIHBoaTogXCJcXHUwM0M2XCIsXG4gICAgY2hpOiBcIlxcdTAzQzdcIixcbiAgICBwc2k6IFwiXFx1MDNDOFwiLFxuICAgIG9tZWdhOiBcIlxcdTAzQzlcIixcbiAgICB0aGV0YXN5bTogXCJcXHUwM0QxXCIsXG4gICAgdXBzaWg6IFwiXFx1MDNEMlwiLFxuICAgIHBpdjogXCJcXHUwM0Q2XCIsXG4gICAgZW5zcDogXCJcXHUyMDAyXCIsXG4gICAgZW1zcDogXCJcXHUyMDAzXCIsXG4gICAgdGhpbnNwOiBcIlxcdTIwMDlcIixcbiAgICB6d25qOiBcIlxcdTIwMENcIixcbiAgICB6d2o6IFwiXFx1MjAwRFwiLFxuICAgIGxybTogXCJcXHUyMDBFXCIsXG4gICAgcmxtOiBcIlxcdTIwMEZcIixcbiAgICBuZGFzaDogXCJcXHUyMDEzXCIsXG4gICAgbWRhc2g6IFwiXFx1MjAxNFwiLFxuICAgIGxzcXVvOiBcIlxcdTIwMThcIixcbiAgICByc3F1bzogXCJcXHUyMDE5XCIsXG4gICAgc2JxdW86IFwiXFx1MjAxQVwiLFxuICAgIGxkcXVvOiBcIlxcdTIwMUNcIixcbiAgICByZHF1bzogXCJcXHUyMDFEXCIsXG4gICAgYmRxdW86IFwiXFx1MjAxRVwiLFxuICAgIGRhZ2dlcjogXCJcXHUyMDIwXCIsXG4gICAgRGFnZ2VyOiBcIlxcdTIwMjFcIixcbiAgICBidWxsOiBcIlxcdTIwMjJcIixcbiAgICBoZWxsaXA6IFwiXFx1MjAyNlwiLFxuICAgIHBlcm1pbDogXCJcXHUyMDMwXCIsXG4gICAgcHJpbWU6IFwiXFx1MjAzMlwiLFxuICAgIFByaW1lOiBcIlxcdTIwMzNcIixcbiAgICBsc2FxdW86IFwiXFx1MjAzOVwiLFxuICAgIHJzYXF1bzogXCJcXHUyMDNBXCIsXG4gICAgb2xpbmU6IFwiXFx1MjAzRVwiLFxuICAgIGZyYXNsOiBcIlxcdTIwNDRcIixcbiAgICBldXJvOiBcIlxcdTIwQUNcIixcbiAgICBpbWFnZTogXCJcXHUyMTExXCIsXG4gICAgd2VpZXJwOiBcIlxcdTIxMThcIixcbiAgICByZWFsOiBcIlxcdTIxMUNcIixcbiAgICB0cmFkZTogXCJcXHUyMTIyXCIsXG4gICAgYWxlZnN5bTogXCJcXHUyMTM1XCIsXG4gICAgbGFycjogXCJcXHUyMTkwXCIsXG4gICAgdWFycjogXCJcXHUyMTkxXCIsXG4gICAgcmFycjogXCJcXHUyMTkyXCIsXG4gICAgZGFycjogXCJcXHUyMTkzXCIsXG4gICAgaGFycjogXCJcXHUyMTk0XCIsXG4gICAgY3JhcnI6IFwiXFx1MjFCNVwiLFxuICAgIGxBcnI6IFwiXFx1MjFEMFwiLFxuICAgIHVBcnI6IFwiXFx1MjFEMVwiLFxuICAgIHJBcnI6IFwiXFx1MjFEMlwiLFxuICAgIGRBcnI6IFwiXFx1MjFEM1wiLFxuICAgIGhBcnI6IFwiXFx1MjFENFwiLFxuICAgIGZvcmFsbDogXCJcXHUyMjAwXCIsXG4gICAgcGFydDogXCJcXHUyMjAyXCIsXG4gICAgZXhpc3Q6IFwiXFx1MjIwM1wiLFxuICAgIGVtcHR5OiBcIlxcdTIyMDVcIixcbiAgICBuYWJsYTogXCJcXHUyMjA3XCIsXG4gICAgaXNpbjogXCJcXHUyMjA4XCIsXG4gICAgbm90aW46IFwiXFx1MjIwOVwiLFxuICAgIG5pOiBcIlxcdTIyMEJcIixcbiAgICBwcm9kOiBcIlxcdTIyMEZcIixcbiAgICBzdW06IFwiXFx1MjIxMVwiLFxuICAgIG1pbnVzOiBcIlxcdTIyMTJcIixcbiAgICBsb3dhc3Q6IFwiXFx1MjIxN1wiLFxuICAgIHJhZGljOiBcIlxcdTIyMUFcIixcbiAgICBwcm9wOiBcIlxcdTIyMURcIixcbiAgICBpbmZpbjogXCJcXHUyMjFFXCIsXG4gICAgYW5nOiBcIlxcdTIyMjBcIixcbiAgICBhbmQ6IFwiXFx1MjIyN1wiLFxuICAgIG9yOiBcIlxcdTIyMjhcIixcbiAgICBjYXA6IFwiXFx1MjIyOVwiLFxuICAgIGN1cDogXCJcXHUyMjJBXCIsXG4gICAgXCJpbnRcIjogXCJcXHUyMjJCXCIsXG4gICAgdGhlcmU0OiBcIlxcdTIyMzRcIixcbiAgICBzaW06IFwiXFx1MjIzQ1wiLFxuICAgIGNvbmc6IFwiXFx1MjI0NVwiLFxuICAgIGFzeW1wOiBcIlxcdTIyNDhcIixcbiAgICBuZTogXCJcXHUyMjYwXCIsXG4gICAgZXF1aXY6IFwiXFx1MjI2MVwiLFxuICAgIGxlOiBcIlxcdTIyNjRcIixcbiAgICBnZTogXCJcXHUyMjY1XCIsXG4gICAgc3ViOiBcIlxcdTIyODJcIixcbiAgICBzdXA6IFwiXFx1MjI4M1wiLFxuICAgIG5zdWI6IFwiXFx1MjI4NFwiLFxuICAgIHN1YmU6IFwiXFx1MjI4NlwiLFxuICAgIHN1cGU6IFwiXFx1MjI4N1wiLFxuICAgIG9wbHVzOiBcIlxcdTIyOTVcIixcbiAgICBvdGltZXM6IFwiXFx1MjI5N1wiLFxuICAgIHBlcnA6IFwiXFx1MjJBNVwiLFxuICAgIHNkb3Q6IFwiXFx1MjJDNVwiLFxuICAgIGxjZWlsOiBcIlxcdTIzMDhcIixcbiAgICByY2VpbDogXCJcXHUyMzA5XCIsXG4gICAgbGZsb29yOiBcIlxcdTIzMEFcIixcbiAgICByZmxvb3I6IFwiXFx1MjMwQlwiLFxuICAgIGxhbmc6IFwiXFx1MjMyOVwiLFxuICAgIHJhbmc6IFwiXFx1MjMyQVwiLFxuICAgIGxvejogXCJcXHUyNUNBXCIsXG4gICAgc3BhZGVzOiBcIlxcdTI2NjBcIixcbiAgICBjbHViczogXCJcXHUyNjYzXCIsXG4gICAgaGVhcnRzOiBcIlxcdTI2NjVcIixcbiAgICBkaWFtczogXCJcXHUyNjY2XCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwibmFtZVwiOiBcImVzcHJlZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiQW4gYWN0aXZlbHktbWFpbnRhaW5lZCBmb3JrIG9mIEVzcHJpbWEsIHRoZSBFQ01BU2NyaXB0IHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIG11bHRpcHVycG9zZSBhbmFseXNpc1wiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiTmljaG9sYXMgQy4gWmFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXMrbnBtQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlXCIsXG4gIFwibWFpblwiOiBcImVzcHJlZS5qc1wiLFxuICBcImJpblwiOiB7XG4gICAgXCJlc3BhcnNlXCI6IFwiLi9iaW4vZXNwYXJzZS5qc1wiLFxuICAgIFwiZXN2YWxpZGF0ZVwiOiBcIi4vYmluL2VzdmFsaWRhdGUuanNcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIyLjAuM1wiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpblwiLFxuICAgIFwibGliXCIsXG4gICAgXCJ0ZXN0L3J1bi5qc1wiLFxuICAgIFwidGVzdC9ydW5uZXIuanNcIixcbiAgICBcInRlc3QvdGVzdC5qc1wiLFxuICAgIFwidGVzdC9jb21wYXQuanNcIixcbiAgICBcInRlc3QvcmVmbGVjdC5qc1wiLFxuICAgIFwiZXNwcmVlLmpzXCJcbiAgXSxcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlLmdpdFwiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlLmdpdFwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9uemFrYXMvZXNwcmVlL3Jhdy9tYXN0ZXIvTElDRU5TRVwiXG4gICAgfVxuICBdLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjcuMC4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiY29tcGxleGl0eS1yZXBvcnRcIjogXCJ+MC42LjFcIixcbiAgICBcImRhdGVmb3JtYXRcIjogXCJeMS4wLjExXCIsXG4gICAgXCJlc2xpbnRcIjogXCJeMC45LjJcIixcbiAgICBcImVzcHJpbWFcIjogXCJnaXQ6Ly9naXRodWIuY29tL2pxdWVyeS9lc3ByaW1hXCIsXG4gICAgXCJlc3ByaW1hLWZiXCI6IFwiXjgwMDEuMjAwMS4wLWRldi1oYXJtb255LWZiXCIsXG4gICAgXCJpc3RhbmJ1bFwiOiBcIn4wLjIuNlwiLFxuICAgIFwianNvbi1kaWZmXCI6IFwifjAuMy4xXCIsXG4gICAgXCJsZWNoZVwiOiBcIl4xLjAuMVwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4wLjFcIixcbiAgICBcIm5wbS1saWNlbnNlXCI6IFwiXjAuMi4zXCIsXG4gICAgXCJvcHRpbWlzdFwiOiBcIn4wLjYuMFwiLFxuICAgIFwicmVnZW5lcmF0ZVwiOiBcIn4wLjUuNFwiLFxuICAgIFwic2VtdmVyXCI6IFwiXjQuMS4xXCIsXG4gICAgXCJzaGVsbGpzXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJzaGVsbGpzLW5vZGVjbGlcIjogXCJeMC4xLjFcIixcbiAgICBcInVuaWNvZGUtNi4zLjBcIjogXCJ+MC4xLjBcIlxuICB9LFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcImFzdFwiLFxuICAgIFwiZWNtYXNjcmlwdFwiLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIFwicGFyc2VyXCIsXG4gICAgXCJzeW50YXhcIlxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiZ2VuZXJhdGUtcmVnZXhcIjogXCJub2RlIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNcIixcbiAgICBcInRlc3RcIjogXCJucG0gcnVuLXNjcmlwdCBsaW50ICYmIG5vZGUgTWFrZWZpbGUuanMgdGVzdCAmJiBub2RlIHRlc3QvcnVuLmpzXCIsXG4gICAgXCJsaW50XCI6IFwibm9kZSBNYWtlZmlsZS5qcyBsaW50XCIsXG4gICAgXCJwYXRjaFwiOiBcIm5vZGUgTWFrZWZpbGUuanMgcGF0Y2hcIixcbiAgICBcIm1pbm9yXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBtaW5vclwiLFxuICAgIFwibWFqb3JcIjogXCJub2RlIE1ha2VmaWxlLmpzIG1ham9yXCIsXG4gICAgXCJicm93c2VyaWZ5XCI6IFwibm9kZSBNYWtlZmlsZS5qcyBicm93c2VyaWZ5XCIsXG4gICAgXCJjb3ZlcmFnZVwiOiBcIm5wbSBydW4tc2NyaXB0IGFuYWx5emUtY292ZXJhZ2UgJiYgbnBtIHJ1bi1zY3JpcHQgY2hlY2stY292ZXJhZ2VcIixcbiAgICBcImFuYWx5emUtY292ZXJhZ2VcIjogXCJub2RlIG5vZGVfbW9kdWxlcy9pc3RhbmJ1bC9saWIvY2xpLmpzIGNvdmVyIHRlc3QvcnVubmVyLmpzXCIsXG4gICAgXCJjaGVjay1jb3ZlcmFnZVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgY2hlY2stY292ZXJhZ2UgLS1zdGF0ZW1lbnQgOTkgLS1icmFuY2ggOTkgLS1mdW5jdGlvbiA5OVwiLFxuICAgIFwiY29tcGxleGl0eVwiOiBcIm5wbSBydW4tc2NyaXB0IGFuYWx5emUtY29tcGxleGl0eSAmJiBucG0gcnVuLXNjcmlwdCBjaGVjay1jb21wbGV4aXR5XCIsXG4gICAgXCJhbmFseXplLWNvbXBsZXhpdHlcIjogXCJub2RlIHRvb2xzL2xpc3QtY29tcGxleGl0eS5qc1wiLFxuICAgIFwiY2hlY2stY29tcGxleGl0eVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2NvbXBsZXhpdHktcmVwb3J0L3NyYy9jbGkuanMgLS1tYXhjYyAxNCAtLXNpbGVudCAtbCAtdyBlc3ByZWUuanNcIixcbiAgICBcImJlbmNobWFya1wiOiBcIm5vZGUgdGVzdC9iZW5jaG1hcmtzLmpzXCIsXG4gICAgXCJiZW5jaG1hcmstcXVpY2tcIjogXCJub2RlIHRlc3QvYmVuY2htYXJrcy5qcyBxdWlja1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcImdpdEhlYWRcIjogXCJiNjBiNTk3Y2ZlNDgzNGFhY2QxNmM5MDE3OWNlNzNlMjI3MDVjMTMyXCIsXG4gIFwiX2lkXCI6IFwiZXNwcmVlQDIuMC4zXCIsXG4gIFwiX3NoYXN1bVwiOiBcIjFmYmRmZjYwYTQxMGJkMGQ0MTZiMWFiM2Q2MjMwZDM0YjdhNDUwZTFcIixcbiAgXCJfZnJvbVwiOiBcImVzcHJlZUA+PTIuMC4xIDwzLjAuMFwiLFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMS40LjI4XCIsXG4gIFwiX25wbVVzZXJcIjoge1xuICAgIFwibmFtZVwiOiBcIm56YWthc1wiLFxuICAgIFwiZW1haWxcIjogXCJuaWNob2xhc0BuY3pjb25zdWx0aW5nLmNvbVwiXG4gIH0sXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm56YWthc1wiLFxuICAgICAgXCJlbWFpbFwiOiBcIm5pY2hvbGFzQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgICB9XG4gIF0sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCIxZmJkZmY2MGE0MTBiZDBkNDE2YjFhYjNkNjIzMGQzNGI3YTQ1MGUxXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtMi4wLjMudGd6XCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtMi4wLjMudGd6XCIsXG4gIFwicmVhZG1lXCI6IFwiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kIVwiXG59XG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi9cbi8qanNoaW50IGluZGVudDo0Ki9cbi8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSovXG4oZnVuY3Rpb24gY2xvbmUoZXhwb3J0cykge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBTeW50YXgsXG4gICAgICAgIGlzQXJyYXksXG4gICAgICAgIFZpc2l0b3JPcHRpb24sXG4gICAgICAgIFZpc2l0b3JLZXlzLFxuICAgICAgICBvYmplY3RDcmVhdGUsXG4gICAgICAgIG9iamVjdEtleXMsXG4gICAgICAgIEJSRUFLLFxuICAgICAgICBTS0lQLFxuICAgICAgICBSRU1PVkU7XG5cbiAgICBmdW5jdGlvbiBpZ25vcmVKU0hpbnRFcnJvcigpIHsgfVxuXG4gICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4gICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICAgIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWVwQ29weShvYmopIHtcbiAgICAgICAgdmFyIHJldCA9IHt9LCBrZXksIHZhbDtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gZGVlcENvcHkodmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaGFsbG93Q29weShvYmopIHtcbiAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7XG4gICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBpZ25vcmVKU0hpbnRFcnJvcihzaGFsbG93Q29weSk7XG5cbiAgICAvLyBiYXNlZCBvbiBMTFZNIGxpYmMrKyB1cHBlcl9ib3VuZCAvIGxvd2VyX2JvdW5kXG4gICAgLy8gTUlUIExpY2Vuc2VcblxuICAgIGZ1bmN0aW9uIHVwcGVyQm91bmQoYXJyYXksIGZ1bmMpIHtcbiAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDtcblxuICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGkgPSAwO1xuXG4gICAgICAgIHdoaWxlIChsZW4pIHtcbiAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7XG4gICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7XG4gICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICBsZW4gPSBkaWZmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7XG4gICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIGZ1bmMpIHtcbiAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDtcblxuICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGkgPSAwO1xuXG4gICAgICAgIHdoaWxlIChsZW4pIHtcbiAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7XG4gICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7XG4gICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7XG4gICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZW4gPSBkaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICBpZ25vcmVKU0hpbnRFcnJvcihsb3dlckJvdW5kKTtcblxuICAgIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gRigpIHsgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBvO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGKCk7XG4gICAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgICB2YXIga2V5cyA9IFtdLCBrZXk7XG4gICAgICAgIGZvciAoa2V5IGluIG8pIHtcbiAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBleHRlbmQodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKGZyb20pLCBrZXksIGksIGxlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIFN5bnRheCA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsXG4gICAgICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiAnQXNzaWdubWVudFBhdHRlcm4nLFxuICAgICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLFxuICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJheVBhdHRlcm4nLFxuICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiAnQXdhaXRFeHByZXNzaW9uJywgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsXG4gICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJyxcbiAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsXG4gICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsXG4gICAgICAgIENsYXNzRGVjbGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiAnQ2xhc3NFeHByZXNzaW9uJyxcbiAgICAgICAgQ29tcHJlaGVuc2lvbkJsb2NrOiAnQ29tcHJlaGVuc2lvbkJsb2NrJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb21wcmVoZW5zaW9uRXhwcmVzc2lvbjogJ0NvbXByZWhlbnNpb25FeHByZXNzaW9uJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLFxuICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JyxcbiAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsXG4gICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogJ0RpcmVjdGl2ZVN0YXRlbWVudCcsXG4gICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JyxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsXG4gICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiAnRXhwb3J0QWxsRGVjbGFyYXRpb24nLFxuICAgICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLFxuICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogJ0V4cG9ydFNwZWNpZmllcicsXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JyxcbiAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JyxcbiAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsXG4gICAgICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLFxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsXG4gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsXG4gICAgICAgIEdlbmVyYXRvckV4cHJlc3Npb246ICdHZW5lcmF0b3JFeHByZXNzaW9uJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsXG4gICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogJ0ltcG9ydERlY2xhcmF0aW9uJyxcbiAgICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLFxuICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXInLFxuICAgICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JyxcbiAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLFxuICAgICAgICBNb2R1bGVTcGVjaWZpZXI6ICdNb2R1bGVTcGVjaWZpZXInLFxuICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgICAgIE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogJ09iamVjdFBhdHRlcm4nLFxuICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsXG4gICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLFxuICAgICAgICBSZXN0RWxlbWVudDogJ1Jlc3RFbGVtZW50JyxcbiAgICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JyxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJyxcbiAgICAgICAgU3ByZWFkRWxlbWVudDogJ1NwcmVhZEVsZW1lbnQnLFxuICAgICAgICBTdXBlckV4cHJlc3Npb246ICdTdXBlckV4cHJlc3Npb24nLFxuICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLFxuICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsXG4gICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogJ1RhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFRlbXBsYXRlRWxlbWVudDogJ1RlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogJ1RlbXBsYXRlTGl0ZXJhbCcsXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLFxuICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JyxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JyxcbiAgICAgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcsXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lpZWxkRXhwcmVzc2lvbidcbiAgICB9O1xuXG4gICAgVmlzaXRvcktleXMgPSB7XG4gICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBcnJheUV4cHJlc3Npb246IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyYXlQYXR0ZXJuOiBbJ2VsZW1lbnRzJ10sXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBbJ3BhcmFtcycsICdib2R5J10sXG4gICAgICAgIEF3YWl0RXhwcmVzc2lvbjogWydhcmd1bWVudCddLCAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6IFsnYm9keSddLFxuICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6IFsnbGFiZWwnXSxcbiAgICAgICAgQ2FsbEV4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBDYXRjaENsYXVzZTogWydwYXJhbScsICdib2R5J10sXG4gICAgICAgIENsYXNzQm9keTogWydib2R5J10sXG4gICAgICAgIENsYXNzRGVjbGFyYXRpb246IFsnaWQnLCAnc3VwZXJDbGFzcycsICdib2R5J10sXG4gICAgICAgIENsYXNzRXhwcmVzc2lvbjogWydpZCcsICdzdXBlckNsYXNzJywgJ2JvZHknXSxcbiAgICAgICAgQ29tcHJlaGVuc2lvbkJsb2NrOiBbJ2xlZnQnLCAncmlnaHQnXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb21wcmVoZW5zaW9uRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBDb250aW51ZVN0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogW10sXG4gICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogW10sXG4gICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFsnYm9keScsICd0ZXN0J10sXG4gICAgICAgIEVtcHR5U3RhdGVtZW50OiBbXSxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246IFsnc291cmNlJ10sXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogWydkZWNsYXJhdGlvbiddLFxuICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJywgJ3NwZWNpZmllcnMnLCAnc291cmNlJ10sXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogWydleHBvcnRlZCcsICdsb2NhbCddLFxuICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiBbJ2V4cHJlc3Npb24nXSxcbiAgICAgICAgRm9yU3RhdGVtZW50OiBbJ2luaXQnLCAndGVzdCcsICd1cGRhdGUnLCAnYm9keSddLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6IFsnbGVmdCcsICdyaWdodCcsICdib2R5J10sXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IFsnaWQnLCAncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdib2R5J10sXG4gICAgICAgIEdlbmVyYXRvckV4cHJlc3Npb246IFsnYmxvY2tzJywgJ2ZpbHRlcicsICdib2R5J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgSWRlbnRpZmllcjogW10sXG4gICAgICAgIElmU3RhdGVtZW50OiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSxcbiAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246IFsnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogWydsb2NhbCddLFxuICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IFsnbG9jYWwnXSxcbiAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiBbJ2ltcG9ydGVkJywgJ2xvY2FsJ10sXG4gICAgICAgIExpdGVyYWw6IFtdLFxuICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiBbJ2xhYmVsJywgJ2JvZHknXSxcbiAgICAgICAgTG9naWNhbEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiBbJ29iamVjdCcsICdwcm9wZXJ0eSddLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiBbJ2tleScsICd2YWx1ZSddLFxuICAgICAgICBNb2R1bGVTcGVjaWZpZXI6IFtdLFxuICAgICAgICBOZXdFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdhcmd1bWVudHMnXSxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIE9iamVjdFBhdHRlcm46IFsncHJvcGVydGllcyddLFxuICAgICAgICBQcm9ncmFtOiBbJ2JvZHknXSxcbiAgICAgICAgUHJvcGVydHk6IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIFJlc3RFbGVtZW50OiBbICdhcmd1bWVudCcgXSxcbiAgICAgICAgUmV0dXJuU3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogWydleHByZXNzaW9ucyddLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFN1cGVyRXhwcmVzc2lvbjogWydzdXBlciddLFxuICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFsnZGlzY3JpbWluYW50JywgJ2Nhc2VzJ10sXG4gICAgICAgIFN3aXRjaENhc2U6IFsndGVzdCcsICdjb25zZXF1ZW50J10sXG4gICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogWyd0YWcnLCAncXVhc2knXSxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiBbXSxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiBbJ3F1YXNpcycsICdleHByZXNzaW9ucyddLFxuICAgICAgICBUaGlzRXhwcmVzc2lvbjogW10sXG4gICAgICAgIFRocm93U3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFRyeVN0YXRlbWVudDogWydibG9jaycsICdoYW5kbGVyJywgJ2ZpbmFsaXplciddLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucyddLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLFxuICAgICAgICBXaGlsZVN0YXRlbWVudDogWyd0ZXN0JywgJ2JvZHknXSxcbiAgICAgICAgV2l0aFN0YXRlbWVudDogWydvYmplY3QnLCAnYm9keSddLFxuICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQnXVxuICAgIH07XG5cbiAgICAvLyB1bmlxdWUgaWRcbiAgICBCUkVBSyA9IHt9O1xuICAgIFNLSVAgPSB7fTtcbiAgICBSRU1PVkUgPSB7fTtcblxuICAgIFZpc2l0b3JPcHRpb24gPSB7XG4gICAgICAgIEJyZWFrOiBCUkVBSyxcbiAgICAgICAgU2tpcDogU0tJUCxcbiAgICAgICAgUmVtb3ZlOiBSRU1PVkVcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUmVmZXJlbmNlKHBhcmVudCwga2V5KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5rZXldID0gbm9kZTtcbiAgICB9O1xuXG4gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRoaXMucGFyZW50KSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3BsaWNlKHRoaXMua2V5LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIEVsZW1lbnQobm9kZSwgcGF0aCwgd3JhcCwgcmVmKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRyb2xsZXIoKSB7IH1cblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gcHJvcGVydHkgcGF0aCBhcnJheSBmcm9tIHJvb3QgdG8gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7XG4gICAgICAgIHZhciBpLCBpeiwgaiwganosIHJlc3VsdCwgZWxlbWVudDtcblxuICAgICAgICBmdW5jdGlvbiBhZGRUb1BhdGgocmVzdWx0LCBwYXRoKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGp6ID0gcGF0aC5sZW5ndGg7IGogPCBqejsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGhbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByb290IG5vZGVcbiAgICAgICAgaWYgKCF0aGlzLl9fY3VycmVudC5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpcnN0IG5vZGUgaXMgc2VudGluZWwsIHNlY29uZCBub2RlIGlzIHJvb3QgZWxlbWVudFxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMiwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLl9fbGVhdmVsaXN0W2ldO1xuICAgICAgICAgICAgYWRkVG9QYXRoKHJlc3VsdCwgZWxlbWVudC5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCB0aGlzLl9fY3VycmVudC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiB0eXBlIG9mIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIHJldHVybiBub2RlLnR5cGUgfHwgdGhpcy5fX2N1cnJlbnQud3JhcDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBhcnJheSBvZiBwYXJlbnQgZWxlbWVudHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24gcGFyZW50cygpIHtcbiAgICAgICAgdmFyIGksIGl6LCByZXN1bHQ7XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbFxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMSwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuX19sZWF2ZWxpc3RbaV0ubm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2N1cnJlbnQubm9kZTtcbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19leGVjdXRlID0gZnVuY3Rpb24gX19leGVjdXRlKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwcmV2aW91cywgcmVzdWx0O1xuXG4gICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBwcmV2aW91cyAgPSB0aGlzLl9fY3VycmVudDtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrLmNhbGwodGhpcywgZWxlbWVudC5ub2RlLCB0aGlzLl9fbGVhdmVsaXN0W3RoaXMuX19sZWF2ZWxpc3QubGVuZ3RoIC0gMV0ubm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBwcmV2aW91cztcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gbm90aWZ5IGNvbnRyb2wgc2tpcCAvIGJyZWFrXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGZsYWcpIHtcbiAgICAgICAgdGhpcy5fX3N0YXRlID0gZmxhZztcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHNraXAgY2hpbGQgbm9kZXMgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoU0tJUCk7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBicmVhayB0cmF2ZXJzYWxzXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGVbJ2JyZWFrJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KEJSRUFLKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJlbW92ZSBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShSRU1PVkUpO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2luaXRpYWxpemUgPSBmdW5jdGlvbihyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHRoaXMudmlzaXRvciA9IHZpc2l0b3I7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgIHRoaXMuX193b3JrbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLl9fbGVhdmVsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX2ZhbGxiYWNrID0gdmlzaXRvci5mYWxsYmFjayA9PT0gJ2l0ZXJhdGlvbic7XG4gICAgICAgIHRoaXMuX19rZXlzID0gVmlzaXRvcktleXM7XG4gICAgICAgIGlmICh2aXNpdG9yLmtleXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19rZXlzID0gZXh0ZW5kKG9iamVjdENyZWF0ZSh0aGlzLl9fa2V5cyksIHZpc2l0b3Iua2V5cyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNOb2RlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGUudHlwZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQcm9wZXJ0eShub2RlVHlwZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAobm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uIHx8IG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybikgJiYgJ3Byb3BlcnRpZXMnID09PSBrZXk7XG4gICAgfVxuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciB3b3JrbGlzdCxcbiAgICAgICAgICAgIGxlYXZlbGlzdCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY3VycmVudDIsXG4gICAgICAgICAgICBjYW5kaWRhdGVzLFxuICAgICAgICAgICAgY2FuZGlkYXRlLFxuICAgICAgICAgICAgc2VudGluZWw7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG51bGwpKTtcbiAgICAgICAgbGVhdmVsaXN0LnB1c2gobmV3IEVsZW1lbnQobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuXG4gICAgICAgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5ub2RlKSB7XG5cbiAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gU0tJUCB8fCByZXQgPT09IFNLSVApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTtcbiAgICAgICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5cGU7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IHRoaXMuX19rZXlzW25vZGVUeXBlXTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19mYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IG9iamVjdEtleXMobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlICcgKyBub2RlVHlwZSArICcuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5KG5vZGVUeXBlLCBjYW5kaWRhdGVzW2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGVbY3VycmVudDJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbnVsbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbShlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbmV4dEVsZW0sXG4gICAgICAgICAgICAgICAgcGFyZW50O1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZWYucmVtb3ZlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSByZWZlcmVuY2UgaXMgYW4gZWxlbWVudCBvZiBhbiBhcnJheS5cbiAgICAgICAgICAgICAgICBrZXkgPSBlbGVtZW50LnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbWVudC5yZWYucGFyZW50O1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgcmVtb3ZlZCBmcm9tIGFycmF5LCB0aGVuIGRlY3JlYXNlIGZvbGxvd2luZyBpdGVtcycga2V5cy5cbiAgICAgICAgICAgICAgICBpID0gd29ya2xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW0gPSB3b3JrbGlzdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtLnJlZiAmJiBuZXh0RWxlbS5yZWYucGFyZW50ID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICAobmV4dEVsZW0ucmVmLmtleSA8IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLS1uZXh0RWxlbS5yZWYua2V5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG5vZGVUeXBlLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbCxcbiAgICAgICAgICAgIG91dGVyLFxuICAgICAgICAgICAga2V5O1xuXG4gICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpO1xuXG4gICAgICAgIHNlbnRpbmVsID0ge307XG5cbiAgICAgICAgLy8gcmVmZXJlbmNlXG4gICAgICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0O1xuICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVhdmVsaXN0O1xuXG4gICAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgICAgb3V0ZXIgPSB7XG4gICAgICAgICAgICByb290OiByb290XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9vdCcpKTtcbiAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRoIG51bGwsXG4gICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCAmJiB0YXJnZXQgIT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBSRU1PVkUgfHwgdGFyZ2V0ID09PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRWxlbShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2VcbiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCAmJiB0YXJnZXQgIT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gdGFyZ2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBSRU1PVkUgfHwgdGFyZ2V0ID09PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubm9kZSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgbnVsbFxuICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTtcbiAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHRhcmdldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5cGU7XG4gICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19mYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlICcgKyBub2RlVHlwZSArICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgJ1Byb3BlcnR5JywgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGVbY3VycmVudDJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5ldyBSZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRlLCBrZXksIG51bGwsIG5ldyBSZWZlcmVuY2Uobm9kZSwga2V5KSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIudHJhdmVyc2Uocm9vdCwgdmlzaXRvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucmVwbGFjZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmRDb21tZW50UmFuZ2UoY29tbWVudCwgdG9rZW5zKSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG5cbiAgICAgICAgdGFyZ2V0ID0gdXBwZXJCb3VuZCh0b2tlbnMsIGZ1bmN0aW9uIHNlYXJjaCh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuLnJhbmdlWzBdID4gY29tbWVudC5yYW5nZVswXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gW2NvbW1lbnQucmFuZ2VbMF0sIGNvbW1lbnQucmFuZ2VbMV1dO1xuXG4gICAgICAgIGlmICh0YXJnZXQgIT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9IHRva2Vuc1t0YXJnZXRdLnJhbmdlWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0IC09IDE7XG4gICAgICAgIGlmICh0YXJnZXQgPj0gMCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhdHRhY2hDb21tZW50cyh0cmVlLCBwcm92aWRlZENvbW1lbnRzLCB0b2tlbnMpIHtcbiAgICAgICAgLy8gQXQgZmlyc3QsIHdlIHNob3VsZCBjYWxjdWxhdGUgZXh0ZW5kZWQgY29tbWVudCByYW5nZXMuXG4gICAgICAgIHZhciBjb21tZW50cyA9IFtdLCBjb21tZW50LCBsZW4sIGksIGN1cnNvcjtcblxuICAgICAgICBpZiAoIXRyZWUucmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0YWNoQ29tbWVudHMgbmVlZHMgcmFuZ2UgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRva2VucyBhcnJheSBpcyBlbXB0eSwgd2UgYXR0YWNoIGNvbW1lbnRzIHRvIHRyZWUgYXMgJ2xlYWRpbmdDb21tZW50cydcbiAgICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocHJvdmlkZWRDb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gWzAsIHRyZWUucmFuZ2VbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmVlLmxlYWRpbmdDb21tZW50cyA9IGNvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb21tZW50cy5wdXNoKGV4dGVuZENvbW1lbnRSYW5nZShkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKSwgdG9rZW5zKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIEpvaG4gRnJlZW1hbidzIGltcGxlbWVudGF0aW9uLlxuICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7XG4gICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29tbWVudDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPT09IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7XG4gICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29tbWVudDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdIDwgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdID09PSBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS50cmFpbGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdHJlZTtcbiAgICB9XG5cbiAgICBleHBvcnRzLnZlcnNpb24gPSByZXF1aXJlKCcuL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7XG4gICAgZXhwb3J0cy50cmF2ZXJzZSA9IHRyYXZlcnNlO1xuICAgIGV4cG9ydHMucmVwbGFjZSA9IHJlcGxhY2U7XG4gICAgZXhwb3J0cy5hdHRhY2hDb21tZW50cyA9IGF0dGFjaENvbW1lbnRzO1xuICAgIGV4cG9ydHMuVmlzaXRvcktleXMgPSBWaXNpdG9yS2V5cztcbiAgICBleHBvcnRzLlZpc2l0b3JPcHRpb24gPSBWaXNpdG9yT3B0aW9uO1xuICAgIGV4cG9ydHMuQ29udHJvbGxlciA9IENvbnRyb2xsZXI7XG4gICAgZXhwb3J0cy5jbG9uZUVudmlyb25tZW50ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xvbmUoe30pOyB9O1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG59KGV4cG9ydHMpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwibmFtZVwiOiBcImVzdHJhdmVyc2VcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkVDTUFTY3JpcHQgSlMgQVNUIHRyYXZlcnNhbCBmdW5jdGlvbnNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2VcIixcbiAgXCJtYWluXCI6IFwiZXN0cmF2ZXJzZS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjEuMFwiLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC4xMC4wXCJcbiAgfSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJtaWNoYWVsZmljYXJyYVwiLFxuICAgICAgXCJlbWFpbFwiOiBcIm5wbUBtaWNoYWVsLmZpY2FycmEubWVcIlxuICAgIH1cbiAgXSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHA6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS5naXRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjaGFpXCI6IFwiXjIuMS4xXCIsXG4gICAgXCJjb2ZmZWUtc2NyaXB0XCI6IFwiXjEuOC4wXCIsXG4gICAgXCJlc3ByZWVcIjogXCJeMS4xMS4wXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOC4xMFwiLFxuICAgIFwiZ3VscC1idW1wXCI6IFwiXjAuMi4yXCIsXG4gICAgXCJndWxwLWZpbHRlclwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC1naXRcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtdGFnLXZlcnNpb25cIjogXCJeMS4yLjFcIixcbiAgICBcImpzaGludFwiOiBcIl4yLjUuNlwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4xLjBcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlL3Jhdy9tYXN0ZXIvTElDRU5TRS5CU0RcIlxuICAgIH1cbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInRlc3RcIjogXCJucG0gcnVuLXNjcmlwdCBsaW50ICYmIG5wbSBydW4tc2NyaXB0IHVuaXQtdGVzdFwiLFxuICAgIFwibGludFwiOiBcImpzaGludCBlc3RyYXZlcnNlLmpzXCIsXG4gICAgXCJ1bml0LXRlc3RcIjogXCJtb2NoYSAtLWNvbXBpbGVycyBjb2ZmZWU6Y29mZmVlLXNjcmlwdC9yZWdpc3RlclwiXG4gIH0sXG4gIFwiZ2l0SGVhZFwiOiBcIjE2NmViYmUwYThkNDVjZWIyMzkxYjZmNWVmNWQxYmFiNmJmYjI2N2FcIixcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvaXNzdWVzXCJcbiAgfSxcbiAgXCJfaWRcIjogXCJlc3RyYXZlcnNlQDMuMS4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcIjE1ZTI4YTQ0NmI4YjgyYmM3MDBjY2M4Yjk2Yzc4YWY0ZGEwZDZjYmFcIixcbiAgXCJfZnJvbVwiOiBcImVzdHJhdmVyc2VAPj0zLjEuMCA8NC4wLjBcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjIuMC4wLWFscGhhLTVcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtMy4xLjAudGd6XCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHNldEltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIGFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMoYXJncykge1xuICAgICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gcGFydGlhbGx5QXBwbGllZC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgc2V0SW1tZWRpYXRlLCBidXRcbiAgICAvLyByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gcGFydGlhbGx5QXBwbGllZChoYW5kbGVyKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKG5ldyBGdW5jdGlvbihcIlwiICsgaGFuZGxlcikpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChwYXJ0aWFsbHlBcHBsaWVkKHJ1bklmUHJlc2VudCwgaGFuZGxlKSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKCk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2socGFydGlhbGx5QXBwbGllZChydW5JZlByZXNlbnQsIGhhbmRsZSkpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICBzZXRJbW1lZGlhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBhZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBhcnRpYWxseUFwcGxpZWQocnVuSWZQcmVzZW50LCBoYW5kbGUpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufShuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpKSk7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbiAvKmpzbGludCBub2RlOiB0cnVlICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3RhdGljIGFuYWx5c2lzIGZvciBQb2x5bWVyLlxuICogQG5hbWVzcGFjZSBoeWRyb2x5c2lzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBbmFseXplcjogICAgIHJlcXVpcmUoJy4vbGliL2FuYWx5emVyJyksXG4gIGRvY3M6ICAgICAgICAgcmVxdWlyZSgnLi9saWIvYXN0LXV0aWxzL2RvY3MnKSxcbiAgRlNSZXNvbHZlcjogICByZXF1aXJlKCcuL2xpYi9sb2FkZXIvZnMtcmVzb2x2ZXInKSxcbiAganNkb2M6ICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvanNkb2MnKSxcbiAgTG9hZGVyOiAgICAgICByZXF1aXJlKCcuL2xpYi9sb2FkZXIvZmlsZS1sb2FkZXInKSxcbiAgTm9vcFJlc29sdmVyOiByZXF1aXJlKCcuL2xpYi9sb2FkZXIvbm9vcC1yZXNvbHZlcicpLFxuICBYSFJSZXNvbHZlcjogIHJlcXVpcmUoJy4vbGliL2xvYWRlci94aHItcmVzb2x2ZXInKSxcbiAgX2pzUGFyc2U6ICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvanMtcGFyc2UnKSxcbiAgX2ltcG9ydFBhcnNlOiByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyksXG59O1xuIl19
  26342 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci94aHItcmVzb2x2ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Fzc2VydC9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9saWIvZG9jdHJpbmUuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbGliL3R5cGVkLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL2xpYi91dGlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9hc3QuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL2NvZGUuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL2tleXdvcmQuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9kb201L2RvbTUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2RvY3R5cGUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZm9yZWlnbl9jb250ZW50LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2h0bWwuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdW5pY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2pzZG9tL2pzZG9tX3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2pzZG9tL3BhcnNpbmdfdW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NlcmlhbGl6YXRpb24vc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NpbXBsZV9hcGkvc2ltcGxlX2FwaV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3Rva2VuaXplcl9wcm94eS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9sb2NhdGlvbl9pbmZvX21peGluLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL25hbWVkX2VudGl0eV90cmllLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL3ByZXByb2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi90b2tlbml6ZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2FkYXB0ZXJzL2RlZmF1bHQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2FkYXB0ZXJzL2h0bWxwYXJzZXIyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9sb2NhdGlvbl9pbmZvX21peGluLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vb3Blbl9lbGVtZW50X3N0YWNrLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2VzcHJlZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2FzdC1ub2RlLWZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9hc3Qtbm9kZS10eXBlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2NvbW1lbnQtYXR0YWNobWVudC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2ZlYXR1cmVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvbWVzc2FnZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9zdHJpbmctbWFwLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvc3ludGF4LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvdG9rZW4taW5mby5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3hodG1sLWVudGl0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZS9lc3RyYXZlcnNlLmpzIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvcGFja2FnZS5qc29uIiwiaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3VDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzN3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDLzhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzc1S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3owQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0Jztcbi8vIGpzaGludCAtVzA3OVxudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZSB8fCByZXF1aXJlKCdlczYtcHJvbWlzZScpLlByb21pc2U7XG4vLyBqc2hpbnQgK1cwNzlcblxudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbnZhciBkb2NzID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvZG9jcycpO1xudmFyIEZpbGVMb2FkZXIgPSByZXF1aXJlKCcuL2xvYWRlci9maWxlLWxvYWRlcicpO1xudmFyIGltcG9ydFBhcnNlID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyk7XG52YXIganNQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2pzLXBhcnNlJyk7XG52YXIgTm9vcFJlc29sdmVyID0gcmVxdWlyZSgnLi9sb2FkZXIvbm9vcC1yZXNvbHZlcicpO1xuXG5mdW5jdGlvbiByZWR1Y2VNZXRhZGF0YShtMSwgbTIpIHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogIG0xLmVsZW1lbnRzLmNvbmNhdChtMi5lbGVtZW50cyksXG4gICAgZmVhdHVyZXM6ICBtMS5mZWF0dXJlcy5jb25jYXQobTIuZmVhdHVyZXMpLFxuICAgIGJlaGF2aW9yczogbTEuYmVoYXZpb3JzLmNvbmNhdChtMi5iZWhhdmlvcnMpLFxuICB9O1xufVxuXG52YXIgRU1QVFlfTUVUQURBVEEgPSB7ZWxlbWVudHM6IFtdLCBmZWF0dXJlczogW10sIGJlaGF2aW9yczogW119O1xuXG4vKipcbiAqIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogZXNwcmVlJ3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gSlNBU1RcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBQYWNrYWdlIG9mIGEgcGFyc2VkIEpTIHNjcmlwdFxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VkSlNcbiAqIEBwcm9wZXJ0eSB7SlNBU1R9IGFzdCBUaGUgc2NyaXB0J3MgQVNUXG4gKiBAcHJvcGVydHkge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IElmIGlubGluZSwgdGhlIHNjcmlwdCdzIGNvbnRhaW5pbmcgdGFnLlxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgcG9seW1lciBlbGVtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGZlYXR1cmUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWF0dXJlRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGJlaGF2aW9yIG1peGluLlxuICogQHR5cGVkZWYge09iamVjdH0gQmVoYXZpb3JEZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhbGwgZmVhdHVyZXMgYW5kIGVsZW1lbnRzIGRlZmluZWQgaW4gb25lIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge0FycmF5PEVsZW1lbnREZXNjcmlwdG9yPn0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gIGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBiZWhhdmlvcnMgVGhlIGJlaGF2aW9ycyBmcm9tIHRoZSBkb2N1bWVudFxuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIG9mIGFuIGVudGlyZSBIVE1MIGRvY3VtZW50LCBpbiBwcm9taXNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuYWx5emVkRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiBUaGUgdXJsIG9mIHRoZSBkb2N1bWVudC5cbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxQYXJzZWRJbXBvcnQ+fSAgaHRtbExvYWRlZCBUaGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mXG4gKiAgICAgdGhlIGRvYy4gVXNlIHRoZSBgYXN0YCBwcm9wZXJ0eSB0byBnZXQgdGhlIGZ1bGwgYHBhcnNlNWAgYXN0XG4gKlxuICogQHByb3BlcnR5IHtQcm9taXNlPEFycmF5PHN0cmluZz4+fSBkZXBzTG9hZGVkIFJlc29sdmVzIHRvIHRoZSBsaXN0IG9mIHRoaXNcbiAqICAgICBEb2N1bWVudCdzIHRyYW5zaXRpdmUgaW1wb3J0IGRlcGVuZGVuY2llc1xuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gZGVwSHJlZnMgVGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxEb2N1bWVudERlc2NyaXB0b3I+fSBtZXRhZGF0YUxvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZlxuICogICAgIHRoaXMgRG9jdW1lbnQncyBpbXBvcnQgZGVwZW5kZW5jaWVzXG4gKi9cblxuLyoqXG4gKiBBIGRhdGFiYXNlIG9mIFBvbHltZXIgbWV0YWRhdGEgZGVmaW5lZCBpbiBIVE1MXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgaHlkcm9seXNpc1xuICogQHBhcmFtICB7Ym9vbGVhbn0gYXR0YWNoQVNUICBJZiB0cnVlLCBhdHRhY2ggYSBwYXJzZTUgY29tcGxpYW50IEFTVFxuICogQHBhcmFtICB7RmlsZUxvYWRlcj19IGxvYWRlciBBbiBvcHRpb25hbCBgRmlsZUxvYWRlcmAgdXNlZCB0byBsb2FkIGV4dGVybmFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1xuICovXG52YXIgQW5hbHl6ZXIgPSBmdW5jdGlvbiBBbmFseXplcihhdHRhY2hBU1QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIpIHtcbiAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbGwgZWxlbWVudHMgdGhlIGBBbmFseXplcmAgaGFzIG1ldGFkYXRhIGZvci5cbiAgICogQG1lbWJlciB7QXJyYXkuPEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogQSB2aWV3IGludG8gYGVsZW1lbnRzYCwga2V5ZWQgYnkgdGFnIG5hbWUuXG4gICAqIEBtZW1iZXIge09iamVjdC48c3RyaW5nLEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHNCeVRhZ05hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIEFQSSBmZWF0dXJlcyBhZGRlZCB0byBgUG9seW1lci5CYXNlYCBlbmNvdW50ZXJlZCBieSB0aGVcbiAgICogYW5hbHl6ZXIuXG4gICAqIEBtZW1iZXIge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZmVhdHVyZXMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MuXG4gICAqXG4gICAqIEBtZW1iZXIge0FycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3JzIGNvbGxlY3RlZCBieSB0aGUgYW5hbHlzaXMgcGFzcyBieSBuYW1lLlxuICAgKlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9yc0J5TmFtZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgYWJzb2x1dGUgcGF0aCwgb2YgRG9jdW1lbnQgbWV0YWRhdGEuXG4gICAqIEBtZW1iZXIge09iamVjdDxzdHJpbmcsQW5hbHl6ZWREb2N1bWVudD59XG4gICAqL1xuICB0aGlzLmh0bWwgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIEhUTUwgZG9jdW1lbnQgQVNUcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBKUyBzY3JpcHQgQVNUcy5cbiAgICpcbiAgICogSWYgdGhlIHBhdGggaXMgYW4gSFRNTCBmaWxlIHdpdGggbXVsdGlwbGUgc2NyaXB0cywgdGhlIGVudHJ5IHdpbGwgYmUgYW4gYXJyYXkgb2Ygc2NyaXB0cy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsQXJyYXk8UGFyc2VkSlM+Pn1cbiAgICovXG4gIHRoaXMucGFyc2VkU2NyaXB0cyA9IHt9O1xuXG4gIFxuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgZG9jdW1lbnQgY29udGVudC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2NvbnRlbnQgPSB7fTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEFuYWx5emVyLmFuYWx6eWVgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2FkT3B0aW9uc1xuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbm9Bbm5vdGF0aW9ucyBXaGV0aGVyIGBhbm5vdGF0ZSgpYCBzaG91bGQgYmUgc2tpcHBlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2xlYW4gV2hldGhlciB0aGUgZ2VuZXJhdGVkIGRlc2NyaXB0b3JzIHNob3VsZCBiZSBjbGVhbmVkXG4gKiAgICAgb2YgcmVkdW5kYW50IGRhdGEuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IGZpbHRlciBBIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0XG4gKiAgICAgaW5kaWNhdGVzIHdoaWNoIGZpbGVzIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBsb2FkZXIuIEJ5IGRlZmF1bHQgYWxsXG4gKiAgICAgZmlsZXMgbm90IGxvY2F0ZWQgdW5kZXIgdGhlIGRpcm5hbWUgb2YgYGhyZWZgIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIFNob3J0aGFuZCBmb3IgdHJhbnNpdGl2ZWx5IGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcgYWxsIGltcG9ydHMgYmVnaW5uaW5nIGF0XG4gKiBgaHJlZmAuXG4gKlxuICogSW4gb3JkZXIgdG8gcHJvcGVybHkgZmlsdGVyIHBhdGhzLCBgaHJlZmAgX211c3RfIGJlIGFuIGFic29sdXRlIFVSSS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBUaGUgcm9vdCBpbXBvcnQgdG8gYmVnaW4gbG9hZGluZyBmcm9tLlxuICogQHBhcmFtIHtMb2FkT3B0aW9ucz19IG9wdGlvbnMgQW55IGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPEFuYWx5emVyPn0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYGhyZWZgIGFuZCBpdHNcbiAqICAgICBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGxvYWRlZCBhbmQgYW5hbHl6ZWQuXG4gKi9cbkFuYWx5emVyLmFuYWx5emUgPSBmdW5jdGlvbiBhbmFseXplKGhyZWYsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXIgfHwgX2RlZmF1bHRGaWx0ZXIoaHJlZik7XG5cbiAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCk7XG4gIHZhciBQcmltYXJ5UmVzb2x2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci9mcy1yZXNvbHZlcicpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyL3hoci1yZXNvbHZlcicpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IFByaW1hcnlSZXNvbHZlcihvcHRpb25zKSk7XG4gIGxvYWRlci5hZGRSZXNvbHZlcihuZXcgTm9vcFJlc29sdmVyKHt0ZXN0OiBvcHRpb25zLmZpbHRlcn0pKTtcblxuICB2YXIgYW5hbHl6ZXIgPSBuZXcgdGhpcyhudWxsLCBsb2FkZXIpO1xuICByZXR1cm4gYW5hbHl6ZXIubWV0YWRhdGFUcmVlKGhyZWYpLnRoZW4oZnVuY3Rpb24ocm9vdCkge1xuICAgIGlmICghb3B0aW9ucy5ub0Fubm90YXRpb25zKSB7XG4gICAgICBhbmFseXplci5hbm5vdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgYW5hbHl6ZXIuY2xlYW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhbmFseXplcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWZcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIF9kZWZhdWx0RmlsdGVyKGhyZWYpIHtcbiAgLy8gRXZlcnl0aGluZyB1cCB0byB0aGUgbGFzdCBgL2Agb3IgYFxcYC5cbiAgdmFyIGJhc2UgPSBocmVmLm1hdGNoKC9eKC4qPylbXlxcL1xcXFxdKiQvKVsxXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHVyaSkge1xuICAgIHJldHVybiB1cmkuaW5kZXhPZihiYXNlKSAhPT0gMDtcbiAgfTtcbn1cblxuQW5hbHl6ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QoaHJlZikudGhlbihmdW5jdGlvbihjb250ZW50KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fY29udGVudFtocmVmXSA9IGNvbnRlbnQ7XG4gICAgICAgIHJlc29sdmUodGhpcy5fcGFyc2VIVE1MKGNvbnRlbnQsIGhyZWYpKTtcbiAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gICAgfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlcnIpe1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHByb2Nlc3NpbmcgZG9jdW1lbnQgYXQgXCIgKyBocmVmKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBgQW5hbHl6ZWREb2N1bWVudGAgcmVwcmVzZW50aW5nIHRoZSBwcm92aWRlZCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge3N0cmluZ30gaHRtbEltcG9ydCBSYXcgdGV4dCBvZiBhbiBIVE1MIGRvY3VtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIGRvY3VtZW50J3MgVVJMLlxuICogQHJldHVybiB7QW5hbHl6ZWREb2N1bWVudH0gICAgICAgQW4gIGBBbmFseXplZERvY3VtZW50YFxuICovXG5BbmFseXplci5wcm90b3R5cGUuX3BhcnNlSFRNTCA9IGZ1bmN0aW9uIF9wYXJzZUhUTUwoaHRtbEltcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZikge1xuICBpZiAoaHJlZiBpbiB0aGlzLmh0bWwpIHtcbiAgICByZXR1cm4gdGhpcy5odG1sW2hyZWZdO1xuICB9XG4gIHZhciBkZXBzTG9hZGVkID0gW107XG4gIHZhciBkZXBIcmVmcyA9IFtdO1xuICB2YXIgbWV0YWRhdGFMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB2YXIgcGFyc2VkO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IGltcG9ydFBhcnNlKGh0bWxJbXBvcnQsIGhyZWYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIScpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICB2YXIgaHRtbExvYWRlZCA9IFByb21pc2UucmVzb2x2ZShwYXJzZWQpO1xuICBpZiAocGFyc2VkLnNjcmlwdCkge1xuICAgIG1ldGFkYXRhTG9hZGVkID0gdGhpcy5fcHJvY2Vzc1NjcmlwdHMocGFyc2VkLnNjcmlwdCwgaHJlZik7XG4gIH1cbiAgdmFyIGNvbW1lbnRUZXh0ID0gcGFyc2VkLmNvbW1lbnQubWFwKGZ1bmN0aW9uKGNvbW1lbnQpe1xuICAgIHJldHVybiBkb201LmdldFRleHRDb250ZW50KGNvbW1lbnQpO1xuICB9KTtcbiAgdmFyIHBzZXVkb0VsZW1lbnRzID0gZG9jcy5wYXJzZVBzZXVkb0VsZW1lbnRzKGNvbW1lbnRUZXh0KTtcbiAgcHNldWRvRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KXtcbiAgICBlbGVtZW50LmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gIH0uYmluZCh0aGlzKSk7XG4gIG1ldGFkYXRhTG9hZGVkID0gbWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSl7XG4gICAgdmFyIG1ldGFkYXRhRW50cnkgPSB7XG4gICAgICBlbGVtZW50czogcHNldWRvRWxlbWVudHMsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBiZWhhdmlvcnM6IFtdXG4gICAgfTtcbiAgICByZXR1cm4gW21ldGFkYXRhLCBtZXRhZGF0YUVudHJ5XS5yZWR1Y2UocmVkdWNlTWV0YWRhdGEpO1xuICB9KTtcbiAgZGVwc0xvYWRlZC5wdXNoKG1ldGFkYXRhTG9hZGVkKTtcblxuXG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciBiYXNlVXJpID0gaHJlZjtcbiAgICBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIk9ubHkgb25lIGJhc2UgdGFnIHBlciBkb2N1bWVudCFcIik7XG4gICAgICB0aHJvdyBcIk11bHRpcGxlIGJhc2UgdGFncyBpbiBcIiArIGhyZWY7XG4gICAgfSBlbHNlIGlmIChwYXJzZWQuYmFzZS5sZW5ndGggPT0gMSkge1xuICAgICAgdmFyIGJhc2VIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUocGFyc2VkLmJhc2VbMF0sIFwiaHJlZlwiKTtcbiAgICAgIGlmIChiYXNlSHJlZikge1xuICAgICAgICBiYXNlSHJlZiA9IGJhc2VIcmVmICsgXCIvXCI7XG4gICAgICAgIGJhc2VVcmkgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBiYXNlSHJlZik7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlZC5pbXBvcnQuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7XG4gICAgICB2YXIgbGlua3VybCA9IGRvbTUuZ2V0QXR0cmlidXRlKGxpbmssICdocmVmJyk7XG4gICAgICBpZiAobGlua3VybCkge1xuICAgICAgICB2YXIgcmVzb2x2ZWRVcmwgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBsaW5rdXJsKTtcbiAgICAgICAgZGVwSHJlZnMucHVzaChyZXNvbHZlZFVybCk7XG4gICAgICAgIGRlcHNMb2FkZWQucHVzaCh0aGlzLl9kZXBlbmRlbmNpZXNMb2FkZWRGb3IocmVzb2x2ZWRVcmwsIGhyZWYpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHBhcnNlZC5zdHlsZS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlRWxlbWVudCkge1xuICAgICAgaWYgKHBvbHltZXJFeHRlcm5hbFN0eWxlKHN0eWxlRWxlbWVudCkpIHtcbiAgICAgICAgdmFyIHN0eWxlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHN0eWxlRWxlbWVudCwgJ2hyZWYnKTtcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICBzdHlsZUhyZWYgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBzdHlsZUhyZWYpO1xuICAgICAgICAgIGRlcHNMb2FkZWQucHVzaCh0aGlzLmxvYWRlci5yZXF1ZXN0KHN0eWxlSHJlZikudGhlbihmdW5jdGlvbihjb250ZW50KXtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRbc3R5bGVIcmVmXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgfS5iaW5kKHRoaXMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICB9XG4gIGRlcHNMb2FkZWQgPSBQcm9taXNlLmFsbChkZXBzTG9hZGVkKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtyZXR1cm4gZGVwSHJlZnM7fSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikge3Rocm93IGVycjt9KTtcbiAgdGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0gPSBwYXJzZWQuYXN0O1xuICB0aGlzLmh0bWxbaHJlZl0gPSB7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgaHRtbExvYWRlZDogaHRtbExvYWRlZCxcbiAgICAgIG1ldGFkYXRhTG9hZGVkOiBtZXRhZGF0YUxvYWRlZCxcbiAgICAgIGRlcEhyZWZzOiBkZXBIcmVmcyxcbiAgICAgIGRlcHNMb2FkZWQ6IGRlcHNMb2FkZWRcbiAgfTtcbiAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdHMgPSBmdW5jdGlvbiBfcHJvY2Vzc1NjcmlwdHMoc2NyaXB0cywgaHJlZikge1xuICB2YXIgc2NyaXB0UHJvbWlzZXMgPSBbXTtcbiAgc2NyaXB0cy5mb3JFYWNoKGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHNjcmlwdFByb21pc2VzLnB1c2godGhpcy5fcHJvY2Vzc1NjcmlwdChzY3JpcHQsIGhyZWYpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHNjcmlwdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhTGlzdCkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3QucmVkdWNlKHJlZHVjZU1ldGFkYXRhLCBFTVBUWV9NRVRBREFUQSk7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9wcm9jZXNzU2NyaXB0ID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSB7XG4gIHZhciBzcmMgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgdmFyIHBhcnNlZEpzO1xuICBpZiAoIXNyYykge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRKcyA9IGpzUGFyc2UoKHNjcmlwdC5jaGlsZE5vZGVzLmxlbmd0aCkgPyBzY3JpcHQuY2hpbGROb2Rlc1swXS52YWx1ZSA6ICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgbGluZSBudW1iZXIgZm9yIHRoZSBlcnJvci5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2wgPSAwO1xuICAgICAgaWYgKHNjcmlwdC5fX293bmVyRG9jdW1lbnQgJiYgc2NyaXB0Ll9fb3duZXJEb2N1bWVudCA9PSBocmVmKSB7XG4gICAgICAgIGxpbmUgPSBzY3JpcHQuX19sb2NhdGlvbkRldGFpbC5saW5lIC0gMTtcbiAgICAgICAgY29sID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICB9XG4gICAgICBsaW5lICs9IGVyci5saW5lTnVtYmVyO1xuICAgICAgY29sICs9IGVyci5jb2x1bW47XG4gICAgICB2YXIgbWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBzY3JpcHQgaW4gXCIgKyBocmVmICsgXCIgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2w7XG4gICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBlcnIuZGVzY3JpcHRpb247XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmVsZW1lbnRzKSB7XG4gICAgICBwYXJzZWRKcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgICAgICBlbGVtZW50LmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5pcyBpbiB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBkdXBsaWNhdGUgZWxlbWVudCBkZWZpbml0aW9uOiAnICsgZWxlbWVudC5pcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5mZWF0dXJlcykge1xuICAgICAgcGFyc2VkSnMuZmVhdHVyZXMuZm9yRWFjaChmdW5jdGlvbihmZWF0dXJlKXtcbiAgICAgICAgZmVhdHVyZS5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIGZlYXR1cmUuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuY29uY2F0KHBhcnNlZEpzLmZlYXR1cmVzKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmJlaGF2aW9ycykge1xuICAgICAgcGFyc2VkSnMuYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgICAgICBiZWhhdmlvci5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLmlzXSA9IGJlaGF2aW9yO1xuICAgICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5zeW1ib2xdID0gYmVoYXZpb3I7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5iZWhhdmlvcnMgPSB0aGlzLmJlaGF2aW9ycy5jb25jYXQocGFyc2VkSnMuYmVoYXZpb3JzKTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcnNlZFNjcmlwdHMsIGhyZWYpKSB7XG4gICAgICB0aGlzLnBhcnNlZFNjcmlwdHNbaHJlZl0gPSBbXTtcbiAgICB9XG4gICAgdmFyIHNjcmlwdEVsZW1lbnQ7XG4gICAgaWYgKHNjcmlwdC5fX293bmVyRG9jdW1lbnQgJiYgc2NyaXB0Ll9fb3duZXJEb2N1bWVudCA9PSBocmVmKSB7XG4gICAgICBzY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgIH1cbiAgICB0aGlzLnBhcnNlZFNjcmlwdHNbaHJlZl0ucHVzaCh7XG4gICAgICBhc3Q6IHBhcnNlZEpzLnBhcnNlZFNjcmlwdCxcbiAgICAgIHNjcmlwdEVsZW1lbnQ6IHNjcmlwdEVsZW1lbnRcbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkSnM7XG4gIH1cbiAgaWYgKHRoaXMubG9hZGVyKSB7XG4gICAgdmFyIHJlc29sdmVkU3JjID0gdXJsLnJlc29sdmUoaHJlZiwgc3JjKTtcbiAgICByZXR1cm4gdGhpcy5sb2FkZXIucmVxdWVzdChyZXNvbHZlZFNyYykudGhlbihmdW5jdGlvbihjb250ZW50KSB7XG4gICAgICB0aGlzLl9jb250ZW50W3Jlc29sdmVkU3JjXSA9IGNvbnRlbnQ7XG4gICAgICB2YXIgcmVzb2x2ZWRTY3JpcHQgPSBPYmplY3QuY3JlYXRlKHNjcmlwdCk7XG4gICAgICByZXNvbHZlZFNjcmlwdC5jaGlsZE5vZGVzID0gW3t2YWx1ZTogY29udGVudH1dO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuYXR0cnMgPSByZXNvbHZlZFNjcmlwdC5hdHRycy5zbGljZSgpO1xuICAgICAgZG9tNS5yZW1vdmVBdHRyaWJ1dGUocmVzb2x2ZWRTY3JpcHQsICdzcmMnKTtcbiAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2NyaXB0KHJlc29sdmVkU2NyaXB0LCByZXNvbHZlZFNyYyk7XG4gICAgfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShFTVBUWV9NRVRBREFUQSk7XG4gIH1cbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yID0gZnVuY3Rpb24gX2RlcGVuZGVuY2llc0xvYWRlZEZvcihocmVmLCByb290KSB7XG4gIHZhciBmb3VuZCA9IHt9O1xuICBpZiAocm9vdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmRbcm9vdF0gPSB0cnVlO1xuICB9XG4gIHJldHVybiB0aGlzLl9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQpLnRoZW4oZnVuY3Rpb24oZGVwcykge1xuICAgIHZhciBkZXBNZXRhZGF0YUxvYWRlZCA9IFtdO1xuICAgIHZhciBkZXBQcm9taXNlcyA9IGRlcHMubWFwKGZ1bmN0aW9uKGRlcEhyZWYpe1xuICAgICAgcmV0dXJuIHRoaXMubG9hZChkZXBIcmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZDtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcFByb21pc2VzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogTGlzdCBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9jdW1lbnQgYXQgYGhyZWZgLlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICBocmVmICAgICAgVGhlIGhyZWYgdG8gZ2V0IGRlcGVuZGVuY2llcyBmb3IuXG4gKiBAcGFyYW0gIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGZvdW5kICAgICBBbiBvYmplY3Qga2V5ZWQgYnkgVVJMIG9mIHRoZVxuICogICAgIGFscmVhZHkgcmVzb2x2ZWQgZGVwZW5kZW5jaWVzLlxuICogQHBhcmFtICB7Ym9vbGVhbj19ICAgICAgICAgICAgICAgIHRyYW5zaXRpdmUgV2hldGhlciB0byBsb2FkIHRyYW5zaXRpdmVcbiAqICAgICBkZXBlbmRlbmNpZXMuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gIEEgbGlzdCBvZiBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzLlxuICovXG5BbmFseXplci5wcm90b3R5cGUuX2dldERlcGVuZGVuY2llcyA9IGZ1bmN0aW9uIF9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQsIHRyYW5zaXRpdmUpIHtcbiAgaWYgKGZvdW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3VuZCA9IHt9O1xuICAgIGZvdW5kW2hyZWZdID0gdHJ1ZTtcbiAgfVxuICBpZiAodHJhbnNpdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNpdGl2ZSA9IHRydWU7XG4gIH1cbiAgdmFyIGRlcHMgPSBbXTtcbiAgcmV0dXJuIHRoaXMubG9hZChocmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgdmFyIHRyYW5zaXRpdmVEZXBzID0gW107XG4gICAgaHRtbE1vbm9tZXIuZGVwSHJlZnMuZm9yRWFjaChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIGlmIChmb3VuZFtkZXBIcmVmXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZXBzLnB1c2goZGVwSHJlZik7XG4gICAgICBmb3VuZFtkZXBIcmVmXSA9IHRydWU7XG4gICAgICBpZiAodHJhbnNpdGl2ZSkge1xuICAgICAgICB0cmFuc2l0aXZlRGVwcy5wdXNoKHRoaXMuX2dldERlcGVuZGVuY2llcyhkZXBIcmVmLCBmb3VuZCkpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRyYW5zaXRpdmVEZXBzKTtcbiAgfS5iaW5kKHRoaXMpKS50aGVuKGZ1bmN0aW9uKHRyYW5zaXRpdmVEZXBzKSB7XG4gICAgdmFyIGFsbGRlcHMgPSB0cmFuc2l0aXZlRGVwcy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKS5jb25jYXQoZGVwcyk7XG4gICAgcmV0dXJuIGFsbGRlcHM7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gbWF0Y2hlc0RvY3VtZW50Rm9sZGVyKGRlc2NyaXB0b3IsIGhyZWYpIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmNvbnRlbnRIcmVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkZXNjcmlwdG9yRG9jID0gdXJsLnBhcnNlKGRlc2NyaXB0b3IuY29udGVudEhyZWYpO1xuICBpZiAoIWRlc2NyaXB0b3JEb2MgfHwgIWRlc2NyaXB0b3JEb2MucGF0aG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNlYXJjaERvYyA9IHVybC5wYXJzZShocmVmKTtcbiAgaWYgKCFzZWFyY2hEb2MgfHwgIXNlYXJjaERvYy5wYXRobmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgc2VhcmNoUGF0aCA9IHNlYXJjaERvYy5wYXRobmFtZTtcbiAgdmFyIGxhc3RTbGFzaCA9IHNlYXJjaFBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuICBpZiAobGFzdFNsYXNoID4gMCkge1xuICAgIHNlYXJjaFBhdGggPSBzZWFyY2hQYXRoLnNsaWNlKDAsIGxhc3RTbGFzaCk7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3JEb2MucGF0aG5hbWUuaW5kZXhPZihzZWFyY2hQYXRoKSA9PT0gMDtcbn1cblxuQW5hbHl6ZXIucHJvdG90eXBlLmVsZW1lbnRzRm9yRm9sZGVyID0gZnVuY3Rpb24gZWxlbWVudHNGb3JGb2xkZXIoaHJlZikge1xuICByZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgcmV0dXJuIG1hdGNoZXNEb2N1bWVudEZvbGRlcihlbGVtZW50LCBocmVmKTtcbiAgfSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuYmVoYXZpb3JzRm9yRm9sZGVyID0gZnVuY3Rpb24gYmVoYXZpb3JzRm9yRm9sZGVyKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMuYmVoYXZpb3JzLmZpbHRlcihmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgcmV0dXJuIG1hdGNoZXNEb2N1bWVudEZvbGRlcihiZWhhdmlvciwgaHJlZik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUE9KTyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW1wb3J0XG4gKiB0cmVlLCBpbiBhIGZvcm1hdCB0aGF0IG1haW50YWlucyB0aGUgb3JkZXJpbmcgb2YgdGhlIEhUTUwgaW1wb3J0cyBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgdGhlIGltcG9ydCB0byBnZXQgbWV0YWRhdGEgZm9yLlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm1ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIG1ldGFkYXRhVHJlZShocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihtb25vbWVyKXtcbiAgICB2YXIgbG9hZGVkSHJlZnMgPSB7fTtcbiAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVHJlZShtb25vbWVyLCBsb2FkZWRIcmVmcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX21ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIF9tZXRhZGF0YVRyZWUoaHRtbE1vbm9tZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkSHJlZnMpIHtcbiAgaWYgKGxvYWRlZEhyZWZzID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2FkZWRIcmVmcyA9IHt9O1xuICB9XG4gIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZC50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEgPSB7XG4gICAgICBlbGVtZW50czogbWV0YWRhdGEuZWxlbWVudHMsXG4gICAgICBmZWF0dXJlczogbWV0YWRhdGEuZmVhdHVyZXMsXG4gICAgICBocmVmOiBodG1sTW9ub21lci5ocmVmXG4gICAgfTtcbiAgICByZXR1cm4gaHRtbE1vbm9tZXIuZGVwc0xvYWRlZC50aGVuKGZ1bmN0aW9uKGhyZWZzKSB7XG4gICAgICB2YXIgZGVwTWV0YWRhdGEgPSBbXTtcbiAgICAgIGhyZWZzLmZvckVhY2goZnVuY3Rpb24oaHJlZikge1xuICAgICAgICB2YXIgbWV0YWRhdGFQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICBpZiAoZGVwTWV0YWRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IGRlcE1ldGFkYXRhW2RlcE1ldGFkYXRhLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IG1ldGFkYXRhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghbG9hZGVkSHJlZnNbaHJlZl0pIHtcbiAgICAgICAgICAgIGxvYWRlZEhyZWZzW2hyZWZdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUodGhpcy5odG1sW2hyZWZdLCBsb2FkZWRIcmVmcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgZGVwTWV0YWRhdGEucHVzaChtZXRhZGF0YVByb21pc2UpO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBNZXRhZGF0YSkudGhlbihmdW5jdGlvbihpbXBvcnRNZXRhZGF0YSkge1xuICAgICAgICBtZXRhZGF0YS5pbXBvcnRzID0gaW1wb3J0TWV0YWRhdGE7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5odG1sTG9hZGVkLnRoZW4oZnVuY3Rpb24ocGFyc2VkSHRtbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmh0bWwgPSBwYXJzZWRIdG1sO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgICAgICAgbWV0YWRhdGEuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgIGF0dGFjaERvbU1vZHVsZShwYXJzZWRIdG1sLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoaW5nSW1wb3J0KGltcG9ydEVsZW1lbnQpIHtcbiAgdmFyIG1hdGNoZXNUYWcgPSBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZShpbXBvcnRFbGVtZW50LnRhZ05hbWUpO1xuICB2YXIgbWF0Y2hlc0hyZWYgPSBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdocmVmJywgZG9tNS5nZXRBdHRyaWJ1dGUoaW1wb3J0RWxlbWVudCwgJ2hyZWYnKSk7XG4gIHZhciBtYXRjaGVzUmVsID0gZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgZG9tNS5nZXRBdHRyaWJ1dGUoaW1wb3J0RWxlbWVudCwgJ3JlbCcpKTtcbiAgcmV0dXJuIGRvbTUucHJlZGljYXRlcy5BTkQobWF0Y2hlc1RhZywgbWF0Y2hlc0hyZWYsIG1hdGNoZXNSZWwpO1xufVxuXG4vLyBUT0RPKGFqbyk6IFJlZmFjdG9yIG91dCBvZiB2dWxjYW5pemUgaW50byBkb201LlxudmFyIHBvbHltZXJFeHRlcm5hbFN0eWxlID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4pO1xuXG52YXIgZXh0ZXJuYWxTY3JpcHQgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnc2NyaXB0JyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyKCdzcmMnKVxuKTtcblxudmFyIGlzSHRtbEltcG9ydE5vZGUgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnbGluaycpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIGRvbTUucHJlZGljYXRlcy5OT1QoXG4gICAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuICApXG4pO1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZVN0eWxlcyA9IGZ1bmN0aW9uIF9pbmxpbmVTdHlsZXMoYXN0LCBocmVmKSB7XG4gIHZhciBjc3NMaW5rcyA9IGRvbTUucXVlcnlBbGwoYXN0LCBwb2x5bWVyRXh0ZXJuYWxTdHlsZSk7XG4gIGNzc0xpbmtzLmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgIHZhciBsaW5rSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKGxpbmssICdocmVmJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIGxpbmtIcmVmKTtcbiAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnRbdXJpXTtcbiAgICB2YXIgc3R5bGUgPSBkb201LmNvbnN0cnVjdG9ycy5lbGVtZW50KCdzdHlsZScpO1xuICAgIGRvbTUuc2V0VGV4dENvbnRlbnQoc3R5bGUsICdcXG4nICsgY29udGVudCArICdcXG4nKTtcbiAgICBkb201LnJlcGxhY2UobGluaywgc3R5bGUpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gY3NzTGlua3MubGVuZ3RoID4gMDtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lU2NyaXB0cyA9IGZ1bmN0aW9uIF9pbmxpbmVTY3JpcHRzKGFzdCwgaHJlZikge1xuICB2YXIgc2NyaXB0cyA9IGRvbTUucXVlcnlBbGwoYXN0LCBleHRlcm5hbFNjcmlwdCk7XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICB2YXIgc2NyaXB0SHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHNjcmlwdCwgJ3NyYycpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBzY3JpcHRIcmVmKTtcbiAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnRbdXJpXTtcbiAgICB2YXIgaW5saW5lZCA9IGRvbTUuY29uc3RydWN0b3JzLmVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGRvbTUuc2V0VGV4dENvbnRlbnQoaW5saW5lZCwgJ1xcbicgKyBjb250ZW50ICsgJ1xcbicpO1xuICAgIGRvbTUucmVwbGFjZShzY3JpcHQsIGlubGluZWQpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gc2NyaXB0cy5sZW5ndGggPiAwO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVJbXBvcnRzID0gZnVuY3Rpb24gX2lubGluZUltcG9ydHMoYXN0LCBocmVmLCBsb2FkZWQpIHtcbiAgdmFyIGltcG9ydHMgPSBkb201LnF1ZXJ5QWxsKGFzdCwgaXNIdG1sSW1wb3J0Tm9kZSk7XG4gIGltcG9ydHMuZm9yRWFjaChmdW5jdGlvbihodG1sSW1wb3J0KSB7XG4gICAgdmFyIGltcG9ydEhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShodG1sSW1wb3J0LCAnaHJlZicpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBpbXBvcnRIcmVmKTtcbiAgICBpZiAobG9hZGVkW3VyaV0pIHtcbiAgICAgIGRvbTUucmVtb3ZlKGh0bWxJbXBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0TG9hZGVkQXN0KHVyaSwgbG9hZGVkKTtcbiAgICBkb201LnJlcGxhY2UoaHRtbEltcG9ydCwgY29udGVudCk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBpbXBvcnRzLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byBhIGZvcm0gb2YgdGhlIEFTVCB3aXRoIGFsbCBsaW5rcyByZXBsYWNlZFxuICogd2l0aCB0aGUgZG9jdW1lbnQgdGhleSBsaW5rIHRvLiAuY3NzIGFuZCAuc2NyaXB0IGZpbGVzIGJlY29tZSAmbHQ7c3R5bGUmZ3Q7IGFuZFxuICogJmx0O3NjcmlwdCZndDssIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBUaGUgZWxlbWVudHMgaW4gdGhlIGxvYWRlZCBkb2N1bWVudCBhcmUgdW5tb2RpZmllZCBmcm9tIHRoZWlyIG9yaWdpbmFsXG4gKiBkb2N1bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIGRvY3VtZW50IHRvIGxvYWQuXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLGJvb2xlYW4+PX0gbG9hZGVkIEFuIG9iamVjdCBrZXllZCBieSBhbHJlYWR5IGxvYWRlZCBkb2N1bWVudHMuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxEb2N1bWVudEFTVD59XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5nZXRMb2FkZWRBc3QgPSBmdW5jdGlvbiBnZXRMb2FkZWRBc3QoaHJlZiwgbG9hZGVkKSB7XG4gIGlmICghbG9hZGVkKSB7XG4gICAgbG9hZGVkID0ge307XG4gIH1cbiAgbG9hZGVkW2hyZWZdID0gdHJ1ZTtcbiAgdmFyIHBhcnNlZERvY3VtZW50ID0gdGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl07XG4gIHZhciBhbmFseXplZERvY3VtZW50ID0gdGhpcy5odG1sW2hyZWZdO1xuICB2YXIgYXN0Q29weSA9IGRvbTUucGFyc2UoZG9tNS5zZXJpYWxpemUocGFyc2VkRG9jdW1lbnQpKTtcbiAgLy8gV2hlbmV2ZXIgd2UgaW5saW5lIHNvbWV0aGluZywgcmVzZXQgaW5saW5lZCB0byB0cnVlIHRvIGtub3cgdGhhdCBhbm9hdGhlclxuICAvLyBpbmxpbmluZyBwYXNzIGlzIG5lZWRlZDtcbiAgdGhpcy5faW5saW5lU3R5bGVzKGFzdENvcHksIGhyZWYpO1xuICB0aGlzLl9pbmxpbmVTY3JpcHRzKGFzdENvcHksIGhyZWYpO1xuICB0aGlzLl9pbmxpbmVJbXBvcnRzKGFzdENvcHksIGhyZWYsIGxvYWRlZCk7XG4gIHJldHVybiBhc3RDb3B5O1xufTtcblxuLyoqXG4gKiBDYWxscyBgZG9tNS5ub2RlV2Fsa0FsbGAgb24gZWFjaCBkb2N1bWVudCB0aGF0IGBBbmF5emxlcmAgaGFzIGxhb2RlZC5cbiAqIEBwYXJhbSAge09iamVjdH0gcHJlZGljYXRlIEEgZG9tNSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5ub2RlV2Fsa0RvY3VtZW50cyA9IGZ1bmN0aW9uIG5vZGVXYWxrRG9jdW1lbnRzKHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBocmVmIGluIHRoaXMucGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG1hdGNoID0gZG9tNS5ub2RlV2Fsayh0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSwgcHJlZGljYXRlKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENhbGxzIGBkb201Lm5vZGVXYWxrQWxsYCBvbiBlYWNoIGRvY3VtZW50IHRoYXQgYEFuYXl6bGVyYCBoYXMgbGFvZGVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwcmVkaWNhdGUgQSBkb201IHByZWRpY2F0ZS5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm5vZGVXYWxrQWxsRG9jdW1lbnRzID0gZnVuY3Rpb24gbm9kZVdhbGtEb2N1bWVudHMocHJlZGljYXRlKSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIGZvciAodmFyIGhyZWYgaW4gdGhpcy5wYXJzZWREb2N1bWVudHMpIHtcbiAgICB2YXIgbmV3Tm9kZXMgPSBkb201Lm5vZGVXYWxrQWxsKHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdLCBwcmVkaWNhdGUpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChuZXdOb2Rlcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKiogQW5ub3RhdGVzIGFsbCBsb2FkZWQgbWV0YWRhdGEgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbi4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5hbm5vdGF0ZSA9IGZ1bmN0aW9uIGFubm90YXRlKCkge1xuICBpZiAodGhpcy5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGZlYXR1cmVFbCA9IGRvY3MuZmVhdHVyZUVsZW1lbnQodGhpcy5mZWF0dXJlcyk7XG4gICAgdGhpcy5lbGVtZW50cy51bnNoaWZ0KGZlYXR1cmVFbCk7XG4gICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtmZWF0dXJlRWwuaXNdID0gZmVhdHVyZUVsO1xuICB9XG4gIHZhciBiZWhhdmlvcnNCeU5hbWUgPSB0aGlzLmJlaGF2aW9yc0J5TmFtZTtcbiAgdmFyIGVsZW1lbnRIZWxwZXIgPSBmdW5jdGlvbihkZXNjcmlwdG9yKXtcbiAgICBkb2NzLmFubm90YXRlRWxlbWVudChkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpO1xuICB9O1xuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudEhlbHBlcik7XG4gIHRoaXMuYmVoYXZpb3JzLmZvckVhY2goZWxlbWVudEhlbHBlcik7IC8vIFNhbWUgc2hhcGUuXG4gIHRoaXMuYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIGlmIChiZWhhdmlvci5pcyAhPT0gYmVoYXZpb3Iuc3ltYm9sICYmIGJlaGF2aW9yLnN5bWJvbCkge1xuICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3Iuc3ltYm9sXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5mdW5jdGlvbiBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSW1wb3J0LCBlbGVtZW50KSB7XG4gIHZhciBkb21Nb2R1bGVzID0gcGFyc2VkSW1wb3J0Wydkb20tbW9kdWxlJ107XG4gIGZvciAodmFyIGkgPSAwLCBkb21Nb2R1bGU7IGkgPCBkb21Nb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZG9tTW9kdWxlID0gZG9tTW9kdWxlc1tpXTtcbiAgICBpZiAoZG9tNS5nZXRBdHRyaWJ1dGUoZG9tTW9kdWxlLCAnaWQnKSA9PT0gZWxlbWVudC5pcykge1xuICAgICAgZWxlbWVudC5kb21Nb2R1bGUgPSBkb21Nb2R1bGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZW1vdmVzIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbGxlY3RlZCBkZXNjcmlwdG9ycy4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKCkge1xuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZG9jcy5jbGVhbkVsZW1lbnQpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbmFseXplcjtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbXhwWWk5aGJtRnNlWHBsY2k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFQnNhV05sYm5ObFhHNGdLaUJEYjNCNWNtbG5hSFFnS0dNcElESXdNVFVnVkdobElGQnZiSGx0WlhJZ1VISnZhbVZqZENCQmRYUm9iM0p6TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ29nVkdocGN5QmpiMlJsSUcxaGVTQnZibXg1SUdKbElIVnpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDQnpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR0YwSUdoMGRIQTZMeTl3YjJ4NWJXVnlMbWRwZEdoMVlpNXBieTlNU1VORlRsTkZMblI0ZEZ4dUlDb2dWR2hsSUdOdmJYQnNaWFJsSUhObGRDQnZaaUJoZFhSb2IzSnpJRzFoZVNCaVpTQm1iM1Z1WkNCaGRDQm9kSFJ3T2k4dmNHOXNlVzFsY2k1bmFYUm9kV0l1YVc4dlFWVlVTRTlTVXk1MGVIUmNiaUFxSUZSb1pTQmpiMjF3YkdWMFpTQnpaWFFnYjJZZ1kyOXVkSEpwWW5WMGIzSnpJRzFoZVNCaVpTQm1iM1Z1WkNCaGRDQm9kSFJ3T2k4dmNHOXNlVzFsY2k1bmFYUm9kV0l1YVc4dlEwOU9WRkpKUWxWVVQxSlRMblI0ZEZ4dUlDb2dRMjlrWlNCa2FYTjBjbWxpZFhSbFpDQmllU0JIYjI5bmJHVWdZWE1nY0dGeWRDQnZaaUIwYUdVZ2NHOXNlVzFsY2lCd2NtOXFaV04wSUdseklHRnNjMjljYmlBcUlITjFZbXBsWTNRZ2RHOGdZVzRnWVdSa2FYUnBiMjVoYkNCSlVDQnlhV2RvZEhNZ1ozSmhiblFnWm05MWJtUWdZWFFnYUhSMGNEb3ZMM0J2YkhsdFpYSXVaMmwwYUhWaUxtbHZMMUJCVkVWT1ZGTXVkSGgwWEc0Z0tpOWNiaTh2SUdwemFHbHVkQ0J1YjJSbE9pQjBjblZsWEc0bmRYTmxJSE4wY21samRDYzdYRzR2THlCcWMyaHBiblFnTFZjd056bGNiblpoY2lCUWNtOXRhWE5sSUQwZ1oyeHZZbUZzTGxCeWIyMXBjMlVnZkh3Z2NtVnhkV2x5WlNnblpYTTJMWEJ5YjIxcGMyVW5LUzVRY205dGFYTmxPMXh1THk4Z2FuTm9hVzUwSUN0WE1EYzVYRzVjYm5aaGNpQmtiMjAxSUQwZ2NtVnhkV2x5WlNnblpHOXROU2NwTzF4dWRtRnlJSFZ5YkNBOUlISmxjWFZwY21Vb0ozVnliQ2NwTzF4dVhHNTJZWElnWkc5amN5QTlJSEpsY1hWcGNtVW9KeTR2WVhOMExYVjBhV3h6TDJSdlkzTW5LVHRjYm5aaGNpQkdhV3hsVEc5aFpHVnlJRDBnY21WeGRXbHlaU2duTGk5c2IyRmtaWEl2Wm1sc1pTMXNiMkZrWlhJbktUdGNiblpoY2lCcGJYQnZjblJRWVhKelpTQTlJSEpsY1hWcGNtVW9KeTR2WVhOMExYVjBhV3h6TDJsdGNHOXlkQzF3WVhKelpTY3BPMXh1ZG1GeUlHcHpVR0Z5YzJVZ1BTQnlaWEYxYVhKbEtDY3VMMkZ6ZEMxMWRHbHNjeTlxY3kxd1lYSnpaU2NwTzF4dWRtRnlJRTV2YjNCU1pYTnZiSFpsY2lBOUlISmxjWFZwY21Vb0p5NHZiRzloWkdWeUwyNXZiM0F0Y21WemIyeDJaWEluS1R0Y2JseHVablZ1WTNScGIyNGdjbVZrZFdObFRXVjBZV1JoZEdFb2JURXNJRzB5S1NCN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ1pXeGxiV1Z1ZEhNNklDQnRNUzVsYkdWdFpXNTBjeTVqYjI1allYUW9iVEl1Wld4bGJXVnVkSE1wTEZ4dUlDQWdJR1psWVhSMWNtVnpPaUFnYlRFdVptVmhkSFZ5WlhNdVkyOXVZMkYwS0cweUxtWmxZWFIxY21WektTeGNiaUFnSUNCaVpXaGhkbWx2Y25NNklHMHhMbUpsYUdGMmFXOXljeTVqYjI1allYUW9iVEl1WW1Wb1lYWnBiM0p6S1N4Y2JpQWdmVHRjYm4xY2JseHVkbUZ5SUVWTlVGUlpYMDFGVkVGRVFWUkJJRDBnZTJWc1pXMWxiblJ6T2lCYlhTd2dabVZoZEhWeVpYTTZJRnRkTENCaVpXaGhkbWx2Y25NNklGdGRmVHRjYmx4dUx5b3FYRzRnS2lCUVlYSnpaVFVuY3lCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaElIQmhjbk5sWkNCb2RHMXNJR1J2WTNWdFpXNTBYRzRnS2lCQWRIbHdaV1JsWmlCN1QySnFaV04wZlNCRWIyTjFiV1Z1ZEVGVFZGeHVJQ29nUUcxbGJXSmxjbTltSUdoNVpISnZiSGx6YVhOY2JpQXFMMXh1WEc0dktpcGNiaUFxSUdWemNISmxaU2R6SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUdFZ2NHRnljMlZrSUdoMGJXd2daRzlqZFcxbGJuUmNiaUFxSUVCMGVYQmxaR1ZtSUh0UFltcGxZM1I5SUVwVFFWTlVYRzRnS2lCQWJXVnRZbVZ5YjJZZ2FIbGtjbTlzZVhOcGMxeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1VHRmphMkZuWlNCdlppQmhJSEJoY25ObFpDQktVeUJ6WTNKcGNIUmNiaUFxSUVCMGVYQmxaR1ZtSUh0UFltcGxZM1I5SUZCaGNuTmxaRXBUWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMHBUUVZOVWZTQmhjM1FnVkdobElITmpjbWx3ZENkeklFRlRWRnh1SUNvZ1FIQnliM0JsY25SNUlIdEViMk4xYldWdWRFRlRWSDBnYzJOeWFYQjBSV3hsYldWdWRDQkpaaUJwYm14cGJtVXNJSFJvWlNCelkzSnBjSFFuY3lCamIyNTBZV2x1YVc1bklIUmhaeTVjYmlBcUlFQnRaVzFpWlhKdlppQm9lV1J5YjJ4NWMybHpYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR1VnYldWMFlXUmhkR0VnWm05eUlHRWdjMmx1WjJ4bElIQnZiSGx0WlhJZ1pXeGxiV1Z1ZEZ4dUlDb2dRSFI1Y0dWa1pXWWdlMDlpYW1WamRIMGdSV3hsYldWdWRFUmxjMk55YVhCMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYmx4dUx5b3FYRzRnS2lCVWFHVWdiV1YwWVdSaGRHRWdabTl5SUdFZ1VHOXNlVzFsY2lCbVpXRjBkWEpsTGx4dUlDb2dRSFI1Y0dWa1pXWWdlMDlpYW1WamRIMGdSbVZoZEhWeVpVUmxjMk55YVhCMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYmx4dUx5b3FYRzRnS2lCVWFHVWdiV1YwWVdSaGRHRWdabTl5SUdFZ1VHOXNlVzFsY2lCaVpXaGhkbWx2Y2lCdGFYaHBiaTVjYmlBcUlFQjBlWEJsWkdWbUlIdFBZbXBsWTNSOUlFSmxhR0YyYVc5eVJHVnpZM0pwY0hSdmNseHVJQ29nUUcxbGJXSmxjbTltSUdoNVpISnZiSGx6YVhOY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb1pTQnRaWFJoWkdGMFlTQm1iM0lnWVd4c0lHWmxZWFIxY21WeklHRnVaQ0JsYkdWdFpXNTBjeUJrWldacGJtVmtJR2x1SUc5dVpTQmtiMk4xYldWdWRGeHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnUkc5amRXMWxiblJFWlhOamNtbHdkRzl5WEc0Z0tpQkFiV1Z0WW1WeWIyWWdhSGxrY205c2VYTnBjMXh1SUNvZ1FIQnliM0JsY25SNUlIdEJjbkpoZVR4RmJHVnRaVzUwUkdWelkzSnBjSFJ2Y2o1OUlHVnNaVzFsYm5SeklGUm9aU0JsYkdWdFpXNTBjeUJtY205dElIUm9aU0JrYjJOMWJXVnVkRnh1SUNvZ1FIQnliM0JsY25SNUlIdEJjbkpoZVR4R1pXRjBkWEpsUkdWelkzSnBjSFJ2Y2o1OUlDQm1aV0YwZFhKbGN5QlVhR1VnWm1WaGRIVnlaWE1nWm5KdmJTQjBhR1VnWkc5amRXMWxiblJjYmlBcUlFQndjbTl3WlhKMGVTQjdRWEp5WVhrOFJtVmhkSFZ5WlVSbGMyTnlhWEIwYjNJK2ZTQWdZbVZvWVhacGIzSnpJRlJvWlNCaVpXaGhkbWx2Y25NZ1puSnZiU0IwYUdVZ1pHOWpkVzFsYm5SY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb1pTQnRaWFJoWkdGMFlTQnZaaUJoYmlCbGJuUnBjbVVnU0ZSTlRDQmtiMk4xYldWdWRDd2dhVzRnY0hKdmJXbHpaWE11WEc0Z0tpQkFkSGx3WldSbFppQjdUMkpxWldOMGZTQkJibUZzZVhwbFpFUnZZM1Z0Wlc1MFhHNGdLaUJBYldWdFltVnliMllnYUhsa2NtOXNlWE5wYzF4dUlDb2dRSEJ5YjNCbGNuUjVJSHR6ZEhKcGJtZDlJR2h5WldZZ1ZHaGxJSFZ5YkNCdlppQjBhR1VnWkc5amRXMWxiblF1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMUJ5YjIxcGMyVThVR0Z5YzJWa1NXMXdiM0owUG4wZ0lHaDBiV3hNYjJGa1pXUWdWR2hsSUhCaGNuTmxaQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZabHh1SUNvZ0lDQWdJSFJvWlNCa2IyTXVJRlZ6WlNCMGFHVWdZR0Z6ZEdBZ2NISnZjR1Z5ZEhrZ2RHOGdaMlYwSUhSb1pTQm1kV3hzSUdCd1lYSnpaVFZnSUdGemRGeHVJQ3BjYmlBcUlFQndjbTl3WlhKMGVTQjdVSEp2YldselpUeEJjbkpoZVR4emRISnBibWMrUG4wZ1pHVndjMHh2WVdSbFpDQlNaWE52YkhabGN5QjBieUIwYUdVZ2JHbHpkQ0J2WmlCMGFHbHpYRzRnS2lBZ0lDQWdSRzlqZFcxbGJuUW5jeUIwY21GdWMybDBhWFpsSUdsdGNHOXlkQ0JrWlhCbGJtUmxibU5wWlhOY2JpQXFYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UwRnljbUY1UEhOMGNtbHVaejU5SUdSbGNFaHlaV1p6SUZSb1pTQmthWEpsWTNRZ1pHVndaVzVrWlc1amFXVnpJRzltSUhSb1pTQmtiMk4xYldWdWRDNWNiaUFxWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMUJ5YjIxcGMyVThSRzlqZFcxbGJuUkVaWE5qY21sd2RHOXlQbjBnYldWMFlXUmhkR0ZNYjJGa1pXUWdVbVZ6YjJ4MlpYTWdkRzhnZEdobElHeHBjM1FnYjJaY2JpQXFJQ0FnSUNCMGFHbHpJRVJ2WTNWdFpXNTBKM01nYVcxd2IzSjBJR1JsY0dWdVpHVnVZMmxsYzF4dUlDb3ZYRzVjYmk4cUtseHVJQ29nUVNCa1lYUmhZbUZ6WlNCdlppQlFiMng1YldWeUlHMWxkR0ZrWVhSaElHUmxabWx1WldRZ2FXNGdTRlJOVEZ4dUlDcGNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ29nUUcxbGJXSmxjazltSUdoNVpISnZiSGx6YVhOY2JpQXFJRUJ3WVhKaGJTQWdlMkp2YjJ4bFlXNTlJR0YwZEdGamFFRlRWQ0FnU1dZZ2RISjFaU3dnWVhSMFlXTm9JR0VnY0dGeWMyVTFJR052YlhCc2FXRnVkQ0JCVTFSY2JpQXFJRUJ3WVhKaGJTQWdlMFpwYkdWTWIyRmtaWEk5ZlNCc2IyRmtaWElnUVc0Z2IzQjBhVzl1WVd3Z1lFWnBiR1ZNYjJGa1pYSmdJSFZ6WldRZ2RHOGdiRzloWkNCbGVIUmxjbTVoYkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmRYSmpaWE5jYmlBcUwxeHVkbUZ5SUVGdVlXeDVlbVZ5SUQwZ1puVnVZM1JwYjI0Z1FXNWhiSGw2WlhJb1lYUjBZV05vUVZOVUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR1Z5S1NCN1hHNGdJSFJvYVhNdWJHOWhaR1Z5SUQwZ2JHOWhaR1Z5TzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJCSUd4cGMzUWdiMllnWVd4c0lHVnNaVzFsYm5SeklIUm9aU0JnUVc1aGJIbDZaWEpnSUdoaGN5QnRaWFJoWkdGMFlTQm1iM0l1WEc0Z0lDQXFJRUJ0WlcxaVpYSWdlMEZ5Y21GNUxqeEZiR1Z0Wlc1MFJHVnpZM0pwY0hSdmNqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxtVnNaVzFsYm5SeklEMGdXMTA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUVnZG1sbGR5QnBiblJ2SUdCbGJHVnRaVzUwYzJBc0lHdGxlV1ZrSUdKNUlIUmhaeUJ1WVcxbExseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0UFltcGxZM1F1UEhOMGNtbHVaeXhGYkdWdFpXNTBSR1Z6WTNKcGNIUnZjajU5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbVZzWlcxbGJuUnpRbmxVWVdkT1lXMWxJRDBnZTMwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2JHbHpkQ0J2WmlCQlVFa2dabVZoZEhWeVpYTWdZV1JrWldRZ2RHOGdZRkJ2YkhsdFpYSXVRbUZ6WldBZ1pXNWpiM1Z1ZEdWeVpXUWdZbmtnZEdobFhHNGdJQ0FxSUdGdVlXeDVlbVZ5TGx4dUlDQWdLaUJBYldWdFltVnlJSHRCY25KaGVUeEdaV0YwZFhKbFJHVnpZM0pwY0hSdmNqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxtWmxZWFIxY21WeklEMGdXMTA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCaVpXaGhkbWx2Y25NZ1kyOXNiR1ZqZEdWa0lHSjVJSFJvWlNCaGJtRnNlWE5wY3lCd1lYTnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0QmNuSmhlVHhDWldoaGRtbHZja1JsYzJOeWFYQjBiM0krZlZ4dUlDQWdLaTljYmlBZ2RHaHBjeTVpWldoaGRtbHZjbk1nUFNCYlhUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHaGxJR0psYUdGMmFXOXljeUJqYjJ4c1pXTjBaV1FnWW5rZ2RHaGxJR0Z1WVd4NWMybHpJSEJoYzNNZ1lua2dibUZ0WlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRRzFsYldKbGNpQjdUMkpxWldOMFBITjBjbWx1Wnl4Q1pXaGhkbWx2Y2tSbGMyTnlhWEIwYjNJK2ZWeHVJQ0FnS2k5Y2JpQWdkR2hwY3k1aVpXaGhkbWx2Y25OQ2VVNWhiV1VnUFNCN2ZUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FTQnRZWEFzSUd0bGVXVmtJR0o1SUdGaWMyOXNkWFJsSUhCaGRHZ3NJRzltSUVSdlkzVnRaVzUwSUcxbGRHRmtZWFJoTGx4dUlDQWdLaUJBYldWdFltVnlJSHRQWW1wbFkzUThjM1J5YVc1bkxFRnVZV3g1ZW1Wa1JHOWpkVzFsYm5RK2ZWeHVJQ0FnS2k5Y2JpQWdkR2hwY3k1b2RHMXNJRDBnZTMwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2JXRndMQ0JyWlhsbFpDQmllU0J3WVhSb0xDQnZaaUJJVkUxTUlHUnZZM1Z0Wlc1MElFRlRWSE11WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQjBhR2x6TG5CaGNuTmxaRVJ2WTNWdFpXNTBjeUE5SUh0OU8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQklHMWhjQ3dnYTJWNVpXUWdZbmtnY0dGMGFDd2diMllnU2xNZ2MyTnlhWEIwSUVGVFZITXVYRzRnSUNBcVhHNGdJQ0FxSUVsbUlIUm9aU0J3WVhSb0lHbHpJR0Z1SUVoVVRVd2dabWxzWlNCM2FYUm9JRzExYkhScGNHeGxJSE5qY21sd2RITXNJSFJvWlNCbGJuUnllU0IzYVd4c0lHSmxJR0Z1SUdGeWNtRjVJRzltSUhOamNtbHdkSE11WEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1E4YzNSeWFXNW5MRUZ5Y21GNVBGQmhjbk5sWkVwVFBqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxuQmhjbk5sWkZOamNtbHdkSE1nUFNCN2ZUdGNibHh1SUNCY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVNCdFlYQXNJR3RsZVdWa0lHSjVJSEJoZEdnc0lHOW1JR1J2WTNWdFpXNTBJR052Ym5SbGJuUXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbDlqYjI1MFpXNTBJRDBnZTMwN1hHNTlPMXh1WEc0dktpcGNiaUFxSUU5d2RHbHZibk1nWm05eUlHQkJibUZzZVhwbGNpNWhibUZzZW5sbFlGeHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnVEc5aFpFOXdkR2x2Ym5OY2JpQXFJRUJ0WlcxaVpYSnZaaUJvZVdSeWIyeDVjMmx6WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMkp2YjJ4bFlXNTlJRzV2UVc1dWIzUmhkR2x2Ym5NZ1YyaGxkR2hsY2lCZ1lXNXViM1JoZEdVb0tXQWdjMmh2ZFd4a0lHSmxJSE5yYVhCd1pXUXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UySnZiMnhsWVc1OUlHTnNaV0Z1SUZkb1pYUm9aWElnZEdobElHZGxibVZ5WVhSbFpDQmtaWE5qY21sd2RHOXljeUJ6YUc5MWJHUWdZbVVnWTJ4bFlXNWxaRnh1SUNvZ0lDQWdJRzltSUhKbFpIVnVaR0Z1ZENCa1lYUmhMbHh1SUNvZ1FIQnliM0JsY25SNUlIdG1kVzVqZEdsdmJpaHpkSEpwYm1jcE9pQmliMjlzWldGdWZTQm1hV3gwWlhJZ1FTQndjbVZrYVdOaGRHVWdablZ1WTNScGIyNGdkR2hoZEZ4dUlDb2dJQ0FnSUdsdVpHbGpZWFJsY3lCM2FHbGphQ0JtYVd4bGN5QnphRzkxYkdRZ1ltVWdhV2R1YjNKbFpDQmllU0IwYUdVZ2JHOWhaR1Z5TGlCQ2VTQmtaV1poZFd4MElHRnNiRnh1SUNvZ0lDQWdJR1pwYkdWeklHNXZkQ0JzYjJOaGRHVmtJSFZ1WkdWeUlIUm9aU0JrYVhKdVlXMWxJRzltSUdCb2NtVm1ZQ0IzYVd4c0lHSmxJR2xuYm05eVpXUXVYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlRhRzl5ZEdoaGJtUWdabTl5SUhSeVlXNXphWFJwZG1Wc2VTQnNiMkZrYVc1bklHRnVaQ0J3Y205alpYTnphVzVuSUdGc2JDQnBiWEJ2Y25SeklHSmxaMmx1Ym1sdVp5QmhkRnh1SUNvZ1lHaHlaV1pnTGx4dUlDcGNiaUFxSUVsdUlHOXlaR1Z5SUhSdklIQnliM0JsY214NUlHWnBiSFJsY2lCd1lYUm9jeXdnWUdoeVpXWmdJRjl0ZFhOMFh5QmlaU0JoYmlCaFluTnZiSFYwWlNCVlVra3VYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHaHlaV1lnVkdobElISnZiM1FnYVcxd2IzSjBJSFJ2SUdKbFoybHVJR3h2WVdScGJtY2dabkp2YlM1Y2JpQXFJRUJ3WVhKaGJTQjdURzloWkU5d2RHbHZibk05ZlNCdmNIUnBiMjV6SUVGdWVTQmhaR1JwZEdsdmJtRnNJRzl3ZEdsdmJuTWdabTl5SUhSb1pTQnNiMkZrTGx4dUlDb2dRSEpsZEhWeWJpQjdVSEp2YldselpUeEJibUZzZVhwbGNqNTlJRUVnY0hKdmJXbHpaU0IwYUdGMElIZHBiR3dnY21WemIyeDJaU0J2Ym1ObElHQm9jbVZtWUNCaGJtUWdhWFJ6WEc0Z0tpQWdJQ0FnWkdWd1pXNWtaVzVqYVdWeklHaGhkbVVnWW1WbGJpQnNiMkZrWldRZ1lXNWtJR0Z1WVd4NWVtVmtMbHh1SUNvdlhHNUJibUZzZVhwbGNpNWhibUZzZVhwbElEMGdablZ1WTNScGIyNGdZVzVoYkhsNlpTaG9jbVZtTENCdmNIUnBiMjV6S1NCN1hHNGdJRzl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpJSHg4SUh0OU8xeHVJQ0J2Y0hScGIyNXpMbVpwYkhSbGNpQTlJRzl3ZEdsdmJuTXVabWxzZEdWeUlIeDhJRjlrWldaaGRXeDBSbWxzZEdWeUtHaHlaV1lwTzF4dVhHNGdJSFpoY2lCc2IyRmtaWElnUFNCdVpYY2dSbWxzWlV4dllXUmxjaWdwTzF4dUlDQjJZWElnVUhKcGJXRnllVkpsYzI5c2RtVnlJRDBnZEhsd1pXOW1JSGRwYm1SdmR5QTlQVDBnSjNWdVpHVm1hVzVsWkNjZ1AxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnhkV2x5WlNnbkxpOXNiMkZrWlhJdlpuTXRjbVZ6YjJ4MlpYSW5LU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMWFYSmxLQ2N1TDJ4dllXUmxjaTk0YUhJdGNtVnpiMngyWlhJbktUdGNiaUFnYkc5aFpHVnlMbUZrWkZKbGMyOXNkbVZ5S0c1bGR5QlFjbWx0WVhKNVVtVnpiMngyWlhJb2IzQjBhVzl1Y3lrcE8xeHVJQ0JzYjJGa1pYSXVZV1JrVW1WemIyeDJaWElvYm1WM0lFNXZiM0JTWlhOdmJIWmxjaWg3ZEdWemREb2diM0IwYVc5dWN5NW1hV3gwWlhKOUtTazdYRzVjYmlBZ2RtRnlJR0Z1WVd4NWVtVnlJRDBnYm1WM0lIUm9hWE1vYm5Wc2JDd2diRzloWkdWeUtUdGNiaUFnY21WMGRYSnVJR0Z1WVd4NWVtVnlMbTFsZEdGa1lYUmhWSEpsWlNob2NtVm1LUzUwYUdWdUtHWjFibU4wYVc5dUtISnZiM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXOXdkR2x2Ym5NdWJtOUJibTV2ZEdGMGFXOXVjeWtnZTF4dUlDQWdJQ0FnWVc1aGJIbDZaWEl1WVc1dWIzUmhkR1VvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11WTJ4bFlXNHBJSHRjYmlBZ0lDQWdJR0Z1WVd4NWVtVnlMbU5zWldGdUtDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJRY205dGFYTmxMbkpsYzI5c2RtVW9ZVzVoYkhsNlpYSXBPMXh1SUNCOUtUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtWEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJpaHpkSEpwYm1jcE9pQmliMjlzWldGdWZWeHVJQ292WEc1bWRXNWpkR2x2YmlCZlpHVm1ZWFZzZEVacGJIUmxjaWhvY21WbUtTQjdYRzRnSUM4dklFVjJaWEo1ZEdocGJtY2dkWEFnZEc4Z2RHaGxJR3hoYzNRZ1lDOWdJRzl5SUdCY1hHQXVYRzRnSUhaaGNpQmlZWE5sSUQwZ2FISmxaaTV0WVhSamFDZ3ZYaWd1S2o4cFcxNWNYQzljWEZ4Y1hTb2tMeWxiTVYwN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpaDFjbWtwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkWEpwTG1sdVpHVjRUMllvWW1GelpTa2dJVDA5SURBN1hHNGdJSDA3WEc1OVhHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVzYjJGa0lEMGdablZ1WTNScGIyNGdiRzloWkNob2NtVm1LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbXh2WVdSbGNpNXlaWEYxWlhOMEtHaHlaV1lwTG5Sb1pXNG9ablZ1WTNScGIyNG9ZMjl1ZEdWdWRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpaHlaWE52YkhabExDQnlaV3BsWTNRcElIdGNiaUFnSUNBZ0lITmxkRlJwYldWdmRYUW9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk52Ym5SbGJuUmJhSEpsWmwwZ1BTQmpiMjUwWlc1ME8xeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtIUm9hWE11WDNCaGNuTmxTRlJOVENoamIyNTBaVzUwTENCb2NtVm1LU2s3WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrc0lEQXBPMXh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2t1WTJGMFkyZ29ablZ1WTNScGIyNG9aWEp5S1h0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pGY25KdmNpQndjbTlqWlhOemFXNW5JR1J2WTNWdFpXNTBJR0YwSUZ3aUlDc2dhSEpsWmlrN1hHNGdJQ0FnSUNCMGFISnZkeUJsY25JN1hHNGdJQ0FnZlNrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNTlPMXh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nWVc0Z1lFRnVZV3g1ZW1Wa1JHOWpkVzFsYm5SZ0lISmxjSEpsYzJWdWRHbHVaeUIwYUdVZ2NISnZkbWxrWldRZ1pHOWpkVzFsYm5SY2JpQXFJRUJ3Y21sMllYUmxYRzRnS2lCQWNHRnlZVzBnSUh0emRISnBibWQ5SUdoMGJXeEpiWEJ2Y25RZ1VtRjNJSFJsZUhRZ2IyWWdZVzRnU0ZSTlRDQmtiMk4xYldWdWRGeHVJQ29nUUhCaGNtRnRJQ0I3YzNSeWFXNW5mU0JvY21WbUlDQWdJQ0FnSUZSb1pTQmtiMk4xYldWdWRDZHpJRlZTVEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMEZ1WVd4NWVtVmtSRzlqZFcxbGJuUjlJQ0FnSUNBZ0lFRnVJQ0JnUVc1aGJIbDZaV1JFYjJOMWJXVnVkR0JjYmlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDl3WVhKelpVaFVUVXdnUFNCbWRXNWpkR2x2YmlCZmNHRnljMlZJVkUxTUtHaDBiV3hKYlhCdmNuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHaHlaV1lwSUh0Y2JpQWdhV1lnS0doeVpXWWdhVzRnZEdocGN5NW9kRzFzS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFIUnRiRnRvY21WbVhUdGNiaUFnZlZ4dUlDQjJZWElnWkdWd2MweHZZV1JsWkNBOUlGdGRPMXh1SUNCMllYSWdaR1Z3U0hKbFpuTWdQU0JiWFR0Y2JpQWdkbUZ5SUcxbGRHRmtZWFJoVEc5aFpHVmtJRDBnVUhKdmJXbHpaUzV5WlhOdmJIWmxLRVZOVUZSWlgwMUZWRUZFUVZSQktUdGNiaUFnZG1GeUlIQmhjbk5sWkR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0J3WVhKelpXUWdQU0JwYlhCdmNuUlFZWEp6WlNob2RHMXNTVzF3YjNKMExDQm9jbVZtS1R0Y2JpQWdmU0JqWVhSamFDQW9aWEp5S1NCN1hHNGdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25SWEp5YjNJZ2NHRnljMmx1WnlFbktUdGNiaUFnSUNCMGFISnZkeUJsY25JN1hHNGdJSDFjYmlBZ2RtRnlJR2gwYld4TWIyRmtaV1FnUFNCUWNtOXRhWE5sTG5KbGMyOXNkbVVvY0dGeWMyVmtLVHRjYmlBZ2FXWWdLSEJoY25ObFpDNXpZM0pwY0hRcElIdGNiaUFnSUNCdFpYUmhaR0YwWVV4dllXUmxaQ0E5SUhSb2FYTXVYM0J5YjJObGMzTlRZM0pwY0hSektIQmhjbk5sWkM1elkzSnBjSFFzSUdoeVpXWXBPMXh1SUNCOVhHNGdJSFpoY2lCamIyMXRaVzUwVkdWNGRDQTlJSEJoY25ObFpDNWpiMjF0Wlc1MExtMWhjQ2htZFc1amRHbHZiaWhqYjIxdFpXNTBLWHRjYmlBZ0lDQnlaWFIxY200Z1pHOXROUzVuWlhSVVpYaDBRMjl1ZEdWdWRDaGpiMjF0Wlc1MEtUdGNiaUFnZlNrN1hHNGdJSFpoY2lCd2MyVjFaRzlGYkdWdFpXNTBjeUE5SUdSdlkzTXVjR0Z5YzJWUWMyVjFaRzlGYkdWdFpXNTBjeWhqYjIxdFpXNTBWR1Y0ZENrN1hHNGdJSEJ6WlhWa2IwVnNaVzFsYm5SekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1pXeGxiV1Z1ZENsN1hHNGdJQ0FnWld4bGJXVnVkQzVqYjI1MFpXNTBTSEpsWmlBOUlHaHlaV1k3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwY3k1d2RYTm9LR1ZzWlcxbGJuUXBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWld4bGJXVnVkQzVwYzEwZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0J0WlhSaFpHRjBZVXh2WVdSbFpDQTlJRzFsZEdGa1lYUmhURzloWkdWa0xuUm9aVzRvWm5WdVkzUnBiMjRvYldWMFlXUmhkR0VwZTF4dUlDQWdJSFpoY2lCdFpYUmhaR0YwWVVWdWRISjVJRDBnZTF4dUlDQWdJQ0FnWld4bGJXVnVkSE02SUhCelpYVmtiMFZzWlcxbGJuUnpMRnh1SUNBZ0lDQWdabVZoZEhWeVpYTTZJRnRkTEZ4dUlDQWdJQ0FnWW1Wb1lYWnBiM0p6T2lCYlhWeHVJQ0FnSUgwN1hHNGdJQ0FnY21WMGRYSnVJRnR0WlhSaFpHRjBZU3dnYldWMFlXUmhkR0ZGYm5SeWVWMHVjbVZrZFdObEtISmxaSFZqWlUxbGRHRmtZWFJoS1R0Y2JpQWdmU2s3WEc0Z0lHUmxjSE5NYjJGa1pXUXVjSFZ6YUNodFpYUmhaR0YwWVV4dllXUmxaQ2s3WEc1Y2JseHVJQ0JwWmlBb2RHaHBjeTVzYjJGa1pYSXBJSHRjYmlBZ0lDQjJZWElnWW1GelpWVnlhU0E5SUdoeVpXWTdYRzRnSUNBZ2FXWWdLSEJoY25ObFpDNWlZWE5sTG14bGJtZDBhQ0ErSURFcElIdGNiaUFnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvWENKUGJteDVJRzl1WlNCaVlYTmxJSFJoWnlCd1pYSWdaRzlqZFcxbGJuUWhYQ0lwTzF4dUlDQWdJQ0FnZEdoeWIzY2dYQ0pOZFd4MGFYQnNaU0JpWVhObElIUmhaM01nYVc0Z1hDSWdLeUJvY21WbU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2NHRnljMlZrTG1KaGMyVXViR1Z1WjNSb0lEMDlJREVwSUh0Y2JpQWdJQ0FnSUhaaGNpQmlZWE5sU0hKbFppQTlJR1J2YlRVdVoyVjBRWFIwY21saWRYUmxLSEJoY25ObFpDNWlZWE5sV3pCZExDQmNJbWh5WldaY0lpazdYRzRnSUNBZ0lDQnBaaUFvWW1GelpVaHlaV1lwSUh0Y2JpQWdJQ0FnSUNBZ1ltRnpaVWh5WldZZ1BTQmlZWE5sU0hKbFppQXJJRndpTDF3aU8xeHVJQ0FnSUNBZ0lDQmlZWE5sVlhKcElEMGdkWEpzTG5KbGMyOXNkbVVvWW1GelpWVnlhU3dnWW1GelpVaHlaV1lwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQndZWEp6WldRdWFXMXdiM0owTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYkdsdWF5a2dlMXh1SUNBZ0lDQWdkbUZ5SUd4cGJtdDFjbXdnUFNCa2IyMDFMbWRsZEVGMGRISnBZblYwWlNoc2FXNXJMQ0FuYUhKbFppY3BPMXh1SUNBZ0lDQWdhV1lnS0d4cGJtdDFjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJSEpsYzI5c2RtVmtWWEpzSUQwZ2RYSnNMbkpsYzI5c2RtVW9ZbUZ6WlZWeWFTd2diR2x1YTNWeWJDazdYRzRnSUNBZ0lDQWdJR1JsY0VoeVpXWnpMbkIxYzJnb2NtVnpiMngyWldSVmNtd3BPMXh1SUNBZ0lDQWdJQ0JrWlhCelRHOWhaR1ZrTG5CMWMyZ29kR2hwY3k1ZlpHVndaVzVrWlc1amFXVnpURzloWkdWa1JtOXlLSEpsYzI5c2RtVmtWWEpzTENCb2NtVm1LU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdJQ0J3WVhKelpXUXVjM1I1YkdVdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloemRIbHNaVVZzWlcxbGJuUXBJSHRjYmlBZ0lDQWdJR2xtSUNod2IyeDViV1Z5UlhoMFpYSnVZV3hUZEhsc1pTaHpkSGxzWlVWc1pXMWxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6ZEhsc1pVaHlaV1lnUFNCa2IyMDFMbWRsZEVGMGRISnBZblYwWlNoemRIbHNaVVZzWlcxbGJuUXNJQ2RvY21WbUp5azdYRzRnSUNBZ0lDQWdJR2xtSUNob2NtVm1LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MzUjViR1ZJY21WbUlEMGdkWEpzTG5KbGMyOXNkbVVvWW1GelpWVnlhU3dnYzNSNWJHVkljbVZtS1R0Y2JpQWdJQ0FnSUNBZ0lDQmtaWEJ6VEc5aFpHVmtMbkIxYzJnb2RHaHBjeTVzYjJGa1pYSXVjbVZ4ZFdWemRDaHpkSGxzWlVoeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b1kyOXVkR1Z1ZENsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxsOWpiMjUwWlc1MFczTjBlV3hsU0hKbFpsMGdQU0JqYjI1MFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUgwdVltbHVaQ2gwYUdsektTa3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdmVnh1SUNCa1pYQnpURzloWkdWa0lEMGdVSEp2YldselpTNWhiR3dvWkdWd2MweHZZV1JsWkNsY2JpQWdJQ0FnSUNBZ0xuUm9aVzRvWm5WdVkzUnBiMjRvS1NCN2NtVjBkWEp1SUdSbGNFaHlaV1p6TzMwcFhHNGdJQ0FnSUNBZ0lDNWpZWFJqYUNobWRXNWpkR2x2YmlobGNuSXBJSHQwYUhKdmR5Qmxjbkk3ZlNrN1hHNGdJSFJvYVhNdWNHRnljMlZrUkc5amRXMWxiblJ6VzJoeVpXWmRJRDBnY0dGeWMyVmtMbUZ6ZER0Y2JpQWdkR2hwY3k1b2RHMXNXMmh5WldaZElEMGdlMXh1SUNBZ0lDQWdhSEpsWmpvZ2FISmxaaXhjYmlBZ0lDQWdJR2gwYld4TWIyRmtaV1E2SUdoMGJXeE1iMkZrWldRc1hHNGdJQ0FnSUNCdFpYUmhaR0YwWVV4dllXUmxaRG9nYldWMFlXUmhkR0ZNYjJGa1pXUXNYRzRnSUNBZ0lDQmtaWEJJY21WbWN6b2daR1Z3U0hKbFpuTXNYRzRnSUNBZ0lDQmtaWEJ6VEc5aFpHVmtPaUJrWlhCelRHOWhaR1ZrWEc0Z0lIMDdYRzRnSUhKbGRIVnliaUIwYUdsekxtaDBiV3hiYUhKbFpsMDdYRzU5TzF4dVhHNUJibUZzZVhwbGNpNXdjbTkwYjNSNWNHVXVYM0J5YjJObGMzTlRZM0pwY0hSeklEMGdablZ1WTNScGIyNGdYM0J5YjJObGMzTlRZM0pwY0hSektITmpjbWx3ZEhNc0lHaHlaV1lwSUh0Y2JpQWdkbUZ5SUhOamNtbHdkRkJ5YjIxcGMyVnpJRDBnVzEwN1hHNGdJSE5qY21sd2RITXVabTl5UldGamFDaG1kVzVqZEdsdmJpaHpZM0pwY0hRcElIdGNiaUFnSUNCelkzSnBjSFJRY205dGFYTmxjeTV3ZFhOb0tIUm9hWE11WDNCeWIyTmxjM05UWTNKcGNIUW9jMk55YVhCMExDQm9jbVZtS1NrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSEpsZEhWeWJpQlFjbTl0YVhObExtRnNiQ2h6WTNKcGNIUlFjbTl0YVhObGN5a3VkR2hsYmlobWRXNWpkR2x2YmlodFpYUmhaR0YwWVV4cGMzUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JXVjBZV1JoZEdGTWFYTjBMbkpsWkhWalpTaHlaV1IxWTJWTlpYUmhaR0YwWVN3Z1JVMVFWRmxmVFVWVVFVUkJWRUVwTzF4dUlDQjlLVHRjYm4wN1hHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVmY0hKdlkyVnpjMU5qY21sd2RDQTlJR1oxYm1OMGFXOXVJRjl3Y205alpYTnpVMk55YVhCMEtITmpjbWx3ZEN3Z2FISmxaaWtnZTF4dUlDQjJZWElnYzNKaklEMGdaRzl0TlM1blpYUkJkSFJ5YVdKMWRHVW9jMk55YVhCMExDQW5jM0pqSnlrN1hHNGdJSFpoY2lCd1lYSnpaV1JLY3p0Y2JpQWdhV1lnS0NGemNtTXBJSHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnY0dGeWMyVmtTbk1nUFNCcWMxQmhjbk5sS0NoelkzSnBjSFF1WTJocGJHUk9iMlJsY3k1c1pXNW5kR2dwSUQ4Z2MyTnlhWEIwTG1Ob2FXeGtUbTlrWlhOYk1GMHVkbUZzZFdVZ09pQW5KeWs3WEc0Z0lDQWdmU0JqWVhSamFDQW9aWEp5S1NCN1hHNGdJQ0FnSUNBdkx5QkdhV2QxY21VZ2IzVjBJSFJvWlNCamIzSnlaV04wSUd4cGJtVWdiblZ0WW1WeUlHWnZjaUIwYUdVZ1pYSnliM0l1WEc0Z0lDQWdJQ0IyWVhJZ2JHbHVaU0E5SURBN1hHNGdJQ0FnSUNCMllYSWdZMjlzSUQwZ01EdGNiaUFnSUNBZ0lHbG1JQ2h6WTNKcGNIUXVYMTl2ZDI1bGNrUnZZM1Z0Wlc1MElDWW1JSE5qY21sd2RDNWZYMjkzYm1WeVJHOWpkVzFsYm5RZ1BUMGdhSEpsWmlrZ2UxeHVJQ0FnSUNBZ0lDQnNhVzVsSUQwZ2MyTnlhWEIwTGw5ZmJHOWpZWFJwYjI1RVpYUmhhV3d1YkdsdVpTQXRJREU3WEc0Z0lDQWdJQ0FnSUdOdmJDQTlJSE5qY21sd2RDNWZYMnh2WTJGMGFXOXVSR1YwWVdsc0xteHBibVVnTFNBeE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2JHbHVaU0FyUFNCbGNuSXViR2x1WlU1MWJXSmxjanRjYmlBZ0lDQWdJR052YkNBclBTQmxjbkl1WTI5c2RXMXVPMXh1SUNBZ0lDQWdkbUZ5SUcxbGMzTmhaMlVnUFNCY0lrVnljbTl5SUhCaGNuTnBibWNnYzJOeWFYQjBJR2x1SUZ3aUlDc2dhSEpsWmlBcklGd2lJR0YwSUZ3aUlDc2diR2x1WlNBcklGd2lPbHdpSUNzZ1kyOXNPMXh1SUNBZ0lDQWdiV1Z6YzJGblpTQXJQU0JjSWx4Y2Jsd2lJQ3NnWlhKeUxtUmxjMk55YVhCMGFXOXVPMXh1SUNBZ0lDQWdjbVYwZFhKdUlGQnliMjFwYzJVdWNtVnFaV04wS0c1bGR5QkZjbkp2Y2lodFpYTnpZV2RsS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNod1lYSnpaV1JLY3k1bGJHVnRaVzUwY3lrZ2UxeHVJQ0FnSUNBZ2NHRnljMlZrU25NdVpXeGxiV1Z1ZEhNdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobGJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lHVnNaVzFsYm5RdWMyTnlhWEIwUld4bGJXVnVkQ0E5SUhOamNtbHdkRHRjYmlBZ0lDQWdJQ0FnWld4bGJXVnVkQzVqYjI1MFpXNTBTSEpsWmlBOUlHaHlaV1k3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRITXVjSFZ6YUNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1ZzWlcxbGJuUXVhWE1nYVc0Z2RHaHBjeTVsYkdWdFpXNTBjMEo1VkdGblRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWQyRnliaWduU1dkdWIzSnBibWNnWkhWd2JHbGpZWFJsSUdWc1pXMWxiblFnWkdWbWFXNXBkR2x2YmpvZ0p5QXJJR1ZzWlcxbGJuUXVhWE1wTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWld4bGJXVnVkQzVwYzEwZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvY0dGeWMyVmtTbk11Wm1WaGRIVnlaWE1wSUh0Y2JpQWdJQ0FnSUhCaGNuTmxaRXB6TG1abFlYUjFjbVZ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWm1WaGRIVnlaU2w3WEc0Z0lDQWdJQ0FnSUdabFlYUjFjbVV1WTI5dWRHVnVkRWh5WldZZ1BTQm9jbVZtTzF4dUlDQWdJQ0FnSUNCbVpXRjBkWEpsTG5OamNtbHdkRVZzWlcxbGJuUWdQU0J6WTNKcGNIUTdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSFJvYVhNdVptVmhkSFZ5WlhNZ1BTQjBhR2x6TG1abFlYUjFjbVZ6TG1OdmJtTmhkQ2h3WVhKelpXUktjeTVtWldGMGRYSmxjeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h3WVhKelpXUktjeTVpWldoaGRtbHZjbk1wSUh0Y2JpQWdJQ0FnSUhCaGNuTmxaRXB6TG1KbGFHRjJhVzl5Y3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dKbGFHRjJhVzl5S1h0Y2JpQWdJQ0FnSUNBZ1ltVm9ZWFpwYjNJdVkyOXVkR1Z1ZEVoeVpXWWdQU0JvY21WbU8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KbGFHRjJhVzl5YzBKNVRtRnRaVnRpWldoaGRtbHZjaTVwYzEwZ1BTQmlaV2hoZG1sdmNqdGNiaUFnSUNBZ0lDQWdkR2hwY3k1aVpXaGhkbWx2Y25OQ2VVNWhiV1ZiWW1Wb1lYWnBiM0l1YzNsdFltOXNYU0E5SUdKbGFHRjJhVzl5TzF4dUlDQWdJQ0FnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1Wb1lYWnBiM0p6SUQwZ2RHaHBjeTVpWldoaGRtbHZjbk11WTI5dVkyRjBLSEJoY25ObFpFcHpMbUpsYUdGMmFXOXljeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doVDJKcVpXTjBMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvZEdocGN5NXdZWEp6WldSVFkzSnBjSFJ6TENCb2NtVm1LU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdZWEp6WldSVFkzSnBjSFJ6VzJoeVpXWmRJRDBnVzEwN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCelkzSnBjSFJGYkdWdFpXNTBPMXh1SUNBZ0lHbG1JQ2h6WTNKcGNIUXVYMTl2ZDI1bGNrUnZZM1Z0Wlc1MElDWW1JSE5qY21sd2RDNWZYMjkzYm1WeVJHOWpkVzFsYm5RZ1BUMGdhSEpsWmlrZ2UxeHVJQ0FnSUNBZ2MyTnlhWEIwUld4bGJXVnVkQ0E5SUhOamNtbHdkRHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTV3WVhKelpXUlRZM0pwY0hSelcyaHlaV1pkTG5CMWMyZ29lMXh1SUNBZ0lDQWdZWE4wT2lCd1lYSnpaV1JLY3k1d1lYSnpaV1JUWTNKcGNIUXNYRzRnSUNBZ0lDQnpZM0pwY0hSRmJHVnRaVzUwT2lCelkzSnBjSFJGYkdWdFpXNTBYRzRnSUNBZ2ZTazdYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxaRXB6TzF4dUlDQjlYRzRnSUdsbUlDaDBhR2x6TG14dllXUmxjaWtnZTF4dUlDQWdJSFpoY2lCeVpYTnZiSFpsWkZOeVl5QTlJSFZ5YkM1eVpYTnZiSFpsS0doeVpXWXNJSE55WXlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWJHOWhaR1Z5TG5KbGNYVmxjM1FvY21WemIyeDJaV1JUY21NcExuUm9aVzRvWm5WdVkzUnBiMjRvWTI5dWRHVnVkQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NWZZMjl1ZEdWdWRGdHlaWE52YkhabFpGTnlZMTBnUFNCamIyNTBaVzUwTzF4dUlDQWdJQ0FnZG1GeUlISmxjMjlzZG1Wa1UyTnlhWEIwSUQwZ1QySnFaV04wTG1OeVpXRjBaU2h6WTNKcGNIUXBPMXh1SUNBZ0lDQWdjbVZ6YjJ4MlpXUlRZM0pwY0hRdVkyaHBiR1JPYjJSbGN5QTlJRnQ3ZG1Gc2RXVTZJR052Ym5SbGJuUjlYVHRjYmlBZ0lDQWdJSEpsYzI5c2RtVmtVMk55YVhCMExtRjBkSEp6SUQwZ2NtVnpiMngyWldSVFkzSnBjSFF1WVhSMGNuTXVjMnhwWTJVb0tUdGNiaUFnSUNBZ0lHUnZiVFV1Y21WdGIzWmxRWFIwY21saWRYUmxLSEpsYzI5c2RtVmtVMk55YVhCMExDQW5jM0pqSnlrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWZjSEp2WTJWemMxTmpjbWx3ZENoeVpYTnZiSFpsWkZOamNtbHdkQ3dnY21WemIyeDJaV1JUY21NcE8xeHVJQ0FnSUgwdVltbHVaQ2gwYUdsektTa3VZMkYwWTJnb1puVnVZM1JwYjI0b1pYSnlLU0I3ZEdoeWIzY2daWEp5TzMwcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG5KbGMyOXNkbVVvUlUxUVZGbGZUVVZVUVVSQlZFRXBPMXh1SUNCOVhHNTlPMXh1WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVgyUmxjR1Z1WkdWdVkybGxjMHh2WVdSbFpFWnZjaUE5SUdaMWJtTjBhVzl1SUY5a1pYQmxibVJsYm1OcFpYTk1iMkZrWldSR2IzSW9hSEpsWml3Z2NtOXZkQ2tnZTF4dUlDQjJZWElnWm05MWJtUWdQU0I3ZlR0Y2JpQWdhV1lnS0hKdmIzUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUdadmRXNWtXM0p2YjNSZElEMGdkSEoxWlR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnZEdocGN5NWZaMlYwUkdWd1pXNWtaVzVqYVdWektHaHlaV1lzSUdadmRXNWtLUzUwYUdWdUtHWjFibU4wYVc5dUtHUmxjSE1wSUh0Y2JpQWdJQ0IyWVhJZ1pHVndUV1YwWVdSaGRHRk1iMkZrWldRZ1BTQmJYVHRjYmlBZ0lDQjJZWElnWkdWd1VISnZiV2x6WlhNZ1BTQmtaWEJ6TG0xaGNDaG1kVzVqZEdsdmJpaGtaWEJJY21WbUtYdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbXh2WVdRb1pHVndTSEpsWmlrdWRHaGxiaWhtZFc1amRHbHZiaWhvZEcxc1RXOXViMjFsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FIUnRiRTF2Ym05dFpYSXViV1YwWVdSaGRHRk1iMkZrWldRN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG1Gc2JDaGtaWEJRY205dGFYTmxjeWs3WEc0Z0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRXhwYzNRZ1lXeHNJSFJvWlNCb2RHMXNJR1JsY0dWdVpHVnVZMmxsY3lCbWIzSWdkR2hsSUdSdlkzVnRaVzUwSUdGMElHQm9jbVZtWUM1Y2JpQXFJRUJ3WVhKaGJTQWdlM04wY21sdVozMGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhSEpsWmlBZ0lDQWdJRlJvWlNCb2NtVm1JSFJ2SUdkbGRDQmtaWEJsYm1SbGJtTnBaWE1nWm05eUxseHVJQ29nUUhCaGNtRnRJQ0I3VDJKcVpXTjBManh6ZEhKcGJtY3NZbTl2YkdWaGJqNDlmU0JtYjNWdVpDQWdJQ0FnUVc0Z2IySnFaV04wSUd0bGVXVmtJR0o1SUZWU1RDQnZaaUIwYUdWY2JpQXFJQ0FnSUNCaGJISmxZV1I1SUhKbGMyOXNkbVZrSUdSbGNHVnVaR1Z1WTJsbGN5NWNiaUFxSUVCd1lYSmhiU0FnZTJKdmIyeGxZVzQ5ZlNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwY21GdWMybDBhWFpsSUZkb1pYUm9aWElnZEc4Z2JHOWhaQ0IwY21GdWMybDBhWFpsWEc0Z0tpQWdJQ0FnWkdWd1pXNWtaVzVqYVdWekxpQkVaV1poZFd4MGN5QjBieUIwY25WbExseHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYa3VQSE4wY21sdVp6NTlJQ0JCSUd4cGMzUWdiMllnWVd4c0lIUm9aU0JvZEcxc0lHUmxjR1Z1WkdWdVkybGxjeTVjYmlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDluWlhSRVpYQmxibVJsYm1OcFpYTWdQU0JtZFc1amRHbHZiaUJmWjJWMFJHVndaVzVrWlc1amFXVnpLR2h5WldZc0lHWnZkVzVrTENCMGNtRnVjMmwwYVhabEtTQjdYRzRnSUdsbUlDaG1iM1Z1WkNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdabTkxYm1RZ1BTQjdmVHRjYmlBZ0lDQm1iM1Z1WkZ0b2NtVm1YU0E5SUhSeWRXVTdYRzRnSUgxY2JpQWdhV1lnS0hSeVlXNXphWFJwZG1VZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJSFJ5WVc1emFYUnBkbVVnUFNCMGNuVmxPMXh1SUNCOVhHNGdJSFpoY2lCa1pYQnpJRDBnVzEwN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG14dllXUW9hSEpsWmlrdWRHaGxiaWhtZFc1amRHbHZiaWhvZEcxc1RXOXViMjFsY2lrZ2UxeHVJQ0FnSUhaaGNpQjBjbUZ1YzJsMGFYWmxSR1Z3Y3lBOUlGdGRPMXh1SUNBZ0lHaDBiV3hOYjI1dmJXVnlMbVJsY0VoeVpXWnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aR1Z3U0hKbFppbDdYRzRnSUNBZ0lDQnBaaUFvWm05MWJtUmJaR1Z3U0hKbFpsMHBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdaR1Z3Y3k1d2RYTm9LR1JsY0VoeVpXWXBPMXh1SUNBZ0lDQWdabTkxYm1SYlpHVndTSEpsWmwwZ1BTQjBjblZsTzF4dUlDQWdJQ0FnYVdZZ0tIUnlZVzV6YVhScGRtVXBJSHRjYmlBZ0lDQWdJQ0FnZEhKaGJuTnBkR2wyWlVSbGNITXVjSFZ6YUNoMGFHbHpMbDluWlhSRVpYQmxibVJsYm1OcFpYTW9aR1Z3U0hKbFppd2dabTkxYm1RcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG1Gc2JDaDBjbUZ1YzJsMGFYWmxSR1Z3Y3lrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrdWRHaGxiaWhtZFc1amRHbHZiaWgwY21GdWMybDBhWFpsUkdWd2N5a2dlMXh1SUNBZ0lIWmhjaUJoYkd4a1pYQnpJRDBnZEhKaGJuTnBkR2wyWlVSbGNITXVjbVZrZFdObEtHWjFibU4wYVc5dUtHRXNJR0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoTG1OdmJtTmhkQ2hpS1R0Y2JpQWdJQ0I5TENCYlhTa3VZMjl1WTJGMEtHUmxjSE1wTzF4dUlDQWdJSEpsZEhWeWJpQmhiR3hrWlhCek8xeHVJQ0I5S1R0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUcxaGRHTm9aWE5FYjJOMWJXVnVkRVp2YkdSbGNpaGtaWE5qY21sd2RHOXlMQ0JvY21WbUtTQjdYRzRnSUdsbUlDZ2haR1Z6WTNKcGNIUnZjaTVqYjI1MFpXNTBTSEpsWmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dUlDQjJZWElnWkdWelkzSnBjSFJ2Y2tSdll5QTlJSFZ5YkM1d1lYSnpaU2hrWlhOamNtbHdkRzl5TG1OdmJuUmxiblJJY21WbUtUdGNiaUFnYVdZZ0tDRmtaWE5qY21sd2RHOXlSRzlqSUh4OElDRmtaWE5qY21sd2RHOXlSRzlqTG5CaGRHaHVZVzFsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc0Z0lIWmhjaUJ6WldGeVkyaEViMk1nUFNCMWNtd3VjR0Z5YzJVb2FISmxaaWs3WEc0Z0lHbG1JQ2doYzJWaGNtTm9SRzlqSUh4OElDRnpaV0Z5WTJoRWIyTXVjR0YwYUc1aGJXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lIMWNiaUFnZG1GeUlITmxZWEpqYUZCaGRHZ2dQU0J6WldGeVkyaEViMk11Y0dGMGFHNWhiV1U3WEc0Z0lIWmhjaUJzWVhOMFUyeGhjMmdnUFNCelpXRnlZMmhRWVhSb0xteGhjM1JKYm1SbGVFOW1LRndpTDF3aUtUdGNiaUFnYVdZZ0tHeGhjM1JUYkdGemFDQStJREFwSUh0Y2JpQWdJQ0J6WldGeVkyaFFZWFJvSUQwZ2MyVmhjbU5vVUdGMGFDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyZ3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmtaWE5qY21sd2RHOXlSRzlqTG5CaGRHaHVZVzFsTG1sdVpHVjRUMllvYzJWaGNtTm9VR0YwYUNrZ1BUMDlJREE3WEc1OVhHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVsYkdWdFpXNTBjMFp2Y2tadmJHUmxjaUE5SUdaMWJtTjBhVzl1SUdWc1pXMWxiblJ6Um05eVJtOXNaR1Z5S0doeVpXWXBJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVaV3hsYldWdWRITXVabWxzZEdWeUtHWjFibU4wYVc5dUtHVnNaVzFsYm5RcGUxeHVJQ0FnSUhKbGRIVnliaUJ0WVhSamFHVnpSRzlqZFcxbGJuUkdiMnhrWlhJb1pXeGxiV1Z1ZEN3Z2FISmxaaWs3WEc0Z0lIMHBPMXh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbUpsYUdGMmFXOXljMFp2Y2tadmJHUmxjaUE5SUdaMWJtTjBhVzl1SUdKbGFHRjJhVzl5YzBadmNrWnZiR1JsY2lob2NtVm1LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbUpsYUdGMmFXOXljeTVtYVd4MFpYSW9ablZ1WTNScGIyNG9ZbVZvWVhacGIzSXBlMXh1SUNBZ0lISmxkSFZ5YmlCdFlYUmphR1Z6Ukc5amRXMWxiblJHYjJ4a1pYSW9ZbVZvWVhacGIzSXNJR2h5WldZcE8xeHVJQ0I5S1R0Y2JuMDdYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUZCUFNrOGdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hsSUdsdGNHOXlkRnh1SUNvZ2RISmxaU3dnYVc0Z1lTQm1iM0p0WVhRZ2RHaGhkQ0J0WVdsdWRHRnBibk1nZEdobElHOXlaR1Z5YVc1bklHOW1JSFJvWlNCSVZFMU1JR2x0Y0c5eWRITWdjM0JsWXk1Y2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtSUhSb1pTQnBiWEJ2Y25RZ2RHOGdaMlYwSUcxbGRHRmtZWFJoSUdadmNpNWNiaUFxSUVCeVpYUjFjbTRnZTFCeWIyMXBjMlY5WEc0Z0tpOWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzV0WlhSaFpHRjBZVlJ5WldVZ1BTQm1kVzVqZEdsdmJpQnRaWFJoWkdGMFlWUnlaV1VvYUhKbFppa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXNiMkZrS0doeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b2JXOXViMjFsY2lsN1hHNGdJQ0FnZG1GeUlHeHZZV1JsWkVoeVpXWnpJRDBnZTMwN1hHNGdJQ0FnYkc5aFpHVmtTSEpsWm5OYmFISmxabDBnUFNCMGNuVmxPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDl0WlhSaFpHRjBZVlJ5WldVb2JXOXViMjFsY2l3Z2JHOWhaR1ZrU0hKbFpuTXBPMXh1SUNCOUxtSnBibVFvZEdocGN5a3BPMXh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDl0WlhSaFpHRjBZVlJ5WldVZ1BTQm1kVzVqZEdsdmJpQmZiV1YwWVdSaGRHRlVjbVZsS0doMGJXeE5iMjV2YldWeUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dllXUmxaRWh5WldaektTQjdYRzRnSUdsbUlDaHNiMkZrWldSSWNtVm1jeUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ2JHOWhaR1ZrU0hKbFpuTWdQU0I3ZlR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYUhSdGJFMXZibTl0WlhJdWJXVjBZV1JoZEdGTWIyRmtaV1F1ZEdobGJpaG1kVzVqZEdsdmJpaHRaWFJoWkdGMFlTa2dlMXh1SUNBZ0lHMWxkR0ZrWVhSaElEMGdlMXh1SUNBZ0lDQWdaV3hsYldWdWRITTZJRzFsZEdGa1lYUmhMbVZzWlcxbGJuUnpMRnh1SUNBZ0lDQWdabVZoZEhWeVpYTTZJRzFsZEdGa1lYUmhMbVpsWVhSMWNtVnpMRnh1SUNBZ0lDQWdhSEpsWmpvZ2FIUnRiRTF2Ym05dFpYSXVhSEpsWmx4dUlDQWdJSDA3WEc0Z0lDQWdjbVYwZFhKdUlHaDBiV3hOYjI1dmJXVnlMbVJsY0hOTWIyRmtaV1F1ZEdobGJpaG1kVzVqZEdsdmJpaG9jbVZtY3lrZ2UxeHVJQ0FnSUNBZ2RtRnlJR1JsY0UxbGRHRmtZWFJoSUQwZ1cxMDdYRzRnSUNBZ0lDQm9jbVZtY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0doeVpXWXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHMWxkR0ZrWVhSaFVISnZiV2x6WlNBOUlGQnliMjFwYzJVdWNtVnpiMngyWlNoMGNuVmxLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHUmxjRTFsZEdGa1lYUmhMbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlWQnliMjFwYzJVZ1BTQmtaWEJOWlhSaFpHRjBZVnRrWlhCTlpYUmhaR0YwWVM1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J0WlhSaFpHRjBZVkJ5YjIxcGMyVWdQU0J0WlhSaFpHRjBZVkJ5YjIxcGMyVXVkR2hsYmlobWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXeHZZV1JsWkVoeVpXWnpXMmh5WldaZEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc2IyRmtaV1JJY21WbWMxdG9jbVZtWFNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYldWMFlXUmhkR0ZVY21WbEtIUm9hWE11YUhSdGJGdG9jbVZtWFN3Z2JHOWhaR1ZrU0hKbFpuTXBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1VISnZiV2x6WlM1eVpYTnZiSFpsS0h0OUtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwdVltbHVaQ2gwYUdsektTazdYRzRnSUNBZ0lDQWdJR1JsY0UxbGRHRmtZWFJoTG5CMWMyZ29iV1YwWVdSaGRHRlFjbTl0YVhObEtUdGNiaUFnSUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdVSEp2YldselpTNWhiR3dvWkdWd1RXVjBZV1JoZEdFcExuUm9aVzRvWm5WdVkzUnBiMjRvYVcxd2IzSjBUV1YwWVdSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYldWMFlXUmhkR0V1YVcxd2IzSjBjeUE5SUdsdGNHOXlkRTFsZEdGa1lYUmhPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhSFJ0YkUxdmJtOXRaWEl1YUhSdGJFeHZZV1JsWkM1MGFHVnVLR1oxYm1OMGFXOXVLSEJoY25ObFpFaDBiV3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlTNW9kRzFzSUQwZ2NHRnljMlZrU0hSdGJEdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2JXVjBZV1JoZEdFdVpXeGxiV1Z1ZEhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUcxbGRHRmtZWFJoTG1Wc1pXMWxiblJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWld4bGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JoZEhSaFkyaEViMjFOYjJSMWJHVW9jR0Z5YzJWa1NIUnRiQ3dnWld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHMWxkR0ZrWVhSaE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNTlPMXh1WEc1bWRXNWpkR2x2YmlCdFlYUmphR2x1WjBsdGNHOXlkQ2hwYlhCdmNuUkZiR1Z0Wlc1MEtTQjdYRzRnSUhaaGNpQnRZWFJqYUdWelZHRm5JRDBnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvYVcxd2IzSjBSV3hsYldWdWRDNTBZV2RPWVcxbEtUdGNiaUFnZG1GeUlHMWhkR05vWlhOSWNtVm1JRDBnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzBGMGRISldZV3gxWlNnbmFISmxaaWNzSUdSdmJUVXVaMlYwUVhSMGNtbGlkWFJsS0dsdGNHOXlkRVZzWlcxbGJuUXNJQ2RvY21WbUp5a3BPMXh1SUNCMllYSWdiV0YwWTJobGMxSmxiQ0E5SUdSdmJUVXVjSEpsWkdsallYUmxjeTVvWVhOQmRIUnlWbUZzZFdVb0ozSmxiQ2NzSUdSdmJUVXVaMlYwUVhSMGNtbGlkWFJsS0dsdGNHOXlkRVZzWlcxbGJuUXNJQ2R5Wld3bktTazdYRzRnSUhKbGRIVnliaUJrYjIwMUxuQnlaV1JwWTJGMFpYTXVRVTVFS0cxaGRHTm9aWE5VWVdjc0lHMWhkR05vWlhOSWNtVm1MQ0J0WVhSamFHVnpVbVZzS1R0Y2JuMWNibHh1THk4Z1ZFOUVUeWhoYW04cE9pQlNaV1poWTNSdmNpQnZkWFFnYjJZZ2RuVnNZMkZ1YVhwbElHbHVkRzhnWkc5dE5TNWNiblpoY2lCd2IyeDViV1Z5UlhoMFpYSnVZV3hUZEhsc1pTQTlJR1J2YlRVdWNISmxaR2xqWVhSbGN5NUJUa1FvWEc0Z0lHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTlVZV2RPWVcxbEtDZHNhVzVySnlrc1hHNGdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNKbGJDY3NJQ2RwYlhCdmNuUW5LU3hjYmlBZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TG1oaGMwRjBkSEpXWVd4MVpTZ25kSGx3WlNjc0lDZGpjM01uS1Z4dUtUdGNibHh1ZG1GeUlHVjRkR1Z5Ym1Gc1UyTnlhWEIwSUQwZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGtGT1JDaGNiaUFnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvSjNOamNtbHdkQ2NwTEZ4dUlDQmtiMjAxTG5CeVpXUnBZMkYwWlhNdWFHRnpRWFIwY2lnbmMzSmpKeWxjYmlrN1hHNWNiblpoY2lCcGMwaDBiV3hKYlhCdmNuUk9iMlJsSUQwZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGtGT1JDaGNiaUFnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvSjJ4cGJtc25LU3hjYmlBZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TG1oaGMwRjBkSEpXWVd4MVpTZ25jbVZzSnl3Z0oybHRjRzl5ZENjcExGeHVJQ0JrYjIwMUxuQnlaV1JwWTJGMFpYTXVUazlVS0Z4dUlDQWdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNSNWNHVW5MQ0FuWTNOekp5bGNiaUFnS1Z4dUtUdGNibHh1UVc1aGJIbDZaWEl1Y0hKdmRHOTBlWEJsTGw5cGJteHBibVZUZEhsc1pYTWdQU0JtZFc1amRHbHZiaUJmYVc1c2FXNWxVM1I1YkdWektHRnpkQ3dnYUhKbFppa2dlMXh1SUNCMllYSWdZM056VEdsdWEzTWdQU0JrYjIwMUxuRjFaWEo1UVd4c0tHRnpkQ3dnY0c5c2VXMWxja1Y0ZEdWeWJtRnNVM1I1YkdVcE8xeHVJQ0JqYzNOTWFXNXJjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR3hwYm1zcElIdGNiaUFnSUNCMllYSWdiR2x1YTBoeVpXWWdQU0JrYjIwMUxtZGxkRUYwZEhKcFluVjBaU2hzYVc1ckxDQW5hSEpsWmljcE8xeHVJQ0FnSUhaaGNpQjFjbWtnUFNCMWNtd3VjbVZ6YjJ4MlpTaG9jbVZtTENCc2FXNXJTSEpsWmlrN1hHNGdJQ0FnZG1GeUlHTnZiblJsYm5RZ1BTQjBhR2x6TGw5amIyNTBaVzUwVzNWeWFWMDdYRzRnSUNBZ2RtRnlJSE4wZVd4bElEMGdaRzl0TlM1amIyNXpkSEoxWTNSdmNuTXVaV3hsYldWdWRDZ25jM1I1YkdVbktUdGNiaUFnSUNCa2IyMDFMbk5sZEZSbGVIUkRiMjUwWlc1MEtITjBlV3hsTENBblhGeHVKeUFySUdOdmJuUmxiblFnS3lBblhGeHVKeWs3WEc0Z0lDQWdaRzl0TlM1eVpYQnNZV05sS0d4cGJtc3NJSE4wZVd4bEtUdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnY21WMGRYSnVJR056YzB4cGJtdHpMbXhsYm1kMGFDQStJREE3WEc1OU8xeHVYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1WDJsdWJHbHVaVk5qY21sd2RITWdQU0JtZFc1amRHbHZiaUJmYVc1c2FXNWxVMk55YVhCMGN5aGhjM1FzSUdoeVpXWXBJSHRjYmlBZ2RtRnlJSE5qY21sd2RITWdQU0JrYjIwMUxuRjFaWEo1UVd4c0tHRnpkQ3dnWlhoMFpYSnVZV3hUWTNKcGNIUXBPMXh1SUNCelkzSnBjSFJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYzJOeWFYQjBLU0I3WEc0Z0lDQWdkbUZ5SUhOamNtbHdkRWh5WldZZ1BTQmtiMjAxTG1kbGRFRjBkSEpwWW5WMFpTaHpZM0pwY0hRc0lDZHpjbU1uS1R0Y2JpQWdJQ0IyWVhJZ2RYSnBJRDBnZFhKc0xuSmxjMjlzZG1Vb2FISmxaaXdnYzJOeWFYQjBTSEpsWmlrN1hHNGdJQ0FnZG1GeUlHTnZiblJsYm5RZ1BTQjBhR2x6TGw5amIyNTBaVzUwVzNWeWFWMDdYRzRnSUNBZ2RtRnlJR2x1YkdsdVpXUWdQU0JrYjIwMUxtTnZibk4wY25WamRHOXljeTVsYkdWdFpXNTBLQ2R6WTNKcGNIUW5LVHRjYmlBZ0lDQmtiMjAxTG5ObGRGUmxlSFJEYjI1MFpXNTBLR2x1YkdsdVpXUXNJQ2RjWEc0bklDc2dZMjl1ZEdWdWRDQXJJQ2RjWEc0bktUdGNiaUFnSUNCa2IyMDFMbkpsY0d4aFkyVW9jMk55YVhCMExDQnBibXhwYm1Wa0tUdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnY21WMGRYSnVJSE5qY21sd2RITXViR1Z1WjNSb0lENGdNRHRjYm4wN1hHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVmYVc1c2FXNWxTVzF3YjNKMGN5QTlJR1oxYm1OMGFXOXVJRjlwYm14cGJtVkpiWEJ2Y25SektHRnpkQ3dnYUhKbFppd2diRzloWkdWa0tTQjdYRzRnSUhaaGNpQnBiWEJ2Y25SeklEMGdaRzl0TlM1eGRXVnllVUZzYkNoaGMzUXNJR2x6U0hSdGJFbHRjRzl5ZEU1dlpHVXBPMXh1SUNCcGJYQnZjblJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYUhSdGJFbHRjRzl5ZENrZ2UxeHVJQ0FnSUhaaGNpQnBiWEJ2Y25SSWNtVm1JRDBnWkc5dE5TNW5aWFJCZEhSeWFXSjFkR1VvYUhSdGJFbHRjRzl5ZEN3Z0oyaHlaV1luS1R0Y2JpQWdJQ0IyWVhJZ2RYSnBJRDBnZFhKc0xuSmxjMjlzZG1Vb2FISmxaaXdnYVcxd2IzSjBTSEpsWmlrN1hHNGdJQ0FnYVdZZ0tHeHZZV1JsWkZ0MWNtbGRLU0I3WEc0Z0lDQWdJQ0JrYjIwMUxuSmxiVzkyWlNob2RHMXNTVzF3YjNKMEtUdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdOdmJuUmxiblFnUFNCMGFHbHpMbWRsZEV4dllXUmxaRUZ6ZENoMWNta3NJR3h2WVdSbFpDazdYRzRnSUNBZ1pHOXROUzV5WlhCc1lXTmxLR2gwYld4SmJYQnZjblFzSUdOdmJuUmxiblFwTzF4dUlDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQnlaWFIxY200Z2FXMXdiM0owY3k1c1pXNW5kR2dnUGlBd08xeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUdFZ2NISnZiV2x6WlNCeVpYTnZiSFpwYm1jZ2RHOGdZU0JtYjNKdElHOW1JSFJvWlNCQlUxUWdkMmwwYUNCaGJHd2diR2x1YTNNZ2NtVndiR0ZqWldSY2JpQXFJSGRwZEdnZ2RHaGxJR1J2WTNWdFpXNTBJSFJvWlhrZ2JHbHVheUIwYnk0Z0xtTnpjeUJoYm1RZ0xuTmpjbWx3ZENCbWFXeGxjeUJpWldOdmJXVWdKbXgwTzNOMGVXeGxKbWQwT3lCaGJtUmNiaUFxSUNac2REdHpZM0pwY0hRbVozUTdMQ0J5WlhOd1pXTjBhWFpsYkhrdVhHNGdLbHh1SUNvZ1ZHaGxJR1ZzWlcxbGJuUnpJR2x1SUhSb1pTQnNiMkZrWldRZ1pHOWpkVzFsYm5RZ1lYSmxJSFZ1Ylc5a2FXWnBaV1FnWm5KdmJTQjBhR1ZwY2lCdmNtbG5hVzVoYkZ4dUlDb2daRzlqZFcxbGJuUnpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtSUZSb1pTQmtiMk4xYldWdWRDQjBieUJzYjJGa0xseHVJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUXVQSE4wY21sdVp5eGliMjlzWldGdVBqMTlJR3h2WVdSbFpDQkJiaUJ2WW1wbFkzUWdhMlY1WldRZ1lua2dZV3h5WldGa2VTQnNiMkZrWldRZ1pHOWpkVzFsYm5SekxseHVJQ29nUUhKbGRIVnliaUI3VUhKdmJXbHpaUzQ4Ukc5amRXMWxiblJCVTFRK2ZWeHVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVoyVjBURzloWkdWa1FYTjBJRDBnWm5WdVkzUnBiMjRnWjJWMFRHOWhaR1ZrUVhOMEtHaHlaV1lzSUd4dllXUmxaQ2tnZTF4dUlDQnBaaUFvSVd4dllXUmxaQ2tnZTF4dUlDQWdJR3h2WVdSbFpDQTlJSHQ5TzF4dUlDQjlYRzRnSUd4dllXUmxaRnRvY21WbVhTQTlJSFJ5ZFdVN1hHNGdJSFpoY2lCd1lYSnpaV1JFYjJOMWJXVnVkQ0E5SUhSb2FYTXVjR0Z5YzJWa1JHOWpkVzFsYm5SelcyaHlaV1pkTzF4dUlDQjJZWElnWVc1aGJIbDZaV1JFYjJOMWJXVnVkQ0E5SUhSb2FYTXVhSFJ0YkZ0b2NtVm1YVHRjYmlBZ2RtRnlJR0Z6ZEVOdmNIa2dQU0JrYjIwMUxuQmhjbk5sS0dSdmJUVXVjMlZ5YVdGc2FYcGxLSEJoY25ObFpFUnZZM1Z0Wlc1MEtTazdYRzRnSUM4dklGZG9aVzVsZG1WeUlIZGxJR2x1YkdsdVpTQnpiMjFsZEdocGJtY3NJSEpsYzJWMElHbHViR2x1WldRZ2RHOGdkSEoxWlNCMGJ5QnJibTkzSUhSb1lYUWdZVzV2WVhSb1pYSmNiaUFnTHk4Z2FXNXNhVzVwYm1jZ2NHRnpjeUJwY3lCdVpXVmtaV1E3WEc0Z0lIUm9hWE11WDJsdWJHbHVaVk4wZVd4bGN5aGhjM1JEYjNCNUxDQm9jbVZtS1R0Y2JpQWdkR2hwY3k1ZmFXNXNhVzVsVTJOeWFYQjBjeWhoYzNSRGIzQjVMQ0JvY21WbUtUdGNiaUFnZEdocGN5NWZhVzVzYVc1bFNXMXdiM0owY3loaGMzUkRiM0I1TENCb2NtVm1MQ0JzYjJGa1pXUXBPMXh1SUNCeVpYUjFjbTRnWVhOMFEyOXdlVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRMkZzYkhNZ1lHUnZiVFV1Ym05a1pWZGhiR3RCYkd4Z0lHOXVJR1ZoWTJnZ1pHOWpkVzFsYm5RZ2RHaGhkQ0JnUVc1aGVYcHNaWEpnSUdoaGN5QnNZVzlrWldRdVhHNGdLaUJBY0dGeVlXMGdJSHRQWW1wbFkzUjlJSEJ5WldScFkyRjBaU0JCSUdSdmJUVWdjSEpsWkdsallYUmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlZ4dUlDb3ZYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1Ym05a1pWZGhiR3RFYjJOMWJXVnVkSE1nUFNCbWRXNWpkR2x2YmlCdWIyUmxWMkZzYTBSdlkzVnRaVzUwY3lod2NtVmthV05oZEdVcElIdGNiaUFnWm05eUlDaDJZWElnYUhKbFppQnBiaUIwYUdsekxuQmhjbk5sWkVSdlkzVnRaVzUwY3lrZ2UxeHVJQ0FnSUhaaGNpQnRZWFJqYUNBOUlHUnZiVFV1Ym05a1pWZGhiR3NvZEdocGN5NXdZWEp6WldSRWIyTjFiV1Z1ZEhOYmFISmxabDBzSUhCeVpXUnBZMkYwWlNrN1hHNGdJQ0FnYVdZZ0tHMWhkR05vS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYldGMFkyZzdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdWRXeHNPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkRZV3hzY3lCZ1pHOXROUzV1YjJSbFYyRnNhMEZzYkdBZ2IyNGdaV0ZqYUNCa2IyTjFiV1Z1ZENCMGFHRjBJR0JCYm1GNWVteGxjbUFnYUdGeklHeGhiMlJsWkM1Y2JpQXFJRUJ3WVhKaGJTQWdlMDlpYW1WamRIMGdjSEpsWkdsallYUmxJRUVnWkc5dE5TQndjbVZrYVdOaGRHVXVYRzRnS2lCQWNtVjBkWEp1SUh0UFltcGxZM1I5WEc0Z0tpOWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzV1YjJSbFYyRnNhMEZzYkVSdlkzVnRaVzUwY3lBOUlHWjFibU4wYVc5dUlHNXZaR1ZYWVd4clJHOWpkVzFsYm5SektIQnlaV1JwWTJGMFpTa2dlMXh1SUNCMllYSWdjbVZ6ZFd4MGN5QTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQm9jbVZtSUdsdUlIUm9hWE11Y0dGeWMyVmtSRzlqZFcxbGJuUnpLU0I3WEc0Z0lDQWdkbUZ5SUc1bGQwNXZaR1Z6SUQwZ1pHOXROUzV1YjJSbFYyRnNhMEZzYkNoMGFHbHpMbkJoY25ObFpFUnZZM1Z0Wlc1MGMxdG9jbVZtWFN3Z2NISmxaR2xqWVhSbEtUdGNiaUFnSUNCeVpYTjFiSFJ6SUQwZ2NtVnpkV3gwY3k1amIyNWpZWFFvYm1WM1RtOWtaWE1wTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlR0Y2JseHVMeW9xSUVGdWJtOTBZWFJsY3lCaGJHd2diRzloWkdWa0lHMWxkR0ZrWVhSaElIZHBkR2dnYVhSeklHUnZZM1Z0Wlc1MFlYUnBiMjR1SUNvdlhHNUJibUZzZVhwbGNpNXdjbTkwYjNSNWNHVXVZVzV1YjNSaGRHVWdQU0JtZFc1amRHbHZiaUJoYm01dmRHRjBaU2dwSUh0Y2JpQWdhV1lnS0hSb2FYTXVabVZoZEhWeVpYTXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSFpoY2lCbVpXRjBkWEpsUld3Z1BTQmtiMk56TG1abFlYUjFjbVZGYkdWdFpXNTBLSFJvYVhNdVptVmhkSFZ5WlhNcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRITXVkVzV6YUdsbWRDaG1aV0YwZFhKbFJXd3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWm1WaGRIVnlaVVZzTG1selhTQTlJR1psWVhSMWNtVkZiRHRjYmlBZ2ZWeHVJQ0IyWVhJZ1ltVm9ZWFpwYjNKelFubE9ZVzFsSUQwZ2RHaHBjeTVpWldoaGRtbHZjbk5DZVU1aGJXVTdYRzRnSUhaaGNpQmxiR1Z0Wlc1MFNHVnNjR1Z5SUQwZ1puVnVZM1JwYjI0b1pHVnpZM0pwY0hSdmNpbDdYRzRnSUNBZ1pHOWpjeTVoYm01dmRHRjBaVVZzWlcxbGJuUW9aR1Z6WTNKcGNIUnZjaXdnWW1Wb1lYWnBiM0p6UW5sT1lXMWxLVHRjYmlBZ2ZUdGNiaUFnZEdocGN5NWxiR1Z0Wlc1MGN5NW1iM0pGWVdOb0tHVnNaVzFsYm5SSVpXeHdaWElwTzF4dUlDQjBhR2x6TG1KbGFHRjJhVzl5Y3k1bWIzSkZZV05vS0dWc1pXMWxiblJJWld4d1pYSXBPeUF2THlCVFlXMWxJSE5vWVhCbExseHVJQ0IwYUdsekxtSmxhR0YyYVc5eWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHSmxhR0YyYVc5eUtYdGNiaUFnSUNCcFppQW9ZbVZvWVhacGIzSXVhWE1nSVQwOUlHSmxhR0YyYVc5eUxuTjViV0p2YkNBbUppQmlaV2hoZG1sdmNpNXplVzFpYjJ3cElIdGNiaUFnSUNBZ0lIUm9hWE11WW1Wb1lYWnBiM0p6UW5sT1lXMWxXMkpsYUdGMmFXOXlMbk41YldKdmJGMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdmVnh1SUNCOUxtSnBibVFvZEdocGN5a3BPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdZWFIwWVdOb1JHOXRUVzlrZFd4bEtIQmhjbk5sWkVsdGNHOXlkQ3dnWld4bGJXVnVkQ2tnZTF4dUlDQjJZWElnWkc5dFRXOWtkV3hsY3lBOUlIQmhjbk5sWkVsdGNHOXlkRnNuWkc5dExXMXZaSFZzWlNkZE8xeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2daRzl0VFc5a2RXeGxPeUJwSUR3Z1pHOXRUVzlrZFd4bGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR1J2YlUxdlpIVnNaU0E5SUdSdmJVMXZaSFZzWlhOYmFWMDdYRzRnSUNBZ2FXWWdLR1J2YlRVdVoyVjBRWFIwY21saWRYUmxLR1J2YlUxdlpIVnNaU3dnSjJsa0p5a2dQVDA5SUdWc1pXMWxiblF1YVhNcElIdGNiaUFnSUNBZ0lHVnNaVzFsYm5RdVpHOXRUVzlrZFd4bElEMGdaRzl0VFc5a2RXeGxPMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNHZLaW9nVW1WdGIzWmxjeUJ5WldSMWJtUmhiblFnY0hKdmNHVnlkR2xsY3lCbWNtOXRJSFJvWlNCamIyeHNaV04wWldRZ1pHVnpZM0pwY0hSdmNuTXVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVkyeGxZVzRnUFNCbWRXNWpkR2x2YmlCamJHVmhiaWdwSUh0Y2JpQWdkR2hwY3k1bGJHVnRaVzUwY3k1bWIzSkZZV05vS0dSdlkzTXVZMnhsWVc1RmJHVnRaVzUwS1R0Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUVc1aGJIbDZaWEk3WEc0aVhYMD0iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlc3V0aWwgICAgPSByZXF1aXJlKCcuL2VzdXRpbCcpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUnKTtcblxudmFyIGFuYWx5emVQcm9wZXJ0aWVzID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBhbmFseXplZFByb3BzID0gW107XG5cbiAgaWYgKG5vZGUudHlwZSAhPSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gYW5hbHl6ZWRQcm9wcztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICB2YXIgcHJvcCA9IGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0eSk7XG4gICAgcHJvcC5wdWJsaXNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHByb3BlcnR5LnZhbHVlLnR5cGUgPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAvKipcbiAgICAgICAqIFBhcnNlIHRoZSBleHByZXNzaW9uIGluc2lkZSBhIHByb3BlcnR5IG9iamVjdCBibG9jay5cbiAgICAgICAqIHByb3BlcnR5OiB7XG4gICAgICAgKiAgIGtleToge1xuICAgICAgICogICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAqICAgICBub3RpZnk6IHRydWUsXG4gICAgICAgKiAgICAgdmFsdWU6IC0xLFxuICAgICAgICogICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICogICAgIHJlZmxlY3RUb0F0dHJpYnV0ZTogdHJ1ZVxuICAgICAgICogICB9XG4gICAgICAgKiB9XG4gICAgICAgKi9cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcGVydHkudmFsdWUucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcGVydHlBcmcgPSBwcm9wZXJ0eS52YWx1ZS5wcm9wZXJ0aWVzW2pdO1xuICAgICAgICB2YXIgcHJvcGVydHlLZXkgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcGVydHlBcmcua2V5KTtcblxuICAgICAgICBzd2l0Y2gocHJvcGVydHlLZXkpIHtcbiAgICAgICAgICBjYXNlICd0eXBlJzoge1xuICAgICAgICAgICAgcHJvcC50eXBlID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgdHlwZSBpbiBwcm9wZXJ0eSBvYmplY3QuJyxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogcHJvcGVydHlBcmcubG9jLnN0YXJ0XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ25vdGlmeSc6IHtcbiAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3Aubm90aWZ5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvYnNlcnZlcic6IHtcbiAgICAgICAgICAgIHByb3Aub2JzZXJ2ZXIgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBwcm9wLm9ic2VydmVyTm9kZSA9IHByb3BlcnR5QXJnLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHByb3Aub2JzZXJ2ZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5vYnNlcnZlciA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVhZE9ubHknOiB7XG4gICAgICAgICAgICBwcm9wLnJlYWRPbmx5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AucmVhZE9ubHkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWFkT25seSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVmbGVjdFRvQXR0cmlidXRlJzoge1xuICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZyk7XG4gICAgICAgICAgICBpZiAocHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgICAgcHJvcC5kZWZhdWx0ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AuZGVmYXVsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLmRlZmF1bHQgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb3AudHlwZSkge1xuICAgICAgdGhyb3cge1xuICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGFuYWx5emVkUHJvcHMucHVzaChwcm9wKTtcbiAgfVxuICByZXR1cm4gYW5hbHl6ZWRQcm9wcztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhbmFseXplUHJvcGVydGllcztcblxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyB1c2VmdWwgdG9vbCB0byB2aXN1YWxpemUgQVNUOiBodHRwOi8vZXNwcmltYS5vcmcvZGVtby9wYXJzZS5odG1sXG5cbi8qKlxuICogY29udmVydHMgbGl0ZXJhbDoge1widHlwZVwiOiBcIkxpdGVyYWxcIiwgXCJ2YWx1ZVwiOiA1LCAgXCJyYXdcIjogXCI1XCIgfVxuICogdG8gc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxUb1ZhbHVlKGxpdGVyYWwpIHtcbiAgcmV0dXJuIGxpdGVyYWwudmFsdWU7XG59XG5cbi8qKlxuICogY29udmVydHMgdW5hcnkgdG8gc3RyaW5nXG4gKiB1bmFyeTogeyB0eXBlOiAnVW5hcnlFeHByZXNzaW9uJywgb3BlcmF0b3I6ICctJywgYXJndW1lbnQ6IHsgLi4uIH0gfVxuICovXG5mdW5jdGlvbiB1bmFyeVRvVmFsdWUodW5hcnkpIHtcbiAgdmFyIGFyZ1ZhbHVlID0gZXhwcmVzc2lvblRvVmFsdWUodW5hcnkuYXJndW1lbnQpO1xuICBpZiAoYXJnVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG4gIHJldHVybiB1bmFyeS5vcGVyYXRvciArIGFyZ1ZhbHVlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIGlkZW50aWZpZXIgdG8gaXRzIHZhbHVlXG4gKiBpZGVudGlmaWVyIHsgXCJ0eXBlXCI6IFwiSWRlbnRpZmllclwiLCBcIm5hbWVcIjogXCJOdW1iZXIgfVxuICovXG5mdW5jdGlvbiBpZGVudGlmaWVyVG9WYWx1ZShpZGVudGlmaWVyKSB7XG4gIHJldHVybiBpZGVudGlmaWVyLm5hbWU7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gaXMgYSBibG9jayBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKGZuKSB7XG4gIGlmIChmbi5ib2R5LnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiKVxuICAgIHJldHVybiBibG9ja1N0YXRlbWVudFRvVmFsdWUoZm4uYm9keSk7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uRXhwcmVzc2lvblRvVmFsdWUoZm4pIHtcbiAgaWYgKGZuLmJvZHkudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCIpXG4gICAgcmV0dXJuIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShmbi5ib2R5KTtcbn1cbi8qKlxuICogQmxvY2sgc3RhdGVtZW50OiBmaW5kIGxhc3QgcmV0dXJuIHN0YXRlbWVudCwgYW5kIHJldHVybiBpdHMgdmFsdWVcbiAqL1xuZnVuY3Rpb24gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrKSB7XG4gIGZvciAodmFyIGk9YmxvY2suYm9keS5sZW5ndGggLSAxOyBpPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJsb2NrLmJvZHlbaV0udHlwZSA9PT0gXCJSZXR1cm5TdGF0ZW1lbnRcIilcbiAgICAgIHJldHVybiByZXR1cm5TdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrLmJvZHlbaV0pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHJldHVybidzIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIHJldHVyblN0YXRlbWVudFRvVmFsdWUocmV0KSB7XG4gIHJldHVybiBleHByZXNzaW9uVG9WYWx1ZShyZXQuYXJndW1lbnQpO1xufVxuXG4vKipcbiAqIEVuY2xvc2UgY29udGFpbmluZyB2YWx1ZXMgaW4gW11cbiAqL1xuZnVuY3Rpb24gYXJyYXlFeHByZXNzaW9uVG9WYWx1ZShhcnJ5KSB7XG4gIHZhciB2YWx1ZSA9ICdbJztcbiAgZm9yICh2YXIgaT0wOyBpPGFycnkuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdiA9IGV4cHJlc3Npb25Ub1ZhbHVlKGFycnkuZWxlbWVudHNbaV0pO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gdjtcbiAgfVxuICB2YWx1ZSArPSAnXSc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBNYWtlIGl0IGxvb2sgbGlrZSBhbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUob2JqKSB7XG4gIHZhciB2YWx1ZSA9ICd7JztcbiAgZm9yICh2YXIgaT0wOyBpPG9iai5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGsgPSBleHByZXNzaW9uVG9WYWx1ZShvYmoucHJvcGVydGllc1tpXS5rZXkpO1xuICAgIHZhciB2ID0gZXhwcmVzc2lvblRvVmFsdWUob2JqLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gJ1wiJyArIGsgKyAnXCI6ICcgKyB2O1xuICB9XG4gIHZhbHVlICs9ICd9JztcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE1lbWJlckV4cHJlc3Npb24gcmVmZXJlbmNlcyBhIHZhcmlhYmxlIHdpdGggbmFtZVxuICovXG5mdW5jdGlvbiBtZW1iZXJFeHByZXNzaW9uVG9WYWx1ZShtZW1iZXIpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25Ub1ZhbHVlKG1lbWJlci5vYmplY3QpICsgXCIuXCIgKyBleHByZXNzaW9uVG9WYWx1ZShtZW1iZXIucHJvcGVydHkpO1xufVxuXG4vKipcbiAqIFRyaWVzIHRvIGdldCBhIHZhbHVlIGZyb20gZXhwcmVzc2lvbi4gSGFuZGxlcyBMaXRlcmFsLCBVbmFyeUV4cHJlc3Npb25cbiAqIHJldHVybnMgdW5kZWZpbmVkIG9uIGZhaWx1cmVcbiAqIHZhbHVlRXhwcmVzc2lvbiBleGFtcGxlOlxuICogeyB0eXBlOiBcIkxpdGVyYWxcIixcbiAqL1xuZnVuY3Rpb24gZXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKSB7XG4gIHN3aXRjaCh2YWx1ZUV4cHJlc3Npb24udHlwZSkge1xuICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgcmV0dXJuIGxpdGVyYWxUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB1bmFyeVRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOlxuICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBmdW5jdGlvbkV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnQXJyYXlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBhcnJheUV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgQ0FOVF9DT05WRVJUID0gJ1VOS05PV04nO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENBTlRfQ09OVkVSVDogQ0FOVF9DT05WRVJULFxuICBleHByZXNzaW9uVG9WYWx1ZTogZXhwcmVzc2lvblRvVmFsdWVcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGRvY3MgICA9IHJlcXVpcmUoJy4vZG9jcycpO1xudmFyIGVzdXRpbCA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIganNkb2MgID0gcmVxdWlyZSgnLi9qc2RvYycpO1xudmFyIGFuYWx5emVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9hbmFseXplLXByb3BlcnRpZXMnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmVoYXZpb3JGaW5kZXIoKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59IFRoZSBiZWhhdmlvcnMgd2UndmUgZm91bmQuICovXG4gIHZhciBiZWhhdmlvcnMgPSBbXTtcblxuICB2YXIgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcblxuICAvKipcbiAgICogc3BlY2lhbC1jYXNlIHByb3BlcnRpZXNcbiAgICovXG4gIHZhciBwcm9wZXJ0eUhhbmRsZXJzID0ge1xuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIG1lcmdlcyBiZWhhdmlvciB3aXRoIHByZWV4aXN0aW5nIGJlaGF2aW9yIHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICogaGVyZSB0byBzdXBwb3J0IG11bHRpcGxlIEBwb2x5bWVyQmVoYXZpb3IgdGFncyByZWZlcnJpbmdcbiAgICogdG8gc2FtZSBiZWhhdmlvci4gU2VlIGlyb24tbXVsdGktc2VsZWN0YWJsZSBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlQmVoYXZpb3IobmV3QmVoYXZpb3IpIHtcbiAgICB2YXIgaXNCZWhhdmlvckltcGwgPSBmdW5jdGlvbihiKSB7IC8vIGZpbHRlciBvdXQgQmVoYXZpb3JJbXBsXG4gICAgICByZXR1cm4gYi5pbmRleE9mKG5ld0JlaGF2aW9yLmlzKSA9PT0gLTE7XG4gICAgfTtcbiAgICBmb3IgKHZhciBpPTA7IGk8YmVoYXZpb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3QmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yc1tpXS5pcylcbiAgICAgICAgY29udGludWU7XG4gICAgICAvLyBtZXJnZSBkZXNjLCBsb25nZXN0IGRlc2Mgd2luc1xuICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MpIHtcbiAgICAgICAgaWYgKGJlaGF2aW9yc1tpXS5kZXNjKSB7XG4gICAgICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MubGVuZ3RoID4gYmVoYXZpb3JzW2ldLmRlc2MubGVuZ3RoKVxuICAgICAgICAgICAgYmVoYXZpb3JzW2ldLmRlc2MgPSBuZXdCZWhhdmlvci5kZXNjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGJlaGF2aW9yc1tpXS5kZXNjID0gbmV3QmVoYXZpb3IuZGVzYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWVyZ2UgZGVtb3NcbiAgICAgIGJlaGF2aW9yc1tpXS5kZW1vcyA9IChiZWhhdmlvcnNbaV0uZGVtb3MgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5kZW1vcyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBldmVudHMsXG4gICAgICBiZWhhdmlvcnNbaV0uZXZlbnRzID0gKGJlaGF2aW9yc1tpXS5ldmVudHMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5ldmVudHMgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgcHJvcGVydGllc1xuICAgICAgYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgPSAoYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5wcm9wZXJ0aWVzIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIGJlaGF2aW9yc1xuICAgICAgYmVoYXZpb3JzW2ldLmJlaGF2aW9ycyA9XG4gICAgICAgIChiZWhhdmlvcnNbaV0uYmVoYXZpb3JzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuYmVoYXZpb3JzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKGlzQmVoYXZpb3JJbXBsKTtcbiAgICAgIHJldHVybiBiZWhhdmlvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBuZXdCZWhhdmlvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIHRoZSBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGJlaGF2aW9yIGZyb20gYSBub2RlLlxuICAgKi9cbiAgZnVuY3Rpb24gYmVoYXZpb3JFeHByZXNzaW9uKG5vZGUpIHtcbiAgICBzd2l0Y2gobm9kZS50eXBlKSB7XG4gICAgICBjYXNlICdFeHByZXNzaW9uU3RhdGVtZW50JzpcbiAgICAgICAgcmV0dXJuIG5vZGUuZXhwcmVzc2lvbi5yaWdodDtcbiAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMCA/IG5vZGUuZGVjbGFyYXRpb25zWzBdLmluaXQgOiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3Mgd2hldGhlciBhbiBleHByZXNzaW9uIGlzIGEgc2ltcGxlIGFycmF5IGNvbnRhaW5pbmcgb25seSBtZW1iZXJcbiAgICogZXhwcmVzc2lvbnMgb3IgaWRlbnRpZmllcnMuXG4gICAqL1xuICBmdW5jdGlvbiBpc1NpbXBsZUJlaGF2aW9yQXJyYXkoZXhwcmVzc2lvbikge1xuICAgIGlmICghZXhwcmVzc2lvbiB8fCBleHByZXNzaW9uLnR5cGUgIT09ICdBcnJheUV4cHJlc3Npb24nKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0wOyBpIDwgZXhwcmVzc2lvbi5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV4cHJlc3Npb24uZWxlbWVudHNbaV0udHlwZSAhPT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAgICAgZXhwcmVzc2lvbi5lbGVtZW50c1tpXS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciB0ZW1wbGF0aXplciA9IFwiUG9seW1lci5UZW1wbGF0aXplclwiO1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgd2l0aCBAYmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHJldHVybjsgIC8vIEFtYmlndW91cy5cbiAgICAgIHRoaXMuX2luaXRCZWhhdmlvcihub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBhc3NpZ25tZW50cyB3aXRoIEBwb2x5bWVyQmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB0aGlzLl9pbml0QmVoYXZpb3IocGFyZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5sZWZ0KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfcGFyc2VDaGFpbmVkQmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAvLyBpZiBjdXJyZW50IGJlaGF2aW9yIGlzIHBhcnQgb2YgYW4gYXJyYXksIGl0IGdldHMgZXh0ZW5kZWQgYnkgb3RoZXIgYmVoYXZpb3JzXG4gICAgICAvLyBpbnNpZGUgdGhlIGFycmF5LiBFeDpcbiAgICAgIC8vIFBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yID0gWyB7Li4uLn0sIFBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcl1cbiAgICAgIC8vIFdlIGFkZCB0aGVzZSB0byBiZWhhdmlvcnMgYXJyYXlcbiAgICAgIHZhciBleHByZXNzaW9uID0gYmVoYXZpb3JFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgdmFyIGNoYWluZWQgPSBbXTtcbiAgICAgIGlmIChleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSA9PT0gJ0FycmF5RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgZXhwcmVzc2lvbi5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyB8fFxuICAgICAgICAgICAgICBleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgY2hhaW5lZC5wdXNoKGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKGV4cHJlc3Npb24uZWxlbWVudHNbaV0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYWluZWQubGVuZ3RoID4gMClcbiAgICAgICAgICBjdXJyZW50QmVoYXZpb3IuYmVoYXZpb3JzID0gY2hhaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRCZWhhdmlvcjogZnVuY3Rpb24obm9kZSwgZ2V0TmFtZSkge1xuICAgICAgdmFyIGNvbW1lbnQgPSBlc3V0aWwuZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpO1xuICAgICAgdmFyIHN5bWJvbCA9IGdldE5hbWUoKTtcbiAgICAgIC8vIFF1aWNrbHkgZmlsdGVyIGRvd24gdG8gcG90ZW50aWFsIGNhbmRpZGF0ZXMuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgY29tbWVudC5pbmRleE9mKCdAcG9seW1lckJlaGF2aW9yJykgPT09IC0xKSB7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHRlbXBsYXRpemVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgY3VycmVudEJlaGF2aW9yID0ge1xuICAgICAgICB0eXBlOiAnYmVoYXZpb3InLFxuICAgICAgICBkZXNjOiBjb21tZW50LFxuICAgICAgICBldmVudHM6IGVzdXRpbC5nZXRFdmVudENvbW1lbnRzKG5vZGUpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4geyBkZXNjOiBldmVudH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuXG4gICAgICBkb2NzLmFubm90YXRlQmVoYXZpb3IoY3VycmVudEJlaGF2aW9yKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IHBhcnNlZCBhIGJlaGF2aW9yIHRhZyFcbiAgICAgIGlmICghanNkb2MuaGFzVGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicpICYmXG4gICAgICAgICAgc3ltYm9sICE9PSB0ZW1wbGF0aXplcikge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0ganNkb2MuZ2V0VGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicsICduYW1lJyk7XG4gICAgICBjdXJyZW50QmVoYXZpb3Iuc3ltYm9sID0gc3ltYm9sO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBjdXJyZW50QmVoYXZpb3Iuc3ltYm9sO1xuICAgICAgfVxuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBAcG9seW1lckJlaGF2aW9yOicsIGNvbW1lbnQpO1xuICAgICAgfVxuICAgICAgY3VycmVudEJlaGF2aW9yLmlzID0gbmFtZTtcblxuICAgICAgdGhpcy5fcGFyc2VDaGFpbmVkQmVoYXZpb3JzKG5vZGUpO1xuXG4gICAgICBjdXJyZW50QmVoYXZpb3IgPSBtZXJnZUJlaGF2aW9yKGN1cnJlbnRCZWhhdmlvcik7XG5cbiAgICAgIC8vIFNvbWUgYmVoYXZpb3JzIGFyZSBqdXN0IGxpc3RzIG9mIG90aGVyIGJlaGF2aW9ycy4gSWYgdGhpcyBpcyBvbmUgdGhlblxuICAgICAgLy8gYWRkIGl0IHRvIGJlaGF2aW9ycyByaWdodCBhd2F5LlxuICAgICAgaWYgKGlzU2ltcGxlQmVoYXZpb3JBcnJheShiZWhhdmlvckV4cHJlc3Npb24obm9kZSkpKSB7XG4gICAgICAgIC8vIFRPRE8oYWpvKTogQWRkIGEgdGVzdCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgcHJvcGVydGllc2AuXG4gICAgICAgIGlmICghY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMpIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIGlmIChiZWhhdmlvcnMuaW5kZXhPZihjdXJyZW50QmVoYXZpb3IpID09PSAtMSlcbiAgICAgICAgICBiZWhhdmlvcnMucHVzaChjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0IGV4cHJlc3Npb24gYWZ0ZXIgc3VjaCBhbiBhc3NpZ25tZW50IGlzIHRoZVxuICAgICAqIGJlaGF2aW9yJ3MgZGVjbGFyYXRpb24uIFNlZW1zIHRvIGJlIGEgZGVjZW50IGFzc3VtcHRpb24gZm9yIG5vdy5cbiAgICAgKi9cbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKCFjdXJyZW50QmVoYXZpb3IgfHwgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMgPSBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcyB8fCBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICB2YXIgbmFtZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wLmtleSk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW50IGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgIHByb3BlcnR5SGFuZGxlcnNbbmFtZV0ocHJvcC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMucHVzaChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiZWhhdmlvcnMucHVzaChjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGJlaGF2aW9yczogYmVoYXZpb3JzfTtcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbid1c2Ugc3RyaWN0JztcblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuXG52YXIganNkb2MgPSByZXF1aXJlKCcuL2pzZG9jJyk7XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG4vKiogUHJvcGVydGllcyBvbiBlbGVtZW50IHByb3RvdHlwZXMgdGhhdCBhcmUgcHVyZWx5IGNvbmZpZ3VyYXRpb24uICovXG52YXIgRUxFTUVOVF9DT05GSUdVUkFUSU9OID0gW1xuICAnYXR0YWNoZWQnLFxuICAnYXR0cmlidXRlQ2hhbmdlZCcsXG4gICdjb25maWd1cmUnLFxuICAnY29uc3RydWN0b3InLFxuICAnY3JlYXRlZCcsXG4gICdkZXRhY2hlZCcsXG4gICdlbmFibGVDdXN0b21TdHlsZVByb3BlcnRpZXMnLFxuICAnZXh0ZW5kcycsXG4gICdob3N0QXR0cmlidXRlcycsXG4gICdpcycsXG4gICdsaXN0ZW5lcnMnLFxuICAnbWl4aW5zJyxcbiAgJ29ic2VydmVycycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ3JlYWR5JyxcbiAgJ3JlZ2lzdGVyZWQnXG5dO1xuXG4vKiogVGFncyB1bmRlcnN0b29kIGJ5IHRoZSBhbm5vdGF0aW9uIHByb2Nlc3MsIHRvIGJlIHJlbW92ZWQgZHVyaW5nIGBjbGVhbmAuICovXG52YXIgSEFORExFRF9UQUdTID0gW1xuICAncGFyYW0nLFxuICAncmV0dXJuJyxcbiAgJ3R5cGUnLFxuXTtcblxuLyoqXG4gKiBBbm5vdGF0ZXMgSHlkcm9seXNpcyBkZXNjcmlwdG9ycywgcHJvY2Vzc2luZyBhbnkgYGRlc2NgIHByb3BlcnRpZXMgYXMgSlNEb2MuXG4gKlxuICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIGEgbW9yZSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMsIHN1Y2ggYXNcbiAqIGBhbm5vdGF0ZUVsZW1lbnRgLlxuICpcbiAqIFByb2Nlc3NlZCBKU0RvYyB2YWx1ZXMgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB2aWEgdGhlIGBqc2RvY2AgcHJvcGVydHkgb24gYVxuICogZGVzY3JpcHRvciBub2RlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG5vZGUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlKGRlc2NyaXB0b3IpIHtcbiAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuanNkb2MpIHJldHVybiBkZXNjcmlwdG9yO1xuXG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZXNjID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MgPSBqc2RvYy5wYXJzZUpzZG9jKGRlc2NyaXB0b3IuZGVzYyk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmVzZW50IHRoZSBub3JtYWxpemVkIGZvcm0gb2YgYSBkZXNjcmlwdG9yLlxuICAgIGRlc2NyaXB0b3IuanNkb2Mub3JpZyA9IGRlc2NyaXB0b3IuZGVzYztcbiAgICBkZXNjcmlwdG9yLmRlc2MgICAgICAgPSBkZXNjcmlwdG9yLmpzZG9jLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIEBldmVudCwgQGhlcm8sICYgQGRlbW8gdGFnc1xuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5ldmVudHMpIHtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBfYW5ub3RhdGVFdmVudChldmVudCk7XG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci5ldmVudHMuc29ydCggZnVuY3Rpb24oYSxiKSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuICBkZXNjcmlwdG9yLmRlbW9zID0gW107XG4gIGlmIChkZXNjcmlwdG9yLmpzZG9jICYmIGRlc2NyaXB0b3IuanNkb2MudGFncykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MudGFncy5mb3JFYWNoKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHN3aXRjaCh0YWcudGFnKSB7XG4gICAgICAgIGNhc2UgJ2hlcm8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuaGVybyA9IHRhZy5uYW1lIHx8ICdoZXJvLnBuZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbW8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuZGVtb3MucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiB0YWcuZGVzY3JpcHRpb24gfHwgJ2RlbW8nLFxuICAgICAgICAgICAgcGF0aDogdGFnLm5hbWUgfHwgJ2RlbW8vaW5kZXguaHRtbCdcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaEJ5TmFtZShwcm9wYSwgcHJvcGIpIHtcbiAgcmV0dXJuIHByb3BhLm5hbWUgPT0gcHJvcGIubmFtZTtcbn1cblxuZnVuY3Rpb24gY29weVByb3BlcnRpZXMoZnJvbSwgdG8sIGJlaGF2aW9yc0J5TmFtZSkge1xuICBpZiAoZnJvbS5wcm9wZXJ0aWVzKSB7XG4gICAgZnJvbS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZnJvbVByb3Ape1xuICAgICAgZm9yICh2YXIgdG9Qcm9wLCBpID0gMDsgaSA8IHRvLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG9Qcm9wID0gdG8ucHJvcGVydGllc1tpXTtcbiAgICAgICAgaWYgKGZyb21Qcm9wLm5hbWUgPT09IHRvUHJvcC5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbmV3UHJvcCA9IHtfX2Zyb21CZWhhdmlvcjogZnJvbS5pc307XG4gICAgICBpZiAoZnJvbVByb3AuX19mcm9tQmVoYXZpb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMoZnJvbVByb3ApLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHlGaWVsZCl7XG4gICAgICAgIG5ld1Byb3BbcHJvcGVydHlGaWVsZF0gPSBmcm9tUHJvcFtwcm9wZXJ0eUZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgdG8ucHJvcGVydGllcy5wdXNoKG5ld1Byb3ApO1xuICAgIH0pO1xuICB9XG4gIGlmICghZnJvbS5iZWhhdmlvcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZnJvbS5iZWhhdmlvcnMuZm9yRWFjaChmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgdmFyIGRlZmluZWRCZWhhdmlvciA9IGJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvcl0gfHwgYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF07XG4gICAgaWYgKCFkZWZpbmVkQmVoYXZpb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29weVByb3BlcnRpZXMoZGVmaW5lZEJlaGF2aW9yLCB0bywgYmVoYXZpb3JzQnlOYW1lKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1peGluQmVoYXZpb3JzKGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSkge1xuICBpZiAoZGVzY3JpcHRvci5iZWhhdmlvcnMpIHtcbiAgICBkZXNjcmlwdG9yLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICAgIGlmICghYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yXSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJCZWhhdmlvciBcIiArIGJlaGF2aW9yICsgXCIgbm90IGZvdW5kIVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlZmluZWRCZWhhdmlvciA9IGJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvcl07XG4gICAgICBjb3B5UHJvcGVydGllcyhkZWZpbmVkQmVoYXZpb3IsIGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZG9jdW1lbnRhdGlvbiBmb3VuZCB3aXRoaW4gYSBIeWRyb2x5c2lzIGVsZW1lbnQgZGVzY3JpcHRvci4gQWxzb1xuICogc3VwcG9ydHMgYmVoYXZpb3JzLlxuICpcbiAqIElmIHRoZSBlbGVtZW50IHdhcyBwcm9jZXNzZWQgdmlhIGBoeWRyb2xpemVgLCB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb25cbiAqIHdpbGwgYWxzbyBiZSBleHRyYWN0ZWQgdmlhIGl0cyA8ZG9tLW1vZHVsZT4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIGVsZW1lbnQgZGVzY3JpcHRvci5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlRWxlbWVudChkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmRlc2MgJiYgZGVzY3JpcHRvci50eXBlID09PSAnZWxlbWVudCcpIHtcbiAgICBkZXNjcmlwdG9yLmRlc2MgPSBfZmluZEVsZW1lbnREb2NzKGRlc2NyaXB0b3IuaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRvbU1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2NyaXB0RWxlbWVudCk7XG4gIH1cbiAgYW5ub3RhdGUoZGVzY3JpcHRvcik7XG5cbiAgLy8gVGhlIGA8ZG9tLW1vZHVsZT5gIGlzIHRvbyBsb3cgbGV2ZWwgZm9yIG1vc3QgbmVlZHMsIGFuZCBpdCBpcyBfbm90X1xuICAvLyBzZXJpYWxpemFibGUuIFNvIHdlIGRyb3AgaXQgbm93IHRoYXQgd2UndmUgZXh0cmFjdGVkIGFsbCB0aGUgdXNlZnVsIGJpdHNcbiAgLy8gZnJvbSBpdC5cbiAgLy8gVE9ETzogRG9uJ3Qgd29ycnkgYWJvdXQgc2VyaWFsaXphYmlsaXR5IGhlcmUsIHByb3ZpZGUgYW4gQVBJIHRvIGdldCBKU09OLlxuICBkZWxldGUgZGVzY3JpcHRvci5kb21Nb2R1bGU7XG5cbiAgbWl4aW5CZWhhdmlvcnMoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKTtcblxuICAvLyBEZXNjcmlwdG9ycyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIGBkZXNjYCBwcm9wZXJ0aWVzIHBhcnNlZCBhcyBKU0RvYy5cbiAgZGVzY3JpcHRvci5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICAvLyBGZWF0dXJlIHByb3BlcnRpZXMgYXJlIHNwZWNpYWwsIGNvbmZpZ3VyYXRpb24gaXMgcmVhbGx5IGp1c3QgYSBtYXR0ZXIgb2ZcbiAgICAvLyBpbmhlcml0YW5jZS4uLlxuICAgIGFubm90YXRlUHJvcGVydHkocHJvcGVydHksIGRlc2NyaXB0b3IuYWJzdHJhY3QpO1xuICB9KTtcblxuICAvLyBJdCBtYXkgc2VlbSBsaWtlIG92ZXJraWxsIHRvIGFsd2F5cyBzb3J0LCBidXQgd2UgaGF2ZSBhbiBhc3N1bXB0aW9uIHRoYXRcbiAgLy8gdGhlc2UgcHJvcGVydGllcyBhcmUgdHlwaWNhbGx5IGJlaW5nIGNvbnN1bWVkIGJ5IHVzZXItdmlzaWJsZSB0b29saW5nLlxuICAvLyBBcyBzdWNoLCBpdCdzIGdvb2QgdG8gaGF2ZSBjb25zaXN0ZW50IG91dHB1dC9vcmRlcmluZyB0byBhaWQgdGhlIHVzZXIuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAvLyBQcml2YXRlIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsYXN0LlxuICAgIGlmIChhLnByaXZhdGUgJiYgIWIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmICghYS5wcml2YXRlICYmIGIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIC8vIE90aGVyd2lzZSwgd2UncmUganVzdCBzb3J0aW5nIGFscGhhYmV0aWNhbGx5LlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgYmVoYXZpb3IgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIGJlaGF2aW9yIGRlc2NyaXB0b3JcbiAqIEByZXR1cm4ge09iamVjdH0gZGVzY3JpcHRvciBwYXNzZWQgaW4gYXMgcGFyYW1cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVCZWhhdmlvcihkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpIHtcbiAgYW5ub3RhdGUoZGVzY3JpcHRvcik7XG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZXZlbnQgZG9jdW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBfYW5ub3RhdGVFdmVudChkZXNjcmlwdG9yKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICAvLyBwcm9jZXNzIEBldmVudFxuICB2YXIgZXZlbnRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2V2ZW50Jyk7XG4gIGRlc2NyaXB0b3IubmFtZSA9IGV2ZW50VGFnID8gZXZlbnRUYWcuZGVzY3JpcHRpb24gOiBcIk4vQVwiO1xuXG4gIC8vIHByb2Nlc3MgQHBhcmFtc1xuICBkZXNjcmlwdG9yLnBhcmFtcyA9IChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pXG4gICAgLmZpbHRlciggZnVuY3Rpb24odGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnRhZyA9PT0gJ3BhcmFtJztcbiAgICB9KVxuICAgIC5tYXAoIGZ1bmN0aW9uKHRhZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdGFnLnR5cGUgfHwgXCJOL0FcIixcbiAgICAgICAgZGVzYzogdGFnLmRlc2NyaXB0aW9uLFxuICAgICAgICBuYW1lOiB0YWcubmFtZSB8fCBcIk4vQVwiXG4gICAgICB9O1xuICAgIH0pO1xuICAvLyBwcm9jZXNzIEBwYXJhbXNcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGRvY3VtZW50YXRpb24gZm91bmQgYWJvdXQgYSBIeWRyb2x5c2lzIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNvbmZpZ3VyYXRpb24gSWYgdHJ1ZSwgYGNvbmZpZ3VyYXRpb25gIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdGlvciB0aGF0IHdhcyBnaXZlbi5cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVQcm9wZXJ0eShkZXNjcmlwdG9yLCBpZ25vcmVDb25maWd1cmF0aW9uKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICBpZiAoZGVzY3JpcHRvci5uYW1lWzBdID09PSAnXycgfHwganNkb2MuaGFzVGFnKGRlc2NyaXB0b3IuanNkb2MsICdwcml2YXRlJykpIHtcbiAgICBkZXNjcmlwdG9yLnByaXZhdGUgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCFpZ25vcmVDb25maWd1cmF0aW9uICYmIEVMRU1FTlRfQ09ORklHVVJBVElPTi5pbmRleE9mKGRlc2NyaXB0b3IubmFtZSkgIT09IC0xKSB7XG4gICAgZGVzY3JpcHRvci5wcml2YXRlICAgICAgID0gdHJ1ZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgLy8gQHR5cGUgSlNEb2Mgd2luc1xuICBkZXNjcmlwdG9yLnR5cGUgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ3R5cGUnLCAndHlwZScpIHx8IGRlc2NyaXB0b3IudHlwZTtcblxuICBpZiAoZGVzY3JpcHRvci50eXBlLm1hdGNoKC9eZnVuY3Rpb24vaSkpIHtcbiAgICBfYW5ub3RhdGVGdW5jdGlvblByb3BlcnR5KGRlc2NyaXB0b3IpO1xuICB9XG5cbiAgLy8gQGRlZmF1bHQgSlNEb2Mgd2luc1xuICB2YXIgZGVmYXVsdFRhZyA9IGpzZG9jLmdldFRhZyhkZXNjcmlwdG9yLmpzZG9jLCAnZGVmYXVsdCcpO1xuICBpZiAoZGVmYXVsdFRhZyAhPT0gbnVsbCkge1xuICAgIHZhciBuZXdEZWZhdWx0ID0gKGRlZmF1bHRUYWcubmFtZSB8fCAnJykgKyAoZGVmYXVsdFRhZy5kZXNjcmlwdGlvbiB8fCAnJyk7XG4gICAgaWYgKG5ld0RlZmF1bHQgIT09ICcnKSB7XG4gICAgICBkZXNjcmlwdG9yLmRlZmF1bHQgPSBuZXdEZWZhdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKiogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIF9hbm5vdGF0ZUZ1bmN0aW9uUHJvcGVydHkoZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLmZ1bmN0aW9uID0gdHJ1ZTtcblxuICB2YXIgcmV0dXJuVGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdyZXR1cm4nKTtcbiAgaWYgKHJldHVyblRhZykge1xuICAgIGRlc2NyaXB0b3IucmV0dXJuID0ge1xuICAgICAgdHlwZTogcmV0dXJuVGFnLnR5cGUsXG4gICAgICBkZXNjOiByZXR1cm5UYWcuZGVzY3JpcHRpb24sXG4gICAgfTtcbiAgfVxuXG4gIHZhciBwYXJhbXNCeU5hbWUgPSB7fTtcbiAgKGRlc2NyaXB0b3IucGFyYW1zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgcGFyYW1zQnlOYW1lW3BhcmFtLm5hbWVdID0gcGFyYW07XG4gIH0pO1xuICAoZGVzY3JpcHRvci5qc2RvYyAmJiBkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgaWYgKHRhZy50YWcgIT09ICdwYXJhbScpIHJldHVybjtcbiAgICB2YXIgcGFyYW0gPSBwYXJhbXNCeU5hbWVbdGFnLm5hbWVdO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXJhbS50eXBlID0gdGFnLnR5cGUgfHwgcGFyYW0udHlwZTtcbiAgICBwYXJhbS5kZXNjID0gdGFnLmRlc2NyaXB0aW9uO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByYXcgZmVhdHVyZXMgaW50byBhbiBhYnN0cmFjdCBgUG9seW1lci5CYXNlYCBlbGVtZW50LlxuICpcbiAqIE5vdGUgdGhhdCBkb2NzIG9uIHRoaXMgZWxlbWVudCBfYXJlIG5vdCBwcm9jZXNzZWRfLiBZb3UgbXVzdCBjYWxsXG4gKiBgYW5ub3RhdGVFbGVtZW50YCBvbiBpdCB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCB0aGF0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBmZWF0dXJlc1xuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFbGVtZW50KGZlYXR1cmVzKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gZmVhdHVyZXMucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZmVhdHVyZSkge1xuICAgIHJldHVybiByZXN1bHQuY29uY2F0KGZlYXR1cmUucHJvcGVydGllcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICAgICAgICdlbGVtZW50JyxcbiAgICBpczogICAgICAgICAnUG9seW1lci5CYXNlJyxcbiAgICBhYnN0cmFjdDogICB0cnVlLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgZGVzYzogJ2BQb2x5bWVyLkJhc2VgIGFjdHMgYXMgYSBiYXNlIHByb3RvdHlwZSBmb3IgYWxsIFBvbHltZXIgJyArXG4gICAgICAgICAgJ2VsZW1lbnRzLiBJdCBpcyBjb21wb3NlZCB2aWEgdmFyaW91cyBjYWxscyB0byAnICtcbiAgICAgICAgICAnYFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSgpYC5cXG4nICtcbiAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgJ1RoZSBwcm9wZXJ0aWVzIHJlZmxlY3RlZCBoZXJlIGFyZSB0aGUgY29tYmluZWQgdmlldyBvZiBhbGwgJyArXG4gICAgICAgICAgJ2ZlYXR1cmVzIGZvdW5kIGluIHRoaXMgbGlicmFyeS4gVGhlcmUgbWF5IGJlIG1vcmUgcHJvcGVydGllcyAnICtcbiAgICAgICAgICAnYWRkZWQgdmlhIG90aGVyIGxpYnJhcmllcywgYXMgd2VsbC4nLFxuICB9O1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgZGVzY3JpcHRvciwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBjbGVhbihkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvci5qc2RvYykgcmV0dXJuO1xuICAvLyBUaGUgZG9jdGV4dCB3YXMgd3JpdHRlbiB0byBgZGVzY3JpcHRvci5kZXNjYFxuICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYy5kZXNjcmlwdGlvbjtcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2Mub3JpZztcblxuICB2YXIgY2xlYW5UYWdzID0gW107XG4gIChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgLy8gRHJvcCBhbnkgdGFncyB3ZSd2ZSBjb25zdW1lZC5cbiAgICBpZiAoSEFORExFRF9UQUdTLmluZGV4T2YodGFnLnRhZykgIT09IC0xKSByZXR1cm47XG4gICAgY2xlYW5UYWdzLnB1c2godGFnKTtcbiAgfSk7XG5cbiAgaWYgKGNsZWFuVGFncy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyB0YWdzPyBubyBkb2NzIGxlZnQhXG4gICAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2M7XG4gIH0gZWxzZSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzID0gY2xlYW5UYWdzO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gYW4gZWxlbWVudCwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlRWxlbWVudGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcnxCZWhhdmlvckRlc2NyaXB0b3J9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2xlYW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgY2xlYW4oZWxlbWVudCk7XG4gIGVsZW1lbnQucHJvcGVydGllcy5mb3JFYWNoKGNsZWFuUHJvcGVydHkpO1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHksIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZVByb3BlcnR5YC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2xlYW5Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICBjbGVhbihwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogUGFyc2UgZWxlbWVudHMgZGVmaW5lZCBvbmx5IGluIGNvbW1lbnRzLlxuICogQHBhcmFtICB7Y29tbWVudHN9IEFycmF5PHN0cmluZz4gQSBsaXN0IG9mIGNvbW1lbnRzIHRvIHBhcnNlLlxuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9ICAgICAgQSBsaXN0IG9mIHBzZXVkby1lbGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQc2V1ZG9FbGVtZW50cyhjb21tZW50cykge1xuICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7XG4gICAgdmFyIHBhcnNlZCA9IGpzZG9jLnBhcnNlSnNkb2MoY29tbWVudCk7XG4gICAgdmFyIHBzZXVkb1RhZyA9IGpzZG9jLmdldFRhZyhwYXJzZWQsICdwc2V1ZG9FbGVtZW50JywgJ25hbWUnKTtcbiAgICBpZiAocHNldWRvVGFnKSB7XG4gICAgICBwYXJzZWQuaXMgPSBwc2V1ZG9UYWc7XG4gICAgICBwYXJzZWQuanNkb2MgPSB7ZGVzY3JpcHRpb246IHBhcnNlZC5kZXNjcmlwdGlvbiwgdGFnczogcGFyc2VkLnRhZ3N9O1xuICAgICAgcGFyc2VkLnByb3BlcnRpZXMgPSBbXTtcbiAgICAgIHBhcnNlZC5kZXNjID0gcGFyc2VkLmRlc2NyaXB0aW9uO1xuICAgICAgcGFyc2VkLmRlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgcGFyc2VkLnRhZ3MgPSB1bmRlZmluZWQ7XG4gICAgICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIocGFyc2VkKTtcbiAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRJZFxuICogQHBhcmFtIHtEb2N1bWVudEFTVH0gZG9tTW9kdWxlXG4gKiBAcGFyYW0ge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IFRoZSBzY3JpcHQgdGhhdCB0aGUgZWxlbWVudCB3YXMgZGVmaW5lZCBpbi5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRFbGVtZW50RG9jcyhlbGVtZW50SWQsIGRvbU1vZHVsZSwgc2NyaXB0RWxlbWVudCkge1xuICAvLyBOb3RlIHRoYXQgd2UgY29uY2F0ZW5hdGUgZG9jcyBmcm9tIGFsbCBzb3VyY2VzIGlmIHdlIGZpbmQgdGhlbS5cbiAgLy8gZWxlbWVudCBjYW4gYmUgZGVmaW5lZCBpbjpcbiAgLy8gaHRtbCBjb21tZW50IHJpZ2h0IGJlZm9yZSBkb20tbW9kdWxlXG4gIC8vIGh0bWwgY29tbW5ldCByaWdodCBiZWZvcmUgc2NyaXB0IGRlZmluaW5nIHRoZSBtb2R1bGUsIGlmIGRvbS1tb2R1bGUgaXMgZW1wdHlcblxuICB2YXIgZm91bmQgPSBbXTtcblxuICAvLyBEbyB3ZSBoYXZlIGEgSFRNTCBjb21tZW50IG9uIHRoZSBgPGRvbS1tb2R1bGU+YCBvciBgPHNjcmlwdD5gP1xuICAvL1xuICAvLyBDb25mdXNpbmdseSwgd2l0aCBvdXIgY3VycmVudCBzdHlsZSwgdGhlIGNvbW1lbnQgd2lsbCBiZSBhdHRhY2hlZCB0b1xuICAvLyBgPGhlYWQ+YCwgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaWJsaW5nIHRvIHRoZSBgPGRvbS1tb2R1bGU+YFxuICB2YXIgc2VhcmNoUm9vdCA9IGRvbU1vZHVsZSB8fCBzY3JpcHRFbGVtZW50O1xuICB2YXIgcGFyZW50cyA9IGRvbTUubm9kZVdhbGtBbGxQcmlvcihzZWFyY2hSb290LCBkb201LmlzQ29tbWVudE5vZGUpO1xuICB2YXIgY29tbWVudCA9IHBhcmVudHMubGVuZ3RoID4gMCA/IHBhcmVudHNbMF0gOiBudWxsO1xuICBpZiAoY29tbWVudCAmJiBjb21tZW50LmRhdGEpIHtcbiAgICBmb3VuZC5wdXNoKGNvbW1lbnQuZGF0YSk7XG4gIH1cbiAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBmb3VuZFxuICAgIC5maWx0ZXIoZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgLy8gc2tpcCBAbGljZW5zZSBjb21tZW50c1xuICAgICAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5pbmRleE9mKCdAbGljZW5zZScgPT09IC0xKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgICAubWFwKGpzZG9jLnVuaW5kZW50KS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRMYXN0Q2hpbGROYW1lZChuYW1lLCBwYXJlbnQpIHtcbiAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7XG4gIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxLCBjaGlsZDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gbmFtZSkgcmV0dXJuIGNoaWxkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUT0RPKG5ldmlyKTogcGFyc2U1LXV0aWxzIVxuZnVuY3Rpb24gX2dldE5vZGVBdHRyaWJ1dGUobm9kZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgYXR0cjsgaSA8IG5vZGUuYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBhdHRyID0gbm9kZS5hdHRyc1tpXTtcbiAgICBpZiAoYXR0ci5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYXR0ci52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFubm90YXRlOiAgICAgICAgYW5ub3RhdGUsXG4gIGFubm90YXRlRWxlbWVudDogYW5ub3RhdGVFbGVtZW50LFxuICBhbm5vdGF0ZUJlaGF2aW9yOiBhbm5vdGF0ZUJlaGF2aW9yLFxuICBjbGVhbjogICAgICAgICAgIGNsZWFuLFxuICBjbGVhbkVsZW1lbnQ6ICAgIGNsZWFuRWxlbWVudCxcbiAgZmVhdHVyZUVsZW1lbnQ6ICBmZWF0dXJlRWxlbWVudCxcbiAgcGFyc2VQc2V1ZG9FbGVtZW50czogcGFyc2VQc2V1ZG9FbGVtZW50c1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBmaW5kQWxpYXMgPSByZXF1aXJlKCcuL2ZpbmQtYWxpYXMnKTtcbnZhciBhbmFseXplUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vYW5hbHl6ZS1wcm9wZXJ0aWVzJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZScpO1xuXG52YXIgZWxlbWVudEZpbmRlciA9IGZ1bmN0aW9uIGVsZW1lbnRGaW5kZXIoKSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbGVtZW50cyBleHBvcnRlZCBieSBlYWNoIHRyYXZlcnNlZCBzY3JpcHQuXG4gICAqL1xuICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgYmVpbmcgYnVpbHQgZHVyaW5nIGEgdHJhdmVyc2FsO1xuICAgKi9cbiAgdmFyIGVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIGEgc2V0IG9mIHNwZWNpYWwgY2FzZSBwcm9wZXJ0aWVzLiB0aGVzZSBzaG91bGQgb25seSBiZSBjYWxsZWRcbiAgICogd2hlbiB3ZSBrbm93IHdlJ3JlIGluc2lkZSBhbiBlbGVtZW50IGRlZmluaXRpb24uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgcHJvcGVydHlIYW5kbGVycyA9IHtcbiAgICBpczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PSAnTGl0ZXJhbCcpIHtcbiAgICAgICAgZWxlbWVudC5pcyA9IG5vZGUudmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbihub2RlKSB7XG5cbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8cHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLnB1c2gocHJvcHNbaV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaT0wOyBpPG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHYgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShub2RlLmVsZW1lbnRzW2ldKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICB2ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICBlbGVtZW50LmJlaGF2aW9ycy5wdXNoKHYpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgdmlzaXRvcnMgPSB7XG4gICAgZW50ZXJDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgIGlmIChjYWxsZWUudHlwZSA9PSAnSWRlbnRpZmllcicpIHtcblxuICAgICAgICBpZiAoY2FsbGVlLm5hbWUgPT0gJ1BvbHltZXInKSB7XG4gICAgICAgICAgZWxlbWVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICAgICAgICAgIGRlc2M6IGVzdXRpbC5nZXRBdHRhY2hlZENvbW1lbnQocGFyZW50KSxcbiAgICAgICAgICAgIGV2ZW50czogZXN1dGlsLmdldEV2ZW50Q29tbWVudHMocGFyZW50KS5tYXAoIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB7ZGVzYzogZXZlbnR9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsZWF2ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBsZWF2ZUNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgaWYgKGNhbGxlZS50eXBlID09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBpZiAoY2FsbGVlLm5hbWUgPT0gJ1BvbHltZXInKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBlbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZW50ZXJPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlck9iamVjdEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGVsZW1lbnQucHJvcGVydGllcyA9IFtdO1xuICAgICAgICBlbGVtZW50LmJlaGF2aW9ycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgIHZhciBuYW1lID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3Aua2V5KTtcbiAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0NhbnQgZGV0ZXJtaW5lIG5hbWUgZm9yIHByb3BlcnR5IGtleS4nLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgICAgcHJvcGVydHlIYW5kbGVyc1tuYW1lXShwcm9wLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50LnByb3BlcnRpZXMucHVzaChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlc3RyYXZlcnNlLlZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBlbGVtZW50czogZWxlbWVudHN9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbGVtZW50RmluZGVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKFwiZXN0cmF2ZXJzZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW4gRXNwcmVlIG5vZGUgbWF0Y2hlcyBhIHBhcnRpY3VsYXIgb2JqZWN0IHBhdGguXG4gKlxuICogZS5nLiB5b3UgaGF2ZSBhIE1lbWJlckV4cHJlc3Npb24gbm9kZSwgYW5kIHdhbnQgdG8gc2VlIHdoZXRoZXIgaXQgcmVwcmVzZW50c1xuICogYEZvby5CYXIuQmF6YDpcbiAqXG4gKiAgICAgbWF0Y2hlc0NhbGxFeHByZXNzaW9uKG5vZGUsIFsnRm9vJywgJ0JhcicsICdCYXonXSlcbiAqXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb24gVGhlIEVzcHJlZSBub2RlIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHBhdGggVGhlIHBhdGggdG8gbG9vayBmb3IuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXRoKSB7XG4gIGlmICghZXhwcmVzc2lvbi5wcm9wZXJ0eSB8fCAhZXhwcmVzc2lvbi5vYmplY3QpIHJldHVybjtcbiAgY29uc29sZS5hc3NlcnQocGF0aC5sZW5ndGggPj0gMik7XG5cbiAgLy8gVW5yYXZlbCBiYWNrd2FyZHMsIG1ha2Ugc3VyZSBwcm9wZXJ0aWVzIG1hdGNoIGVhY2ggc3RlcCBvZiB0aGUgd2F5LlxuICBpZiAoZXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lICE9PSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pIHJldHVybiBmYWxzZTtcbiAgLy8gV2UndmUgZ290IG91cnNlbHZlcyBhIGZpbmFsIG1lbWJlciBleHByZXNzaW9uLlxuICBpZiAocGF0aC5sZW5ndGggPT0gMiAmJiBleHByZXNzaW9uLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vYmplY3QubmFtZSA9PT0gcGF0aFswXTtcbiAgfVxuICAvLyBOZXN0ZWQgZXhwcmVzc2lvbnMuXG4gIGlmIChwYXRoLmxlbmd0aCA+IDIgJiYgZXhwcmVzc2lvbi5vYmplY3QudHlwZSA9PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gbWF0Y2hlc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24ub2JqZWN0LCBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0ga2V5IFRoZSBub2RlIHJlcHJlc2VudGluZyBhbiBvYmplY3Qga2V5IG9yIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoYXQga2V5LlxuICovXG5mdW5jdGlvbiBvYmplY3RLZXlUb1N0cmluZyhrZXkpIHtcbiAgaWYgKGtleS50eXBlID09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIGtleS52YWx1ZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIG9iamVjdEtleVRvU3RyaW5nKGtleS5vYmplY3QpICsgJy4nICsgb2JqZWN0S2V5VG9TdHJpbmcoa2V5LnByb3BlcnR5KTtcbiAgfVxufVxuXG52YXIgQ0xPU1VSRV9DT05TVFJVQ1RPUl9NQVAgPSB7XG4gICdCb29sZWFuJzogJ2Jvb2xlYW4nLFxuICAnTnVtYmVyJzogICdudW1iZXInLFxuICAnU3RyaW5nJzogICdzdHJpbmcnLFxufTtcblxuLyoqXG4gKiBBU1QgZXhwcmVzc2lvbiAtPiBDbG9zdXJlIHR5cGUuXG4gKlxuICogQWNjZXB0cyBsaXRlcmFsIHZhbHVlcywgYW5kIG5hdGl2ZSBjb25zdHJ1Y3RvcnMuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIEFuIEVzcHJlZSBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHRoYXQgZXhwcmVzc2lvbiwgaW4gQ2xvc3VyZSB0ZXJtcy5cbiAqL1xuZnVuY3Rpb24gY2xvc3VyZVR5cGUobm9kZSkge1xuICBpZiAobm9kZS50eXBlLm1hdGNoKC9FeHByZXNzaW9uJC8pKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZS5zdWJzdHIoMCwgbm9kZS50eXBlLmxlbmd0aCAtIDEwKTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdMaXRlcmFsJykge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBDTE9TVVJFX0NPTlNUUlVDVE9SX01BUFtub2RlLm5hbWVdIHx8IG5vZGUubmFtZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB7XG4gICAgICBtZXNzYWdlOiAnVW5rbm93biBDbG9zdXJlIHR5cGUgZm9yIG5vZGU6ICcgKyBub2RlLnR5cGUsXG4gICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpIHtcbiAgdmFyIGNvbW1lbnRzID0gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHx8IGdldExlYWRpbmdDb21tZW50cyhub2RlLmtleSk7XG4gIGlmICghY29tbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGNvbW1lbnRzW2NvbW1lbnRzLmxlbmd0aCAtIDFdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbW1lbnRzIGZyb20gYSB0cmVlIGRlZmluZWQgd2l0aCBAZXZlbnQuXG4gKiBAcGFyYW0gIHtOb2RlfSBub2RlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q29tbWVudHMobm9kZSkge1xuICB2YXIgZXZlbnRDb21tZW50cyA9IFtdO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKG5vZGUsIHtcbiAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBjb21tZW50cyA9IChub2RlLmxlYWRpbmdDb21tZW50cyB8fCBbXSkuY29uY2F0KG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXSlcbiAgICAgICAgLm1hcCggZnVuY3Rpb24oY29tbWVudEFTVCkge1xuICAgICAgICAgIHJldHVybiBjb21tZW50QVNULnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKCBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1lbnQuaW5kZXhPZihcIkBldmVudFwiKSAhPSAtMTtcbiAgICAgICAgfSk7XG4gICAgICBldmVudENvbW1lbnRzID0gZXZlbnRDb21tZW50cy5jb25jYXQoY29tbWVudHMpO1xuICAgIH1cbiAgfSk7XG4gIC8vIGRlZHVwXG4gIHJldHVybiBldmVudENvbW1lbnRzLmZpbHRlciggZnVuY3Rpb24oZWwsIGluZGV4LCBhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKGVsKSA9PT0gaW5kZXg7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHBhcmFtXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICBpZiAoIWNvbW1lbnRzIHx8IGNvbW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICByZXR1cm4gY29tbWVudHMubWFwKGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICByZXR1cm4gY29tbWVudC52YWx1ZTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXJzZTUgUHJvcGVydHkgQVNUIG5vZGUgaW50byBpdHMgSHlkcm9seXNpcyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge1Byb3BlcnR5RGVzY3JpcHRvcn1cbiAqL1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZSkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIG5hbWU6IG9iamVjdEtleVRvU3RyaW5nKG5vZGUua2V5KSxcbiAgICB0eXBlOiBjbG9zdXJlVHlwZShub2RlLnZhbHVlKSxcbiAgICBkZXNjOiBnZXRBdHRhY2hlZENvbW1lbnQobm9kZSksXG4gICAgamF2YXNjcmlwdE5vZGU6IG5vZGVcbiAgfTtcblxuICBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgIHJlc3VsdC5wYXJhbXMgPSAobm9kZS52YWx1ZS5wYXJhbXMgfHwgW10pLm1hcChmdW5jdGlvbihwYXJhbSkge1xuICAgICAgcmV0dXJuIHtuYW1lOiBwYXJhbS5uYW1lfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjbG9zdXJlVHlwZTogICAgICAgICAgIGNsb3N1cmVUeXBlLFxuICBnZXRBdHRhY2hlZENvbW1lbnQ6ICAgIGdldEF0dGFjaGVkQ29tbWVudCxcbiAgZ2V0RXZlbnRDb21tZW50czogICAgICBnZXRFdmVudENvbW1lbnRzLFxuICBtYXRjaGVzQ2FsbEV4cHJlc3Npb246IG1hdGNoZXNDYWxsRXhwcmVzc2lvbixcbiAgb2JqZWN0S2V5VG9TdHJpbmc6ICAgICBvYmplY3RLZXlUb1N0cmluZyxcbiAgdG9Qcm9wZXJ0eURlc2NyaXB0b3I6ICB0b1Byb3BlcnR5RGVzY3JpcHRvcixcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGVzdXRpbCA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG5cbnZhciBudW1GZWF0dXJlcyA9IDA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmVhdHVyZUZpbmRlcigpIHtcbiAgLyoqIEB0eXBlIHshQXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBUaGUgZmVhdHVyZXMgd2UndmUgZm91bmQuICovXG4gIHZhciBmZWF0dXJlcyA9IFtdO1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcblxuICAgIGVudGVyQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAoIWVzdXRpbC5tYXRjaGVzQ2FsbEV4cHJlc3Npb24obm9kZS5jYWxsZWUsIFsnUG9seW1lcicsICdCYXNlJywgJ19hZGRGZWF0dXJlJ10pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8qKiBAdHlwZSB7IUZlYXR1cmVEZXNjcmlwdG9yfSAqL1xuICAgICAgdmFyIGZlYXR1cmUgPSB7fTtcbiAgICAgIHRoaXMuX2V4dHJhY3REZXNjKGZlYXR1cmUsIG5vZGUsIHBhcmVudCk7XG4gICAgICB0aGlzLl9leHRyYWN0UHJvcGVydGllcyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpO1xuXG4gICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH0sXG5cbiAgICBfZXh0cmFjdERlc2M6IGZ1bmN0aW9uIF9leHRyYWN0RGVzYyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpIHtcbiAgICAgIGZlYXR1cmUuZGVzYyA9IGVzdXRpbC5nZXRBdHRhY2hlZENvbW1lbnQocGFyZW50KTtcbiAgICB9LFxuXG4gICAgX2V4dHJhY3RQcm9wZXJ0aWVzOiBmdW5jdGlvbiBfZXh0cmFjdFByb3BlcnRpZXMoZmVhdHVyZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgZmVhdHVyZU5vZGUgPSBub2RlLmFyZ3VtZW50c1swXTtcbiAgICAgIGlmIChmZWF0dXJlTm9kZS50eXBlICE9PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ0V4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSB0byBiZSBhbiBvYmplY3QuJyxcbiAgICAgICAgICAgICdHb3QnLCBmZWF0dXJlTm9kZS50eXBlLCAnaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFmZWF0dXJlTm9kZS5wcm9wZXJ0aWVzKSByZXR1cm47XG5cbiAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGZlYXR1cmVOb2RlLnByb3BlcnRpZXMubWFwKGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcik7XG4gICAgfSxcblxuICB9O1xuXG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBmZWF0dXJlczogZmVhdHVyZXN9O1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBmaW5kQWxpYXMgPSBmdW5jdGlvbiBmaW5kQWxpYXMobmFtZXMsIGFsaWFzZXMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBhbGlhc2VzW25hbWVzLmluZGV4T2YobmFtZSldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kQWxpYXM7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZG9tNSA9IHJlcXVpcmUoJ2RvbTUnKTtcblxudmFyIHAgPSBkb201LnByZWRpY2F0ZXM7XG5cbnZhciBpc0h0bWxJbXBvcnROb2RlID0gcC5BTkQoXG4gIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICBwLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBwLk5PVChcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuICApXG4pO1xuXG52YXIgaXNTdHlsZU5vZGUgPSBwLk9SKFxuICAvLyBpbmxpbmUgc3R5bGVcbiAgcC5oYXNUYWdOYW1lKCdzdHlsZScpLFxuICAvLyBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIHAuQU5EKFxuICAgIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICAgIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnc3R5bGVzaGVldCcpXG4gICksXG4gIC8vIHBvbHltZXIgc3BlY2lmaWMgZXh0ZXJuYWwgc3R5bGVzaGVldFxuICBwLkFORChcbiAgICBwLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbnZhciBpc0pTU2NyaXB0Tm9kZSA9IHAuQU5EKFxuICBwLmhhc1RhZ05hbWUoJ3NjcmlwdCcpLFxuICBwLk9SKFxuICAgIHAuTk9UKHAuaGFzQXR0cigndHlwZScpKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JylcbiAgKVxuKTtcblxuZnVuY3Rpb24gYWRkTm9kZShub2RlLCByZWdpc3RyeSkge1xuICBpZiAoaXNIdG1sSW1wb3J0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LmltcG9ydC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU3R5bGVOb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuc3R5bGUucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChpc0pTU2NyaXB0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LnNjcmlwdC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ2Jhc2UnKSB7XG4gICAgcmVnaXN0cnkuYmFzZS5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgIHJlZ2lzdHJ5LnRlbXBsYXRlLnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAobm9kZS50YWdOYW1lID09PSAnZG9tLW1vZHVsZScpIHtcbiAgICByZWdpc3RyeVsnZG9tLW1vZHVsZSddLnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAoZG9tNS5pc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuY29tbWVudC5wdXNoKG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpbmVBbmRDb2x1bW4oc3RyaW5nLCBjaGFyTnVtYmVyKSB7XG4gIGlmIChjaGFyTnVtYmVyID4gc3RyaW5nLmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVE9ETyhham8pOiBDYWNoaW5nIHRoZSBsaW5lIGxlbmd0aHMgb2YgZWFjaCBkb2N1bWVudCBjb3VsZCBiZSBtdWNoIGZhc3Rlci5cbiAgdmFyIHNsaWNlZCA9IHN0cmluZy5zbGljZSgwLGNoYXJOdW1iZXIrMSk7XG4gIHZhciBzcGxpdCA9IHNsaWNlZC5zcGxpdCgnXFxuJyk7XG4gIHZhciBsaW5lID0gc3BsaXQubGVuZ3RoO1xuICB2YXIgY29sdW1uID0gc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICByZXR1cm4ge2xpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1ufTtcbn1cblxuLyoqXG4qIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnQuXG4qIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4qL1xuXG4vKipcbiogVGhlIEFTVHMgb2YgdGhlIEhUTUwgZWxlbWVudHMgbmVlZGVkIHRvIHJlcHJlc2VudCBQb2x5bWVyIGVsZW1lbnRzLlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZWRJbXBvcnRcbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHRlbXBsYXRlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBlYWNoIG91dGVybW9zdCB0ZW1wbGF0ZSB0YWcuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzY3JpcHQgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggc2NyaXB0IHRhZyBub3QgaW5zaWRlIGEgdGVtcGxhdGUuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzdHlsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgc3R5bGUgdGFnIG91dHNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IGRvbS1tb2R1bGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IGRvbS1tb2R1bGUgZWxlbWVudC5cbiogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gYXN0IFRoZSBmdWxsIHBhcnNlNSBhc3QgZm9yIHRoZSBkb2N1bWVudC5cbiovXG5cbi8qKlxuKiBQYXJzZSBodG1sIGludG8gQVNUcy5cbiogQHBhcmFtIHtzdHJpbmd9IGh0bWxTdHJpbmcgQSB1dGY4LCBodG1sNSBkb2N1bWVudCBjb250YWluaW5nIHBvbHltZXIgZWxlbWVudCBvciBtb2R1bGUgZGVmaW5pdG9ucy5cbiogQHBhcmFtIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuKiBAcmV0dXJuIHtQYXJzZWRJbXBvcnR9XG4qL1xudmFyIGltcG9ydFBhcnNlID0gZnVuY3Rpb24gaW1wb3J0UGFyc2UoaHRtbFN0cmluZywgaHJlZikge1xuICB2YXIgZG9jO1xuICB0cnkge1xuICAgIGRvYyA9IGRvbTUucGFyc2UoaHRtbFN0cmluZywge2xvY2F0aW9uSW5mbzogdHJ1ZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWRkIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uXG4gIGRvbTUudHJlZU1hcChkb2MsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5fX2xvY2F0aW9uICYmIG5vZGUuX19sb2NhdGlvbi5zdGFydCA+PSAwKSB7XG4gICAgICBub2RlLl9fbG9jYXRpb25EZXRhaWwgPSBnZXRMaW5lQW5kQ29sdW1uKGh0bWxTdHJpbmcsIG5vZGUuX19sb2NhdGlvbi5zdGFydCk7XG4gICAgICBpZiAoaHJlZikge1xuICAgICAgICBub2RlLl9fb3duZXJEb2N1bWVudCA9IGhyZWY7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVnaXN0cnkgPSB7XG4gICAgICBiYXNlOiBbXSxcbiAgICAgIHRlbXBsYXRlOiBbXSxcbiAgICAgIHNjcmlwdDogW10sXG4gICAgICBzdHlsZTogW10sXG4gICAgICBpbXBvcnQ6IFtdLFxuICAgICAgJ2RvbS1tb2R1bGUnOiBbXSxcbiAgICAgIGNvbW1lbnQ6IFtdfTtcblxuICB2YXIgcXVldWUgPSBbXS5jb25jYXQoZG9jLmNoaWxkTm9kZXMpO1xuICB2YXIgbmV4dE5vZGU7XG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgbmV4dE5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0Tm9kZSkge1xuICAgICAgcXVldWUgPSBxdWV1ZS5jb25jYXQobmV4dE5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICBhZGROb2RlKG5leHROb2RlLCByZWdpc3RyeSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdHJ5LmFzdCA9IGRvYztcbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbXBvcnRQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLyoqXG4qIEZpbmRzIGFuZCBhbm5vdGF0ZXMgdGhlIFBvbHltZXIoKSBhbmQgbW9kdWxhdGUoKSBjYWxscyBpbiBqYXZhc2NyaXB0LlxuKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXNwcmVlID0gcmVxdWlyZSgnZXNwcmVlJyk7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGJlaGF2aW9yRmluZGVyID0gcmVxdWlyZSgnLi9iZWhhdmlvci1maW5kZXInKTtcbnZhciBlbGVtZW50RmluZGVyICA9IHJlcXVpcmUoJy4vZWxlbWVudC1maW5kZXInKTtcbnZhciBmZWF0dXJlRmluZGVyICA9IHJlcXVpcmUoJy4vZmVhdHVyZS1maW5kZXInKTtcblxuZnVuY3Rpb24gdHJhdmVyc2UodmlzaXRvclJlZ2lzdHJpZXMpIHtcbiAgdmFyIHZpc2l0b3I7XG4gIGZ1bmN0aW9uIGFwcGx5VmlzaXRvcnMobmFtZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgdmFyIHJldHVyblZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JSZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSBpbiB2aXNpdG9yUmVnaXN0cmllc1tpXSkge1xuICAgICAgICByZXR1cm5WYWwgPSB2aXNpdG9yUmVnaXN0cmllc1tpXVtuYW1lXShub2RlLCBwYXJlbnQpO1xuICAgICAgICBpZiAocmV0dXJuVmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnZW50ZXInICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnbGVhdmUnICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBqc1BhcnNlID0gZnVuY3Rpb24ganNQYXJzZShqc1N0cmluZykge1xuICB2YXIgc2NyaXB0ID0gZXNwcmVlLnBhcnNlKGpzU3RyaW5nLCB7XG4gICAgYXR0YWNoQ29tbWVudDogdHJ1ZSxcbiAgICBjb21tZW50OiB0cnVlLFxuICAgIGxvYzogdHJ1ZSxcbiAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgIGFycm93RnVuY3Rpb25zOiB0cnVlLFxuICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICByZWdleFlGbGFnOiB0cnVlLFxuICAgICAgcmVnZXhVRmxhZzogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlU3RyaW5nczogdHJ1ZSxcbiAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgcmVzdFBhcmFtczogdHJ1ZSxcbiAgICAgIGZvck9mOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRNZXRob2RzOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZFByb3BlcnRpZXM6IHRydWUsXG4gICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIGdlbmVyYXRvcnM6IHRydWUsXG4gICAgICBzcHJlYWQ6IHRydWUsXG4gICAgICBjbGFzc2VzOiB0cnVlLFxuICAgICAgbW9kdWxlczogdHJ1ZSxcbiAgICAgIGpzeDogdHJ1ZSxcbiAgICAgIGdsb2JhbFJldHVybjogdHJ1ZSxcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBmZWF0dXJlSW5mbyA9IGZlYXR1cmVGaW5kZXIoKTtcbiAgdmFyIGJlaGF2aW9ySW5mbyA9IGJlaGF2aW9yRmluZGVyKCk7XG4gIHZhciBlbGVtZW50SW5mbyA9IGVsZW1lbnRGaW5kZXIoKTtcblxuICB2YXIgdmlzaXRvcnMgPSBbZmVhdHVyZUluZm8sIGJlaGF2aW9ySW5mbywgZWxlbWVudEluZm9dLm1hcChmdW5jdGlvbihpbmZvKSB7XG4gICAgcmV0dXJuIGluZm8udmlzaXRvcnM7XG4gIH0pO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKHNjcmlwdCwgdHJhdmVyc2UodmlzaXRvcnMpKTtcblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yczogYmVoYXZpb3JJbmZvLmJlaGF2aW9ycyxcbiAgICBlbGVtZW50czogIGVsZW1lbnRJbmZvLmVsZW1lbnRzLFxuICAgIGZlYXR1cmVzOiAgZmVhdHVyZUluZm8uZmVhdHVyZXMsXG4gICAgcGFyc2VkU2NyaXB0OiBzY3JpcHRcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ganNQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGRvY3RyaW5lID0gcmVxdWlyZSgnZG9jdHJpbmUnKTtcblxuLyoqXG4gKiBBbiBhbm5vdGF0ZWQgSlNEb2MgYmxvY2sgdGFnLCBhbGwgZmllbGRzIGFyZSBvcHRpb25hbGx5IHByb2Nlc3NlZCBleGNlcHQgZm9yXG4gKiB0aGUgdGFnOlxuICpcbiAqICAgICBAVEFHIHtUWVBFfSBOQU1FIERFU0NcbiAqXG4gKiBgbGluZWAgYW5kIGBjb2xgIGluZGljYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQgdGhhdFxuICogdGhlIHRhZyB3YXMgZXh0cmFjdGVkIGZyb20gLSByZWxhdGl2ZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb21tZW50XG4gKiBjb250ZW50cyAoZS5nLiB0aGUgdmFsdWUgb2YgYGRlc2NgIG9uIGEgZGVzY3JpcHRvciBub2RlKS4gTGluZXMgYXJlXG4gKiAxLWluZGV4ZWQuXG4gKlxuICogQHR5cGVkZWYge3tcbiAqICAgdGFnOiAgIHN0cmluZyxcbiAqICAgdHlwZTogP3N0cmluZyxcbiAqICAgbmFtZTogP3N0cmluZyxcbiAqICAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gKiB9fVxuICovXG52YXIgSnNkb2NUYWc7XG5cbi8qKlxuICogVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZiBhIEpTRG9jIGNvbW1lbnQuXG4gKlxuICogQHR5cGVkZWYge3tcbiAqICAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gKiAgIHRhZ3M6IEFycmF5PEpzZG9jVGFnPixcbiAqIH19XG4gKi9cbnZhciBKc2RvY0Fubm90YXRpb247XG5cbi8qKlxuICogZG9jdHJpbmUgY29uZmlndXJhdGlvbixcbiAqIENVUlJFTlRMWSBVTlVTRUQgQkVDQVVTRSBQUklWQVRFXG4gKi9cbi8vIGZ1bmN0aW9uIGNvbmZpZ3VyZURvY3RyaW5lKCkge1xuXG4vLyAgIC8vIEBoZXJvIFtwYXRoL3RvL2ltYWdlXVxuLy8gICBkb2N0cmluZS5SdWxlc1snaGVybyddID0gWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ107XG5cbi8vICAgLy8gLy8gQGRlbW8gW3BhdGgvdG8vZGVtb10gW0RlbW8gdGl0bGVdXG4vLyAgIGRvY3RyaW5lLlJ1bGVzWydkZW1vJ10gPSBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdwYXJzZURlc2NyaXB0aW9uJywgJ2Vuc3VyZUVuZCddO1xuXG4vLyAgIC8vIC8vIEBwb2x5bWVyQmVoYXZpb3IgW1BvbHltZXIuQmVoYXZpb3JOYW1lXVxuLy8gICBkb2N0cmluZS5SdWxlc1sncG9seW1lckJlaGF2aW9yJ10gPSBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXTtcbi8vIH1cbi8vIGNvbmZpZ3VyZURvY3RyaW5lKCk7XG5cbi8vIEBkZW1vIFtwYXRoXSBbdGl0bGVdXG5mdW5jdGlvbiBwYXJzZURlbW8odGFnKSB7XG4gIHZhciBtYXRjaCA9ICh0YWcuZGVzY3JpcHRpb24gfHwgXCJcIikubWF0Y2goL15cXHMqKFxcUyopXFxzKiguKikkLyk7XG4gIHJldHVybiB7XG4gICAgdGFnOiAnZGVtbycsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGxcbiAgfTtcbn1cblxuLy8gQGhlcm8gW3BhdGhdXG5mdW5jdGlvbiBwYXJzZUhlcm8odGFnKSB7XG4gIHJldHVybiB7XG4gICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogdGFnLmRlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsXG4gIH07XG59XG5cbi8vIEBwb2x5bWVyQmVoYXZpb3IgW25hbWVdXG5mdW5jdGlvbiBwYXJzZVBvbHltZXJCZWhhdmlvcih0YWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWc6ICB0YWcudGl0bGUsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiB0YWcuZGVzY3JpcHRpb24sXG4gICAgZGVzY3JpcHRpb246IG51bGxcbiAgfTtcbn1cblxuLy8gQHBzZXVkb0VsZW1lbnQgbmFtZVxuZnVuY3Rpb24gcGFyc2VQc2V1ZG9FbGVtZW50KHRhZykge1xuICByZXR1cm4ge1xuICAgIHRhZzogIHRhZy50aXRsZSxcbiAgICB0eXBlOiBudWxsLFxuICAgIG5hbWU6IHRhZy5kZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbjogbnVsbFxuICB9O1xufVxuXG52YXIgQ1VTVE9NX1RBR1MgPSB7XG4gIGRlbW86IHBhcnNlRGVtbyxcbiAgaGVybzogcGFyc2VIZXJvLFxuICBwb2x5bWVyQmVoYXZpb3I6IHBhcnNlUG9seW1lckJlaGF2aW9yLFxuICBwc2V1ZG9FbGVtZW50OiBwYXJzZVBzZXVkb0VsZW1lbnRcbn07XG5cbi8qKlxuICogQ29udmVydCBkb2N0cmluZSB0YWdzIHRvIGh5ZHJvbHlzaXMgdGFnIGZvcm1hdFxuICovXG5mdW5jdGlvbiBfdGFnc1RvSHlkcm9UYWdzKHRhZ3MpIHtcbiAgaWYgKCF0YWdzKVxuICAgIHJldHVybiBudWxsO1xuICByZXR1cm4gdGFncy5tYXAoIGZ1bmN0aW9uKHRhZykge1xuICAgIGlmICh0YWcudGl0bGUgaW4gQ1VTVE9NX1RBR1MpIHtcbiAgICAgIHJldHVybiBDVVNUT01fVEFHU1t0YWcudGl0bGVdKHRhZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgICAgICB0eXBlOiB0YWcudHlwZSA/IGRvY3RyaW5lLnR5cGUuc3RyaW5naWZ5KHRhZy50eXBlKSA6IG51bGwsXG4gICAgICAgIG5hbWU6IHRhZy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZXMgbGVhZGluZyAqLCBhbmQgYW55IHNwYWNlIGJlZm9yZSBpdFxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0tIGpzIGRvYyBkZXNjcmlwdGlvblxuICovXG5mdW5jdGlvbiBfcmVtb3ZlTGVhZGluZ0FzdGVyaXNrcyhkZXNjcmlwdGlvbikge1xuICBpZiAoKHR5cGVvZiBkZXNjcmlwdGlvbikgIT09ICdzdHJpbmcnKVxuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcblxuICByZXR1cm4gZGVzY3JpcHRpb25cbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCggZnVuY3Rpb24obGluZSkge1xuICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgJ1xccyonIGZyb20gZWFjaCBsaW5lXG4gICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eW1xcc10qXFwqXFxzPyguKikkLyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IGxpbmU7XG4gICAgfSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBKU0RvYyBzdHJpbmcgKG1pbnVzIG9wZW5pbmcvY2xvc2luZyBjb21tZW50IGRlbGltaXRlcnMpLCBleHRyYWN0IGl0c1xuICogZGVzY3JpcHRpb24gYW5kIHRhZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvY3NcbiAqIEByZXR1cm4gez9Kc2RvY0Fubm90YXRpb259XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNkb2MoZG9jcykge1xuICBkb2NzID0gX3JlbW92ZUxlYWRpbmdBc3Rlcmlza3MoZG9jcyk7XG4gIHZhciBkID0gZG9jdHJpbmUucGFyc2UoZG9jcywge1xuICAgIHVud3JhcDogZmFsc2UsXG4gICAgbGluZU51bWJlcjogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHRydWVcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGVzY3JpcHRpb246IGQuZGVzY3JpcHRpb24sXG4gICAgdGFnczogX3RhZ3NUb0h5ZHJvVGFncyhkLnRhZ3MpXG4gIH07XG59XG5cbi8vIFV0aWxpdHlcblxuLyoqXG4gKiBAcGFyYW0ge0pzZG9jQW5ub3RhdGlvbn0ganNkb2NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNUYWcoanNkb2MsIHRhZ05hbWUpIHtcbiAgaWYgKCFqc2RvYyB8fCAhanNkb2MudGFncykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4ganNkb2MudGFncy5zb21lKGZ1bmN0aW9uKHRhZykgeyByZXR1cm4gdGFnLnRhZyA9PT0gdGFnTmFtZTsgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IEpTRG9jIHRhZyBtYXRjaGluZyBgbmFtZWAgYW5kIHJldHVybnMgaXRzIHZhbHVlIGF0IGBrZXlgLlxuICpcbiAqIEBwYXJhbSB7SnNkb2NBbm5vdGF0aW9ufSBqc2RvY1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nPX0ga2V5IElmIG9taXR0ZWQsIHRoZSBlbnRpcmUgdGFnIG9iamVjdCBpcyByZXR1cm5lZC5cbiAqIEByZXR1cm4gez9zdHJpbmd8T2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRUYWcoanNkb2MsIHRhZ05hbWUsIGtleSkge1xuICBpZiAoIWpzZG9jIHx8ICFqc2RvYy50YWdzKSByZXR1cm4gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNkb2MudGFncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0YWcgPSBqc2RvYy50YWdzW2ldO1xuICAgIGlmICh0YWcudGFnID09PSB0YWdOYW1lKSB7XG4gICAgICByZXR1cm4ga2V5ID8gdGFnW2tleV0gOiB0YWc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7P3N0cmluZ30gdGV4dFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdW5pbmRlbnQodGV4dCkge1xuICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuICB2YXIgbGluZXMgID0gdGV4dC5yZXBsYWNlKC9cXHQvZywgJyAgJykuc3BsaXQoJ1xcbicpO1xuICB2YXIgaW5kZW50ID0gbGluZXMucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGxpbmUpIHtcbiAgICBpZiAoL15cXHMqJC8udGVzdChsaW5lKSkgcmV0dXJuIHByZXY7ICAvLyBDb21wbGV0ZWx5IGlnbm9yZSBibGFuayBsaW5lcy5cblxuICAgIHZhciBsaW5lSW5kZW50ID0gbGluZS5tYXRjaCgvXihcXHMqKS8pWzBdLmxlbmd0aDtcbiAgICBpZiAocHJldiA9PT0gbnVsbCkgcmV0dXJuIGxpbmVJbmRlbnQ7XG4gICAgcmV0dXJuIGxpbmVJbmRlbnQgPCBwcmV2ID8gbGluZUluZGVudCA6IHByZXY7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24obCkgeyByZXR1cm4gbC5zdWJzdHIoaW5kZW50KTsgfSkuam9pbignXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRUYWc6ICAgICBnZXRUYWcsXG4gIGhhc1RhZzogICAgIGhhc1RhZyxcbiAgcGFyc2VKc2RvYzogcGFyc2VKc2RvYyxcbiAgdW5pbmRlbnQ6ICAgdW5pbmRlbnRcbn07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBqc2hpbnQgLVcwNzlcbi8vIFByb21pc2UgcG9seWZpbGxcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbmZ1bmN0aW9uIERlZmVycmVkKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHNlbGYucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgc2VsZi5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlIHJlc291cmNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlc29sdmVyXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcsIERlZmVycmVkKTogYm9vbGVhbn0gYWNjZXB0IEF0dGVtcHQgdG8gcmVzb2x2ZVxuICogICAgIGBkZWZlcnJlZGAgd2l0aCB0aGUgY29udGVudHMgdGhlIHNwZWNpZmllZCBVUkwuIFJldHVybnMgZmFsc2UgaWYgdGhlXG4gKiAgICAgUmVzb2x2ZXIgaXMgdW5hYmxlIHRvIHJlc29sdmUgdGhlIFVSTC5cbiAqL1xuXG5cbi8qKlxuICogQSBGaWxlTG9hZGVyIGxldHMgeW91IHJlc29sdmUgVVJMcyB3aXRoIGEgc2V0IG9mIHBvdGVudGlhbCByZXNvbHZlcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cbmZ1bmN0aW9uIEZpbGVMb2FkZXIoKSB7XG4gIHRoaXMucmVzb2x2ZXJzID0gW107XG4gIC8vIG1hcCB1cmwgLT4gRGVmZXJyZWRcbiAgdGhpcy5yZXF1ZXN0cyA9IHt9O1xufVxuRmlsZUxvYWRlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbnN0YW5jZSBvZiBhIFJlc29sdmVyIGNsYXNzIHRvIHRoZSBsaXN0IG9mIHVybCByZXNvbHZlcnNcbiAgICpcbiAgICogT3JkZXJpbmcgb2YgcmVzb2x2ZXJzIGlzIG1vc3QgdG8gbGVhc3QgcmVjZW50bHkgYWRkZWRcbiAgICogVGhlIGZpcnN0IHJlc29sdmVyIHRvIFwiYWNjZXB0XCIgdGhlIHVybCB3aW5zLlxuICAgKiBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgdG8gYWRkLlxuICAgKi9cbiAgYWRkUmVzb2x2ZXI6IGZ1bmN0aW9uKHJlc29sdmVyKSB7XG4gICAgdGhpcy5yZXNvbHZlcnMucHVzaChyZXNvbHZlcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHByb21pc2UgZm9yIGFuIGFic29sdXRlIHVybFxuICAgKlxuICAgKiBVcmwgcmVxdWVzdHMgYXJlIGRlZHVwbGljYXRlZCBieSB0aGUgbG9hZGVyLCByZXR1cm5pbmcgdGhlIHNhbWUgUHJvbWlzZSBmb3JcbiAgICogaWRlbnRpY2FsIHVybHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgVGhlIGFic29sdXRlIHVybCB0byByZXF1ZXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlLjxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudHMgb2YgdGhlIFVSTC5cbiAgICovXG4gIHJlcXVlc3Q6IGZ1bmN0aW9uKHVyaSkge1xuICAgIHZhciBwcm9taXNlO1xuXG4gICAgaWYgKCEodXJpIGluIHRoaXMucmVxdWVzdHMpKSB7XG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICB0aGlzLnJlcXVlc3RzW3VyaV0gPSBkZWZlcnJlZDtcblxuICAgICAgLy8gbG9vcCBiYWNrd2FyZHMgdGhyb3VnaCByZXNvbHZlcnMgdW50aWwgb25lIFwiYWNjZXB0c1wiIHRoZSByZXF1ZXN0XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5yZXNvbHZlcnMubGVuZ3RoIC0gMSwgcjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgciA9IHRoaXMucmVzb2x2ZXJzW2ldO1xuICAgICAgICBpZiAoci5hY2NlcHQodXJpLCBkZWZlcnJlZCkpIHtcbiAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcignbm8gcmVzb2x2ZXIgZm91bmQgZm9yICcgKyB1cmkpKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RzW3VyaV0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlTG9hZGVyO1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklteHBZaTlzYjJGa1pYSXZabWxzWlMxc2IyRmtaWEl1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tpQkRiM0I1Y21sbmFIUWdLR01wSURJd01UVWdWR2hsSUZCdmJIbHRaWElnVUhKdmFtVmpkQ0JCZFhSb2IzSnpMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDb2dWR2hwY3lCamIyUmxJRzFoZVNCdmJteDVJR0psSUhWelpXUWdkVzVrWlhJZ2RHaGxJRUpUUkNCemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHRjBJR2gwZEhBNkx5OXdiMng1YldWeUxtZHBkR2gxWWk1cGJ5OU1TVU5GVGxORkxuUjRkRnh1SUNvZ1ZHaGxJR052YlhCc1pYUmxJSE5sZENCdlppQmhkWFJvYjNKeklHMWhlU0JpWlNCbWIzVnVaQ0JoZENCb2RIUndPaTh2Y0c5c2VXMWxjaTVuYVhSb2RXSXVhVzh2UVZWVVNFOVNVeTUwZUhSY2JpQXFJRlJvWlNCamIyMXdiR1YwWlNCelpYUWdiMllnWTI5dWRISnBZblYwYjNKeklHMWhlU0JpWlNCbWIzVnVaQ0JoZENCb2RIUndPaTh2Y0c5c2VXMWxjaTVuYVhSb2RXSXVhVzh2UTA5T1ZGSkpRbFZVVDFKVExuUjRkRnh1SUNvZ1EyOWtaU0JrYVhOMGNtbGlkWFJsWkNCaWVTQkhiMjluYkdVZ1lYTWdjR0Z5ZENCdlppQjBhR1VnY0c5c2VXMWxjaUJ3Y205cVpXTjBJR2x6SUdGc2MyOWNiaUFxSUhOMVltcGxZM1FnZEc4Z1lXNGdZV1JrYVhScGIyNWhiQ0JKVUNCeWFXZG9kSE1nWjNKaGJuUWdabTkxYm1RZ1lYUWdhSFIwY0RvdkwzQnZiSGx0WlhJdVoybDBhSFZpTG1sdkwxQkJWRVZPVkZNdWRIaDBYRzRnS2k5Y2JseHVMeThnYW5Ob2FXNTBJRzV2WkdVNmRISjFaVnh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzR2THlCcWMyaHBiblFnTFZjd056bGNiaTh2SUZCeWIyMXBjMlVnY0c5c2VXWnBiR3hjYm5aaGNpQlFjbTl0YVhObElEMGdaMnh2WW1Gc0xsQnliMjFwYzJVZ2ZId2djbVZ4ZFdseVpTZ25aWE0yTFhCeWIyMXBjMlVuS1M1UWNtOXRhWE5sTzF4dUx5OGdhbk5vYVc1MElDdFhNRGM1WEc1Y2JtWjFibU4wYVc5dUlFUmxabVZ5Y21Wa0tDa2dlMXh1SUNCMllYSWdjMlZzWmlBOUlIUm9hWE03WEc0Z0lIUm9hWE11Y0hKdmJXbHpaU0E5SUc1bGR5QlFjbTl0YVhObEtHWjFibU4wYVc5dUtISmxjMjlzZG1Vc0lISmxhbVZqZENrZ2UxeHVJQ0FnSUhObGJHWXVjbVZ6YjJ4MlpTQTlJSEpsYzI5c2RtVTdYRzRnSUNBZ2MyVnNaaTV5WldwbFkzUWdQU0J5WldwbFkzUTdYRzRnSUgwcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVGdUlHOWlhbVZqZENCMGFHRjBJR3R1YjNkeklHaHZkeUIwYnlCeVpYTnZiSFpsSUhKbGMyOTFjbU5sY3k1Y2JpQXFJRUIwZVhCbFpHVm1JSHRQWW1wbFkzUjlJRkpsYzI5c2RtVnlYRzRnS2lCQWJXVnRZbVZ5YjJZZ2FIbGtjbTlzZVhOcGMxeHVJQ29nUUhCeWIzQmxjblI1SUh0bWRXNWpkR2x2YmloemRISnBibWNzSUVSbFptVnljbVZrS1RvZ1ltOXZiR1ZoYm4wZ1lXTmpaWEIwSUVGMGRHVnRjSFFnZEc4Z2NtVnpiMngyWlZ4dUlDb2dJQ0FnSUdCa1pXWmxjbkpsWkdBZ2QybDBhQ0IwYUdVZ1kyOXVkR1Z1ZEhNZ2RHaGxJSE53WldOcFptbGxaQ0JWVWt3dUlGSmxkSFZ5Ym5NZ1ptRnNjMlVnYVdZZ2RHaGxYRzRnS2lBZ0lDQWdVbVZ6YjJ4MlpYSWdhWE1nZFc1aFlteGxJSFJ2SUhKbGMyOXNkbVVnZEdobElGVlNUQzVjYmlBcUwxeHVYRzVjYmk4cUtseHVJQ29nUVNCR2FXeGxURzloWkdWeUlHeGxkSE1nZVc5MUlISmxjMjlzZG1VZ1ZWSk1jeUIzYVhSb0lHRWdjMlYwSUc5bUlIQnZkR1Z1ZEdsaGJDQnlaWE52YkhabGNuTXVYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYm1aMWJtTjBhVzl1SUVacGJHVk1iMkZrWlhJb0tTQjdYRzRnSUhSb2FYTXVjbVZ6YjJ4MlpYSnpJRDBnVzEwN1hHNGdJQzh2SUcxaGNDQjFjbXdnTFQ0Z1JHVm1aWEp5WldSY2JpQWdkR2hwY3k1eVpYRjFaWE4wY3lBOUlIdDlPMXh1ZlZ4dVJtbHNaVXh2WVdSbGNpNXdjbTkwYjNSNWNHVWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUZrWkNCaGJpQnBibk4wWVc1alpTQnZaaUJoSUZKbGMyOXNkbVZ5SUdOc1lYTnpJSFJ2SUhSb1pTQnNhWE4wSUc5bUlIVnliQ0J5WlhOdmJIWmxjbk5jYmlBZ0lDcGNiaUFnSUNvZ1QzSmtaWEpwYm1jZ2IyWWdjbVZ6YjJ4MlpYSnpJR2x6SUcxdmMzUWdkRzhnYkdWaGMzUWdjbVZqWlc1MGJIa2dZV1JrWldSY2JpQWdJQ29nVkdobElHWnBjbk4wSUhKbGMyOXNkbVZ5SUhSdklGd2lZV05qWlhCMFhDSWdkR2hsSUhWeWJDQjNhVzV6TGx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsYzI5c2RtVnlmU0J5WlhOdmJIWmxjaUJVYUdVZ2NtVnpiMngyWlhJZ2RHOGdZV1JrTGx4dUlDQWdLaTljYmlBZ1lXUmtVbVZ6YjJ4MlpYSTZJR1oxYm1OMGFXOXVLSEpsYzI5c2RtVnlLU0I3WEc0Z0lDQWdkR2hwY3k1eVpYTnZiSFpsY25NdWNIVnphQ2h5WlhOdmJIWmxjaWs3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5YmlCaElIQnliMjFwYzJVZ1ptOXlJR0Z1SUdGaWMyOXNkWFJsSUhWeWJGeHVJQ0FnS2x4dUlDQWdLaUJWY213Z2NtVnhkV1Z6ZEhNZ1lYSmxJR1JsWkhWd2JHbGpZWFJsWkNCaWVTQjBhR1VnYkc5aFpHVnlMQ0J5WlhSMWNtNXBibWNnZEdobElITmhiV1VnVUhKdmJXbHpaU0JtYjNKY2JpQWdJQ29nYVdSbGJuUnBZMkZzSUhWeWJITmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFZ5YkNBZ0lDQWdJQ0FnVkdobElHRmljMjlzZFhSbElIVnliQ0IwYnlCeVpYRjFaWE4wTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRRY205dGFYTmxManh6ZEhKcGJtYytmU0JCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUIwYUdVZ1kyOXVkR1Z1ZEhNZ2IyWWdkR2hsSUZWU1RDNWNiaUFnSUNvdlhHNGdJSEpsY1hWbGMzUTZJR1oxYm1OMGFXOXVLSFZ5YVNrZ2UxeHVJQ0FnSUhaaGNpQndjbTl0YVhObE8xeHVYRzRnSUNBZ2FXWWdLQ0VvZFhKcElHbHVJSFJvYVhNdWNtVnhkV1Z6ZEhNcEtTQjdYRzRnSUNBZ0lDQjJZWElnYUdGdVpHeGxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdkbUZ5SUdSbFptVnljbVZrSUQwZ2JtVjNJRVJsWm1WeWNtVmtLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxjWFZsYzNSelczVnlhVjBnUFNCa1pXWmxjbkpsWkR0Y2JseHVJQ0FnSUNBZ0x5OGdiRzl2Y0NCaVlXTnJkMkZ5WkhNZ2RHaHliM1ZuYUNCeVpYTnZiSFpsY25NZ2RXNTBhV3dnYjI1bElGd2lZV05qWlhCMGMxd2lJSFJvWlNCeVpYRjFaWE4wWEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2RHaHBjeTV5WlhOdmJIWmxjbk11YkdWdVozUm9JQzBnTVN3Z2Nqc2dhU0ErUFNBd095QnBMUzBwSUh0Y2JpQWdJQ0FnSUNBZ2NpQTlJSFJvYVhNdWNtVnpiMngyWlhKelcybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2NpNWhZMk5sY0hRb2RYSnBMQ0JrWldabGNuSmxaQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQm9ZVzVrYkdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvSVdoaGJtUnNaV1FwSUh0Y2JpQWdJQ0FnSUNBZ1pHVm1aWEp5WldRdWNtVnFaV04wS0c1bGR5QkZjbkp2Y2lnbmJtOGdjbVZ6YjJ4MlpYSWdabTkxYm1RZ1ptOXlJQ2NnS3lCMWNta3BLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnY0hKdmJXbHpaU0E5SUdSbFptVnljbVZrTG5CeWIyMXBjMlU3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIQnliMjFwYzJVZ1BTQjBhR2x6TG5KbGNYVmxjM1J6VzNWeWFWMHVjSEp2YldselpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY0hKdmJXbHpaVHRjYmlBZ2ZWeHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCR2FXeGxURzloWkdWeU8xeHVJbDE5IiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG5mdW5jdGlvbiBnZXRGaWxlKGZpbGVQYXRoLCBkZWZlcnJlZCwgc2Vjb25kUGF0aCkge1xuICBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04JywgZnVuY3Rpb24oZXJyLCBjb250ZW50KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKHNlY29uZFBhdGgpIHtcbiAgICAgICAgZ2V0RmlsZShzZWNvbmRQYXRoLCBkZWZlcnJlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIGZpbmRpbmcgXCIgKyBmaWxlUGF0aCk7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKGNvbnRlbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBwYXRoYWAgaXMgYSBzaWJsaW5nIG9yIGF1bnQgb2YgYHBhdGhiYC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU2libGluZ09yQXVudChwYXRoYSwgcGF0aGIpIHtcbiAgdmFyIHBhcmVudCA9IHBhdGguZGlybmFtZShwYXRoYSk7XG4gIGlmIChwYXRoYi5pbmRleE9mKHBhdGhhKSA9PT0gLTEgJiYgcGF0aGIuaW5kZXhPZihwYXJlbnQpID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoYW5nZSBgbG9jYWxQYXRoYCBmcm9tIGEgc2libGluZyBvZiBgYmFzZVBhdGhgIHRvIGJlIGEgY2hpbGQgb2ZcbiAqIGBiYXNlUGF0aGAgam9pbmVkIHdpdGggYHJlZGlyZWN0YC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RTaWJsaW5nKGJhc2VQYXRoLCBsb2NhbFBhdGgsIHJlZGlyZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBwYXRoLmRpcm5hbWUoYmFzZVBhdGgpO1xuICB2YXIgcmVkaXJlY3RlZCA9IHBhdGguam9pbihiYXNlUGF0aCwgcmVkaXJlY3QsIGxvY2FsUGF0aC5zbGljZShwYXJlbnQubGVuZ3RoKSk7XG4gIHJldHVybiByZWRpcmVjdGVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHJlcXVlc3RzIHZpYSB0aGUgZmlsZSBzeXN0ZW0uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnICBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmhvc3QgSG9zdG5hbWUgdG8gbWF0Y2ggZm9yIGFic29sdXRlIHVybHMuXG4gKiAgICAgTWF0Y2hlcyBcIi9cIiBieSBkZWZhdWx0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmJhc2VQYXRoIFByZWZpeCBkaXJlY3RvcnkgZm9yIGNvbXBvbmVudHMgaW4gdXJsLlxuICogICAgIERlZmF1bHRzIHRvIFwiL1wiLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yb290IEZpbGVzeXN0ZW0gcm9vdCB0byBzZWFyY2guIERlZmF1bHRzIHRvIHRoZVxuICogICAgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlZGlyZWN0IFdoZXJlIHRvIHJlZGlyZWN0IGxvb2t1cHMgdG8gc2libGluZ3MuXG4gKi9cbmZ1bmN0aW9uIEZTUmVzb2x2ZXIoY29uZmlnKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xufVxuRlNSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UodXJpKTtcbiAgICB2YXIgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdmFyIGJhc2UgPSB0aGlzLmNvbmZpZy5iYXNlUGF0aCAmJiBkZWNvZGVVUklDb21wb25lbnQodGhpcy5jb25maWcuYmFzZVBhdGgpO1xuICAgIHZhciByb290ID0gdGhpcy5jb25maWcucm9vdCAmJiBwYXRoLm5vcm1hbGl6ZSh0aGlzLmNvbmZpZy5yb290KTtcbiAgICB2YXIgcmVkaXJlY3QgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdDtcblxuICAgIHZhciBsb2NhbDtcblxuICAgIGlmICghcGFyc2VkLmhvc3RuYW1lIHx8IHBhcnNlZC5ob3N0bmFtZSA9PT0gaG9zdCkge1xuICAgICAgbG9jYWwgPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsKSB7XG4gICAgICAvLyB1bi1lc2NhcGUgSFRNTCBlc2NhcGVzXG4gICAgICBsb2NhbCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhbCk7XG5cbiAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5yZWxhdGl2ZShiYXNlLCBsb2NhbCk7XG4gICAgICB9XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBsb2NhbCA9IHBhdGguam9pbihyb290LCBsb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiYWNrdXA7XG4gICAgICBpZiAocmVkaXJlY3QgJiYgaXNTaWJsaW5nT3JBdW50KHJvb3QsIGxvY2FsKSkge1xuICAgICAgICBiYWNrdXAgPSByZWRpcmVjdFNpYmxpbmcocm9vdCwgbG9jYWwsIHJlZGlyZWN0KTtcbiAgICAgIH1cblxuICAgICAgZ2V0RmlsZShsb2NhbCwgZGVmZXJyZWQsIGJhY2t1cCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRlNSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSByZXNvbHZlciB0aGF0IHJlc29sdmVzIHRvIG51bGwgYW55IHVyaSBtYXRjaGluZyBjb25maWcuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnIFRoZSB1cmwgdG8gYGFjY2VwdGAuXG4gKi9cbmZ1bmN0aW9uIE5vb3BSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbk5vb3BSZXNvbHZlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICB1cmkgICAgICBUaGUgYWJzb2x1dGUgVVJJIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIHshRGVmZXJyZWR9IGRlZmVycmVkIFRoZSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgc2hvdWxkIGJlIHJlc29sdmVkIGlmXG4gICAqICAgICB0aGlzIHJlc29sdmVyIGhhbmRsZXMgdGhlIFVSSS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgVVJJIGlzIGhhbmRsZWQgYnkgdGhpcyByZXNvbHZlci5cbiAgICovXG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGlmICghdGhpcy5jb25maWcudGVzdCkge1xuICAgICAgaWYgKHVyaS5zZWFyY2godGhpcy5jb25maWcpID09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy50ZXN0KHVyaSkpIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmVycmVkLnJlc29sdmUoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5vb3BSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldEZpbGUodXJsLCBkZWZlcnJlZCwgY29uZmlnKSB7XG4gIC8qIGdsb2JhbCBYTUxIdHRwUmVxdWVzdDpmYWxzZSAqL1xuICB2YXIgeCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB4Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0dXMgPSB4LnN0YXR1cyB8fCAwO1xuICAgIGlmIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSh4LnJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KCd4aHIgc3RhdHVzOiAnICsgc3RhdHVzKTtcbiAgICB9XG4gIH07XG4gIHgub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWZlcnJlZC5yZWplY3QoZSk7XG4gIH07XG4gIHgub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgeC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICB9XG4gIHguc2VuZCgpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHJlc29sdmVyIHRoYXQgcmVxdWVzdHMgcmVzb3VyY2VzIG92ZXIgWEhSLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlc3BvbnNlVHlwZSBUeXBlIG9mIG9iamVjdCB0byBiZSByZXR1cm5lZCBieSB0aGVcbiAqICAgICBYSFIuIERlZmF1bHRzIHRvICd0ZXh0JywgYWNjZXB0cyAnZG9jdW1lbnQnLCAnYXJyYXlidWZmZXInLCBhbmQgJ2pzb24nLlxuICovXG5mdW5jdGlvbiBYSFJSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5YSFJSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGdldEZpbGUodXJpLCBkZWZlcnJlZCwgdGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUlJlc29sdmVyO1xuIixudWxsLCIvLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gd2hlbiB1c2VkIGluIG5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBsb2FkIHRoZSB1dGlsIG1vZHVsZSB3ZSBkZXBlbmQgb25cbi8vIHZlcnN1cyBsb2FkaW5nIHRoZSBidWlsdGluIHV0aWwgbW9kdWxlIGFzIGhhcHBlbnMgb3RoZXJ3aXNlXG4vLyB0aGlzIGlzIGEgYnVnIGluIG5vZGUgbW9kdWxlIGxvYWRpbmcgYXMgZmFyIGFzIEkgYW0gY29uY2VybmVkXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG5cbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gc3RhY2tTdGFydEZ1bmN0aW9uLm5hbWU7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gIGlmICh1dGlsLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG4gIGlmICh1dGlsLmlzTnVtYmVyKHZhbHVlKSAmJiAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHV0aWwuaXNGdW5jdGlvbih2YWx1ZSkgfHwgdXRpbC5pc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocykpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmFjdHVhbCwgcmVwbGFjZXIpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoc2VsZi5leHBlY3RlZCwgcmVwbGFjZXIpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGFjdHVhbCkgJiYgdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICBpZiAoYWN0dWFsLmxlbmd0aCAhPSBleHBlY3RlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYWN0dWFsW2ldICE9PSBleHBlY3RlZFtpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghdXRpbC5pc09iamVjdChhY3R1YWwpICYmICF1dGlsLmlzT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYikge1xuICBpZiAodXRpbC5pc051bGxPclVuZGVmaW5lZChhKSB8fCB1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKSxcbiAgICAgIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYik7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgIGtiID0gb2JqZWN0S2V5cyhiKSxcbiAgICAgIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHV0aWwuaXNTdHJpbmcoZXhwZWN0ZWQpKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGFjdHVhbCA9IGU7XG4gIH1cblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICghc2hvdWxkVGhyb3cgJiYgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MuYXBwbHkodGhpcywgW3RydWVdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzLmFwcGx5KHRoaXMsIFtmYWxzZV0uY29uY2F0KHBTbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHt0aHJvdyBlcnI7fX07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d1lYUm9MV0p5YjNkelpYSnBabmt2YVc1a1pYZ3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5OGdRMjl3ZVhKcFoyaDBJRXB2ZVdWdWRDd2dTVzVqTGlCaGJtUWdiM1JvWlhJZ1RtOWtaU0JqYjI1MGNtbGlkWFJ2Y25NdVhHNHZMMXh1THk4Z1VHVnliV2x6YzJsdmJpQnBjeUJvWlhKbFlua2daM0poYm5SbFpDd2dabkpsWlNCdlppQmphR0Z5WjJVc0lIUnZJR0Z1ZVNCd1pYSnpiMjRnYjJKMFlXbHVhVzVuSUdGY2JpOHZJR052Y0hrZ2IyWWdkR2hwY3lCemIyWjBkMkZ5WlNCaGJtUWdZWE56YjJOcFlYUmxaQ0JrYjJOMWJXVnVkR0YwYVc5dUlHWnBiR1Z6SUNoMGFHVmNiaTh2SUZ3aVUyOW1kSGRoY21WY0lpa3NJSFJ2SUdSbFlXd2dhVzRnZEdobElGTnZablIzWVhKbElIZHBkR2h2ZFhRZ2NtVnpkSEpwWTNScGIyNHNJR2x1WTJ4MVpHbHVaMXh1THk4Z2QybDBhRzkxZENCc2FXMXBkR0YwYVc5dUlIUm9aU0J5YVdkb2RITWdkRzhnZFhObExDQmpiM0I1TENCdGIyUnBabmtzSUcxbGNtZGxMQ0J3ZFdKc2FYTm9MRnh1THk4Z1pHbHpkSEpwWW5WMFpTd2djM1ZpYkdsalpXNXpaU3dnWVc1a0wyOXlJSE5sYkd3Z1kyOXdhV1Z6SUc5bUlIUm9aU0JUYjJaMGQyRnlaU3dnWVc1a0lIUnZJSEJsY20xcGRGeHVMeThnY0dWeWMyOXVjeUIwYnlCM2FHOXRJSFJvWlNCVGIyWjBkMkZ5WlNCcGN5Qm1kWEp1YVhOb1pXUWdkRzhnWkc4Z2MyOHNJSE4xWW1wbFkzUWdkRzhnZEdobFhHNHZMeUJtYjJ4c2IzZHBibWNnWTI5dVpHbDBhVzl1Y3pwY2JpOHZYRzR2THlCVWFHVWdZV0p2ZG1VZ1kyOXdlWEpwWjJoMElHNXZkR2xqWlNCaGJtUWdkR2hwY3lCd1pYSnRhWE56YVc5dUlHNXZkR2xqWlNCemFHRnNiQ0JpWlNCcGJtTnNkV1JsWkZ4dUx5OGdhVzRnWVd4c0lHTnZjR2xsY3lCdmNpQnpkV0p6ZEdGdWRHbGhiQ0J3YjNKMGFXOXVjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXVYRzR2TDF4dUx5OGdWRWhGSUZOUFJsUlhRVkpGSUVsVElGQlNUMVpKUkVWRUlGd2lRVk1nU1ZOY0lpd2dWMGxVU0U5VlZDQlhRVkpTUVU1VVdTQlBSaUJCVGxrZ1MwbE9SQ3dnUlZoUVVrVlRVMXh1THk4Z1QxSWdTVTFRVEVsRlJDd2dTVTVEVEZWRVNVNUhJRUpWVkNCT1QxUWdURWxOU1ZSRlJDQlVUeUJVU0VVZ1YwRlNVa0ZPVkVsRlV5QlBSbHh1THk4Z1RVVlNRMGhCVGxSQlFrbE1TVlJaTENCR1NWUk9SVk5USUVaUFVpQkJJRkJCVWxSSlExVk1RVklnVUZWU1VFOVRSU0JCVGtRZ1RrOU9TVTVHVWtsT1IwVk5SVTVVTGlCSlRseHVMeThnVGs4Z1JWWkZUbFFnVTBoQlRFd2dWRWhGSUVGVlZFaFBVbE1nVDFJZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWxNZ1FrVWdURWxCUWt4RklFWlBVaUJCVGxrZ1EweEJTVTBzWEc0dkx5QkVRVTFCUjBWVElFOVNJRTlVU0VWU0lFeEpRVUpKVEVsVVdTd2dWMGhGVkVoRlVpQkpUaUJCVGlCQlExUkpUMDRnVDBZZ1EwOU9WRkpCUTFRc0lGUlBVbFFnVDFKY2JpOHZJRTlVU0VWU1YwbFRSU3dnUVZKSlUwbE9SeUJHVWs5TkxDQlBWVlFnVDBZZ1QxSWdTVTRnUTA5T1RrVkRWRWxQVGlCWFNWUklJRlJJUlNCVFQwWlVWMEZTUlNCUFVpQlVTRVZjYmk4dklGVlRSU0JQVWlCUFZFaEZVaUJFUlVGTVNVNUhVeUJKVGlCVVNFVWdVMDlHVkZkQlVrVXVYRzVjYmk4dklISmxjMjlzZG1WeklDNGdZVzVrSUM0dUlHVnNaVzFsYm5SeklHbHVJR0VnY0dGMGFDQmhjbkpoZVNCM2FYUm9JR1JwY21WamRHOXllU0J1WVcxbGN5QjBhR1Z5WlZ4dUx5OGdiWFZ6ZENCaVpTQnVieUJ6YkdGemFHVnpMQ0JsYlhCMGVTQmxiR1Z0Wlc1MGN5d2diM0lnWkdWMmFXTmxJRzVoYldWeklDaGpPbHhjS1NCcGJpQjBhR1VnWVhKeVlYbGNiaTh2SUNoemJ5QmhiSE52SUc1dklHeGxZV1JwYm1jZ1lXNWtJSFJ5WVdsc2FXNW5JSE5zWVhOb1pYTWdMU0JwZENCa2IyVnpJRzV2ZENCa2FYTjBhVzVuZFdsemFGeHVMeThnY21Wc1lYUnBkbVVnWVc1a0lHRmljMjlzZFhSbElIQmhkR2h6S1Z4dVpuVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbFFYSnlZWGtvY0dGeWRITXNJR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUM4dklHbG1JSFJvWlNCd1lYUm9JSFJ5YVdWeklIUnZJR2R2SUdGaWIzWmxJSFJvWlNCeWIyOTBMQ0JnZFhCZ0lHVnVaSE1nZFhBZ1BpQXdYRzRnSUhaaGNpQjFjQ0E5SURBN1hHNGdJR1p2Y2lBb2RtRnlJR2tnUFNCd1lYSjBjeTVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lIWmhjaUJzWVhOMElEMGdjR0Z5ZEhOYmFWMDdYRzRnSUNBZ2FXWWdLR3hoYzNRZ1BUMDlJQ2N1SnlrZ2UxeHVJQ0FnSUNBZ2NHRnlkSE11YzNCc2FXTmxLR2tzSURFcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHRnpkQ0E5UFQwZ0p5NHVKeWtnZTF4dUlDQWdJQ0FnY0dGeWRITXVjM0JzYVdObEtHa3NJREVwTzF4dUlDQWdJQ0FnZFhBckt6dGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIVndLU0I3WEc0Z0lDQWdJQ0J3WVhKMGN5NXpjR3hwWTJVb2FTd2dNU2s3WEc0Z0lDQWdJQ0IxY0MwdE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJR2xtSUhSb1pTQndZWFJvSUdseklHRnNiRzkzWldRZ2RHOGdaMjhnWVdKdmRtVWdkR2hsSUhKdmIzUXNJSEpsYzNSdmNtVWdiR1ZoWkdsdVp5QXVMbk5jYmlBZ2FXWWdLR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUNBZ1ptOXlJQ2c3SUhWd0xTMDdJSFZ3S1NCN1hHNGdJQ0FnSUNCd1lYSjBjeTUxYm5Ob2FXWjBLQ2N1TGljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSjBjenRjYm4xY2JseHVMeThnVTNCc2FYUWdZU0JtYVd4bGJtRnRaU0JwYm5SdklGdHliMjkwTENCa2FYSXNJR0poYzJWdVlXMWxMQ0JsZUhSZExDQjFibWw0SUhabGNuTnBiMjVjYmk4dklDZHliMjkwSnlCcGN5QnFkWE4wSUdFZ2MyeGhjMmdzSUc5eUlHNXZkR2hwYm1jdVhHNTJZWElnYzNCc2FYUlFZWFJvVW1VZ1BWeHVJQ0FnSUM5ZUtGeGNMejk4S1NoYlhGeHpYRnhUWFNvL0tTZ29QenBjWEM1N01Td3lmWHhiWGx4Y0wxMHJQM3dwS0Z4Y0xsdGVMbHhjTDEwcWZDa3BLRDg2VzF4Y0wxMHFLU1F2TzF4dWRtRnlJSE53YkdsMFVHRjBhQ0E5SUdaMWJtTjBhVzl1S0dacGJHVnVZVzFsS1NCN1hHNGdJSEpsZEhWeWJpQnpjR3hwZEZCaGRHaFNaUzVsZUdWaktHWnBiR1Z1WVcxbEtTNXpiR2xqWlNneEtUdGNibjA3WEc1Y2JpOHZJSEJoZEdndWNtVnpiMngyWlNoYlpuSnZiU0F1TGk1ZExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21WemIyeDJaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2NtVnpiMngyWldSUVlYUm9JRDBnSnljc1hHNGdJQ0FnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ1ptRnNjMlU3WEc1Y2JpQWdabTl5SUNoMllYSWdhU0E5SUdGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SUMweElDWW1JQ0Z5WlhOdmJIWmxaRUZpYzI5c2RYUmxPeUJwTFMwcElIdGNiaUFnSUNCMllYSWdjR0YwYUNBOUlDaHBJRDQ5SURBcElEOGdZWEpuZFcxbGJuUnpXMmxkSURvZ2NISnZZMlZ6Y3k1amQyUW9LVHRjYmx4dUlDQWdJQzh2SUZOcmFYQWdaVzF3ZEhrZ1lXNWtJR2x1ZG1Gc2FXUWdaVzUwY21sbGMxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHRjBhQ0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMEZ5WjNWdFpXNTBjeUIwYnlCd1lYUm9MbkpsYzI5c2RtVWdiWFZ6ZENCaVpTQnpkSEpwYm1kekp5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hjR0YwYUNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WemIyeDJaV1JRWVhSb0lEMGdjR0YwYUNBcklDY3ZKeUFySUhKbGMyOXNkbVZrVUdGMGFEdGNiaUFnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ2NHRjBhQzVqYUdGeVFYUW9NQ2tnUFQwOUlDY3ZKenRjYmlBZ2ZWeHVYRzRnSUM4dklFRjBJSFJvYVhNZ2NHOXBiblFnZEdobElIQmhkR2dnYzJodmRXeGtJR0psSUhKbGMyOXNkbVZrSUhSdklHRWdablZzYkNCaFluTnZiSFYwWlNCd1lYUm9MQ0JpZFhSY2JpQWdMeThnYUdGdVpHeGxJSEpsYkdGMGFYWmxJSEJoZEdoeklIUnZJR0psSUhOaFptVWdLRzFwWjJoMElHaGhjSEJsYmlCM2FHVnVJSEJ5YjJObGMzTXVZM2RrS0NrZ1ptRnBiSE1wWEc1Y2JpQWdMeThnVG05eWJXRnNhWHBsSUhSb1pTQndZWFJvWEc0Z0lISmxjMjlzZG1Wa1VHRjBhQ0E5SUc1dmNtMWhiR2w2WlVGeWNtRjVLR1pwYkhSbGNpaHlaWE52YkhabFpGQmhkR2d1YzNCc2FYUW9KeThuS1N3Z1puVnVZM1JwYjI0b2NDa2dlMXh1SUNBZ0lISmxkSFZ5YmlBaElYQTdYRzRnSUgwcExDQWhjbVZ6YjJ4MlpXUkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lISmxkSFZ5YmlBb0tISmxjMjlzZG1Wa1FXSnpiMngxZEdVZ1B5QW5MeWNnT2lBbkp5a2dLeUJ5WlhOdmJIWmxaRkJoZEdncElIeDhJQ2N1Snp0Y2JuMDdYRzVjYmk4dklIQmhkR2d1Ym05eWJXRnNhWHBsS0hCaGRHZ3BYRzR2THlCd2IzTnBlQ0IyWlhKemFXOXVYRzVsZUhCdmNuUnpMbTV2Y20xaGJHbDZaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2RtRnlJR2x6UVdKemIyeDFkR1VnUFNCbGVIQnZjblJ6TG1selFXSnpiMngxZEdVb2NHRjBhQ2tzWEc0Z0lDQWdJQ0IwY21GcGJHbHVaMU5zWVhOb0lEMGdjM1ZpYzNSeUtIQmhkR2dzSUMweEtTQTlQVDBnSnk4bk8xeHVYRzRnSUM4dklFNXZjbTFoYkdsNlpTQjBhR1VnY0dGMGFGeHVJQ0J3WVhSb0lEMGdibTl5YldGc2FYcGxRWEp5WVhrb1ptbHNkR1Z5S0hCaGRHZ3VjM0JzYVhRb0p5OG5LU3dnWm5WdVkzUnBiMjRvY0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUFoSVhBN1hHNGdJSDBwTENBaGFYTkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lHbG1JQ2doY0dGMGFDQW1KaUFoYVhOQlluTnZiSFYwWlNrZ2UxeHVJQ0FnSUhCaGRHZ2dQU0FuTGljN1hHNGdJSDFjYmlBZ2FXWWdLSEJoZEdnZ0ppWWdkSEpoYVd4cGJtZFRiR0Z6YUNrZ2UxeHVJQ0FnSUhCaGRHZ2dLejBnSnk4bk8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlDaHBjMEZpYzI5c2RYUmxJRDhnSnk4bklEb2dKeWNwSUNzZ2NHRjBhRHRjYm4wN1hHNWNiaTh2SUhCdmMybDRJSFpsY25OcGIyNWNibVY0Y0c5eWRITXVhWE5CWW5OdmJIVjBaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUhCaGRHZ3VZMmhoY2tGMEtEQXBJRDA5UFNBbkx5YzdYRzU5TzF4dVhHNHZMeUJ3YjNOcGVDQjJaWEp6YVc5dVhHNWxlSEJ2Y25SekxtcHZhVzRnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIQmhkR2h6SUQwZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxDQXdLVHRjYmlBZ2NtVjBkWEp1SUdWNGNHOXlkSE11Ym05eWJXRnNhWHBsS0dacGJIUmxjaWh3WVhSb2N5d2dablZ1WTNScGIyNG9jQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSEFnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RCY21kMWJXVnVkSE1nZEc4Z2NHRjBhQzVxYjJsdUlHMTFjM1FnWW1VZ2MzUnlhVzVuY3ljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjRHRjYmlBZ2ZTa3VhbTlwYmlnbkx5Y3BLVHRjYm4wN1hHNWNibHh1THk4Z2NHRjBhQzV5Wld4aGRHbDJaU2htY205dExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21Wc1lYUnBkbVVnUFNCbWRXNWpkR2x2YmlobWNtOXRMQ0IwYnlrZ2UxeHVJQ0JtY205dElEMGdaWGh3YjNKMGN5NXlaWE52YkhabEtHWnliMjBwTG5OMVluTjBjaWd4S1R0Y2JpQWdkRzhnUFNCbGVIQnZjblJ6TG5KbGMyOXNkbVVvZEc4cExuTjFZbk4wY2lneEtUdGNibHh1SUNCbWRXNWpkR2x2YmlCMGNtbHRLR0Z5Y2lrZ2UxeHVJQ0FnSUhaaGNpQnpkR0Z5ZENBOUlEQTdYRzRnSUNBZ1ptOXlJQ2c3SUhOMFlYSjBJRHdnWVhKeUxteGxibWQwYURzZ2MzUmhjblFyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0emRHRnlkRjBnSVQwOUlDY25LU0JpY21WaGF6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdaVzVrSUQwZ1lYSnlMbXhsYm1kMGFDQXRJREU3WEc0Z0lDQWdabTl5SUNnN0lHVnVaQ0ErUFNBd095QmxibVF0TFNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0bGJtUmRJQ0U5UFNBbkp5a2dZbkpsWVdzN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tITjBZWEowSUQ0Z1pXNWtLU0J5WlhSMWNtNGdXMTA3WEc0Z0lDQWdjbVYwZFhKdUlHRnljaTV6YkdsalpTaHpkR0Z5ZEN3Z1pXNWtJQzBnYzNSaGNuUWdLeUF4S1R0Y2JpQWdmVnh1WEc0Z0lIWmhjaUJtY205dFVHRnlkSE1nUFNCMGNtbHRLR1p5YjIwdWMzQnNhWFFvSnk4bktTazdYRzRnSUhaaGNpQjBiMUJoY25SeklEMGdkSEpwYlNoMGJ5NXpjR3hwZENnbkx5Y3BLVHRjYmx4dUlDQjJZWElnYkdWdVozUm9JRDBnVFdGMGFDNXRhVzRvWm5KdmJWQmhjblJ6TG14bGJtZDBhQ3dnZEc5UVlYSjBjeTVzWlc1bmRHZ3BPMXh1SUNCMllYSWdjMkZ0WlZCaGNuUnpUR1Z1WjNSb0lEMGdiR1Z1WjNSb08xeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ2FXWWdLR1p5YjIxUVlYSjBjMXRwWFNBaFBUMGdkRzlRWVhKMGMxdHBYU2tnZTF4dUlDQWdJQ0FnYzJGdFpWQmhjblJ6VEdWdVozUm9JRDBnYVR0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFpoY2lCdmRYUndkWFJRWVhKMGN5QTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnYzJGdFpWQmhjblJ6VEdWdVozUm9PeUJwSUR3Z1puSnZiVkJoY25SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdiM1YwY0hWMFVHRnlkSE11Y0hWemFDZ25MaTRuS1R0Y2JpQWdmVnh1WEc0Z0lHOTFkSEIxZEZCaGNuUnpJRDBnYjNWMGNIVjBVR0Z5ZEhNdVkyOXVZMkYwS0hSdlVHRnlkSE11YzJ4cFkyVW9jMkZ0WlZCaGNuUnpUR1Z1WjNSb0tTazdYRzVjYmlBZ2NtVjBkWEp1SUc5MWRIQjFkRkJoY25SekxtcHZhVzRvSnk4bktUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdWMyVndJRDBnSnk4bk8xeHVaWGh3YjNKMGN5NWtaV3hwYldsMFpYSWdQU0FuT2ljN1hHNWNibVY0Y0c5eWRITXVaR2x5Ym1GdFpTQTlJR1oxYm1OMGFXOXVLSEJoZEdncElIdGNiaUFnZG1GeUlISmxjM1ZzZENBOUlITndiR2wwVUdGMGFDaHdZWFJvS1N4Y2JpQWdJQ0FnSUhKdmIzUWdQU0J5WlhOMWJIUmJNRjBzWEc0Z0lDQWdJQ0JrYVhJZ1BTQnlaWE4xYkhSYk1WMDdYRzVjYmlBZ2FXWWdLQ0Z5YjI5MElDWW1JQ0ZrYVhJcElIdGNiaUFnSUNBdkx5Qk9ieUJrYVhKdVlXMWxJSGRvWVhSemIyVjJaWEpjYmlBZ0lDQnlaWFIxY200Z0p5NG5PMXh1SUNCOVhHNWNiaUFnYVdZZ0tHUnBjaWtnZTF4dUlDQWdJQzh2SUVsMElHaGhjeUJoSUdScGNtNWhiV1VzSUhOMGNtbHdJSFJ5WVdsc2FXNW5JSE5zWVhOb1hHNGdJQ0FnWkdseUlEMGdaR2x5TG5OMVluTjBjaWd3TENCa2FYSXViR1Z1WjNSb0lDMGdNU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY205dmRDQXJJR1JwY2p0Y2JuMDdYRzVjYmx4dVpYaHdiM0owY3k1aVlYTmxibUZ0WlNBOUlHWjFibU4wYVc5dUtIQmhkR2dzSUdWNGRDa2dlMXh1SUNCMllYSWdaaUE5SUhOd2JHbDBVR0YwYUNod1lYUm9LVnN5WFR0Y2JpQWdMeThnVkU5RVR6b2diV0ZyWlNCMGFHbHpJR052YlhCaGNtbHpiMjRnWTJGelpTMXBibk5sYm5OcGRHbDJaU0J2YmlCM2FXNWtiM2R6UDF4dUlDQnBaaUFvWlhoMElDWW1JR1l1YzNWaWMzUnlLQzB4SUNvZ1pYaDBMbXhsYm1kMGFDa2dQVDA5SUdWNGRDa2dlMXh1SUNBZ0lHWWdQU0JtTG5OMVluTjBjaWd3TENCbUxteGxibWQwYUNBdElHVjRkQzVzWlc1bmRHZ3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQm1PMXh1ZlR0Y2JseHVYRzVsZUhCdmNuUnpMbVY0ZEc1aGJXVWdQU0JtZFc1amRHbHZiaWh3WVhSb0tTQjdYRzRnSUhKbGRIVnliaUJ6Y0d4cGRGQmhkR2dvY0dGMGFDbGJNMTA3WEc1OU8xeHVYRzVtZFc1amRHbHZiaUJtYVd4MFpYSWdLSGh6TENCbUtTQjdYRzRnSUNBZ2FXWWdLSGh6TG1acGJIUmxjaWtnY21WMGRYSnVJSGh6TG1acGJIUmxjaWhtS1R0Y2JpQWdJQ0IyWVhJZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCNGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9aaWg0YzF0cFhTd2dhU3dnZUhNcEtTQnlaWE11Y0hWemFDaDRjMXRwWFNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc1OVhHNWNiaTh2SUZOMGNtbHVaeTV3Y205MGIzUjVjR1V1YzNWaWMzUnlJQzBnYm1WbllYUnBkbVVnYVc1a1pYZ2daRzl1SjNRZ2QyOXlheUJwYmlCSlJUaGNiblpoY2lCemRXSnpkSElnUFNBbllXSW5Mbk4xWW5OMGNpZ3RNU2tnUFQwOUlDZGlKMXh1SUNBZ0lEOGdablZ1WTNScGIyNGdLSE4wY2l3Z2MzUmhjblFzSUd4bGJpa2dleUJ5WlhSMWNtNGdjM1J5TG5OMVluTjBjaWh6ZEdGeWRDd2diR1Z1S1NCOVhHNGdJQ0FnT2lCbWRXNWpkR2x2YmlBb2MzUnlMQ0J6ZEdGeWRDd2diR1Z1S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGeWRDQThJREFwSUhOMFlYSjBJRDBnYzNSeUxteGxibWQwYUNBcklITjBZWEowTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSeUxuTjFZbk4wY2loemRHRnlkQ3dnYkdWdUtUdGNiaUFnSUNCOVhHNDdYRzRpWFgwPSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudFF1ZXVlO1xuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICBjdXJyZW50UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG59XG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAoIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4vKiEgaHR0cDovL210aHMuYmUvcHVueWNvZGUgdjEuMi40IGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW14gLX5dLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1xceDJFfFxcdTMwMDJ8XFx1RkYwRXxcXHVGRjYxL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0YXJyYXlbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHJldHVybiBtYXAoc3RyaW5nLnNwbGl0KHJlZ2V4U2VwYXJhdG9ycyksIGZuKS5qb2luKCcuJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgdG8gYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gVW5pY29kZS4gT25seSB0aGVcblx0ICogUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLiBpdCBkb2Vzbid0XG5cdCAqIG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvXG5cdCAqIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBQdW55Y29kZSBkb21haW4gbmFtZSB0byBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoZG9tYWluKSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihkb21haW4sIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIHRvIFB1bnljb2RlLiBPbmx5IHRoZVxuXHQgKiBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW4gQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSB0byBjb252ZXJ0LCBhcyBhIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMi40Jyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d2RXNTVZMjlrWlM5d2RXNTVZMjlrWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlTQm9kSFJ3T2k4dmJYUm9jeTVpWlM5d2RXNTVZMjlrWlNCMk1TNHlMalFnWW5rZ1FHMWhkR2hwWVhNZ0tpOWNianNvWm5WdVkzUnBiMjRvY205dmRDa2dlMXh1WEc1Y2RDOHFLaUJFWlhSbFkzUWdabkpsWlNCMllYSnBZV0pzWlhNZ0tpOWNibHgwZG1GeUlHWnlaV1ZGZUhCdmNuUnpJRDBnZEhsd1pXOW1JR1Y0Y0c5eWRITWdQVDBnSjI5aWFtVmpkQ2NnSmlZZ1pYaHdiM0owY3p0Y2JseDBkbUZ5SUdaeVpXVk5iMlIxYkdVZ1BTQjBlWEJsYjJZZ2JXOWtkV3hsSUQwOUlDZHZZbXBsWTNRbklDWW1JRzF2WkhWc1pTQW1KbHh1WEhSY2RHMXZaSFZzWlM1bGVIQnZjblJ6SUQwOUlHWnlaV1ZGZUhCdmNuUnpJQ1ltSUcxdlpIVnNaVHRjYmx4MGRtRnlJR1p5WldWSGJHOWlZV3dnUFNCMGVYQmxiMllnWjJ4dlltRnNJRDA5SUNkdlltcGxZM1FuSUNZbUlHZHNiMkpoYkR0Y2JseDBhV1lnS0daeVpXVkhiRzlpWVd3dVoyeHZZbUZzSUQwOVBTQm1jbVZsUjJ4dlltRnNJSHg4SUdaeVpXVkhiRzlpWVd3dWQybHVaRzkzSUQwOVBTQm1jbVZsUjJ4dlltRnNLU0I3WEc1Y2RGeDBjbTl2ZENBOUlHWnlaV1ZIYkc5aVlXdzdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nVkdobElHQndkVzU1WTI5a1pXQWdiMkpxWldOMExseHVYSFFnS2lCQWJtRnRaU0J3ZFc1NVkyOWtaVnh1WEhRZ0tpQkFkSGx3WlNCUFltcGxZM1JjYmx4MElDb3ZYRzVjZEhaaGNpQndkVzU1WTI5a1pTeGNibHh1WEhRdktpb2dTR2xuYUdWemRDQndiM05wZEdsMlpTQnphV2R1WldRZ016SXRZbWwwSUdac2IyRjBJSFpoYkhWbElDb3ZYRzVjZEcxaGVFbHVkQ0E5SURJeE5EYzBPRE0yTkRjc0lDOHZJR0ZyWVM0Z01IZzNSa1pHUmtaR1JpQnZjaUF5WGpNeExURmNibHh1WEhRdktpb2dRbTl2ZEhOMGNtbHVaeUJ3WVhKaGJXVjBaWEp6SUNvdlhHNWNkR0poYzJVZ1BTQXpOaXhjYmx4MGRFMXBiaUE5SURFc1hHNWNkSFJOWVhnZ1BTQXlOaXhjYmx4MGMydGxkeUE5SURNNExGeHVYSFJrWVcxd0lEMGdOekF3TEZ4dVhIUnBibWwwYVdGc1FtbGhjeUE5SURjeUxGeHVYSFJwYm1sMGFXRnNUaUE5SURFeU9Dd2dMeThnTUhnNE1GeHVYSFJrWld4cGJXbDBaWElnUFNBbkxTY3NJQzh2SUNkY1hIZ3lSQ2RjYmx4dVhIUXZLaW9nVW1WbmRXeGhjaUJsZUhCeVpYTnphVzl1Y3lBcUwxeHVYSFJ5WldkbGVGQjFibmxqYjJSbElEMGdMMTU0YmkwdEx5eGNibHgwY21WblpYaE9iMjVCVTBOSlNTQTlJQzliWGlBdGZsMHZMQ0F2THlCMWJuQnlhVzUwWVdKc1pTQkJVME5KU1NCamFHRnljeUFySUc1dmJpMUJVME5KU1NCamFHRnljMXh1WEhSeVpXZGxlRk5sY0dGeVlYUnZjbk1nUFNBdlhGeDRNa1Y4WEZ4MU16QXdNbnhjWEhWR1JqQkZmRnhjZFVaR05qRXZaeXdnTHk4Z1VrWkRJRE0wT1RBZ2MyVndZWEpoZEc5eWMxeHVYRzVjZEM4cUtpQkZjbkp2Y2lCdFpYTnpZV2RsY3lBcUwxeHVYSFJsY25KdmNuTWdQU0I3WEc1Y2RGeDBKMjkyWlhKbWJHOTNKem9nSjA5MlpYSm1iRzkzT2lCcGJuQjFkQ0J1WldWa2N5QjNhV1JsY2lCcGJuUmxaMlZ5Y3lCMGJ5QndjbTlqWlhOekp5eGNibHgwWEhRbmJtOTBMV0poYzJsakp6b2dKMGxzYkdWbllXd2dhVzV3ZFhRZ1BqMGdNSGc0TUNBb2JtOTBJR0VnWW1GemFXTWdZMjlrWlNCd2IybHVkQ2tuTEZ4dVhIUmNkQ2RwYm5aaGJHbGtMV2x1Y0hWMEp6b2dKMGx1ZG1Gc2FXUWdhVzV3ZFhRblhHNWNkSDBzWEc1Y2JseDBMeW9xSUVOdmJuWmxibWxsYm1ObElITm9iM0owWTNWMGN5QXFMMXh1WEhSaVlYTmxUV2x1ZFhOVVRXbHVJRDBnWW1GelpTQXRJSFJOYVc0c1hHNWNkR1pzYjI5eUlEMGdUV0YwYUM1bWJHOXZjaXhjYmx4MGMzUnlhVzVuUm5KdmJVTm9ZWEpEYjJSbElEMGdVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU3hjYmx4dVhIUXZLaW9nVkdWdGNHOXlZWEo1SUhaaGNtbGhZbXhsSUNvdlhHNWNkR3RsZVR0Y2JseHVYSFF2S2kwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEtpOWNibHh1WEhRdktpcGNibHgwSUNvZ1FTQm5aVzVsY21saklHVnljbTl5SUhWMGFXeHBkSGtnWm5WdVkzUnBiMjR1WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCMGVYQmxJRlJvWlNCbGNuSnZjaUIwZVhCbExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1JYSnliM0o5SUZSb2NtOTNjeUJoSUdCU1lXNW5aVVZ5Y205eVlDQjNhWFJvSUhSb1pTQmhjSEJzYVdOaFlteGxJR1Z5Y205eUlHMWxjM05oWjJVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQmxjbkp2Y2loMGVYQmxLU0I3WEc1Y2RGeDBkR2h5YjNjZ1VtRnVaMlZGY25KdmNpaGxjbkp2Y25OYmRIbHdaVjBwTzF4dVhIUjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFRWdaMlZ1WlhKcFl5QmdRWEp5WVhramJXRndZQ0IxZEdsc2FYUjVJR1oxYm1OMGFXOXVMbHh1WEhRZ0tpQkFjSEpwZG1GMFpWeHVYSFFnS2lCQWNHRnlZVzBnZTBGeWNtRjVmU0JoY25KaGVTQlVhR1VnWVhKeVlYa2dkRzhnYVhSbGNtRjBaU0J2ZG1WeUxseHVYSFFnS2lCQWNHRnlZVzBnZTBaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCVWFHVWdablZ1WTNScGIyNGdkR2hoZENCblpYUnpJR05oYkd4bFpDQm1iM0lnWlhabGNua2dZWEp5WVhsY2JseDBJQ29nYVhSbGJTNWNibHgwSUNvZ1FISmxkSFZ5Ym5NZ2UwRnljbUY1ZlNCQklHNWxkeUJoY25KaGVTQnZaaUIyWVd4MVpYTWdjbVYwZFhKdVpXUWdZbmtnZEdobElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdiV0Z3S0dGeWNtRjVMQ0JtYmlrZ2UxeHVYSFJjZEhaaGNpQnNaVzVuZEdnZ1BTQmhjbkpoZVM1c1pXNW5kR2c3WEc1Y2RGeDBkMmhwYkdVZ0tHeGxibWQwYUMwdEtTQjdYRzVjZEZ4MFhIUmhjbkpoZVZ0c1pXNW5kR2hkSUQwZ1ptNG9ZWEp5WVhsYmJHVnVaM1JvWFNrN1hHNWNkRngwZlZ4dVhIUmNkSEpsZEhWeWJpQmhjbkpoZVR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkJJSE5wYlhCc1pTQmdRWEp5WVhramJXRndZQzFzYVd0bElIZHlZWEJ3WlhJZ2RHOGdkMjl5YXlCM2FYUm9JR1J2YldGcGJpQnVZVzFsSUhOMGNtbHVaM011WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElHUnZiV0ZwYmlCdVlXMWxMbHh1WEhRZ0tpQkFjR0Z5WVcwZ2UwWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QlVhR1VnWm5WdVkzUnBiMjRnZEdoaGRDQm5aWFJ6SUdOaGJHeGxaQ0JtYjNJZ1pYWmxjbmxjYmx4MElDb2dZMmhoY21GamRHVnlMbHh1WEhRZ0tpQkFjbVYwZFhKdWN5QjdRWEp5WVhsOUlFRWdibVYzSUhOMGNtbHVaeUJ2WmlCamFHRnlZV04wWlhKeklISmxkSFZ5Ym1Wa0lHSjVJSFJvWlNCallXeHNZbUZqYTF4dVhIUWdLaUJtZFc1amRHbHZiaTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUcxaGNFUnZiV0ZwYmloemRISnBibWNzSUdadUtTQjdYRzVjZEZ4MGNtVjBkWEp1SUcxaGNDaHpkSEpwYm1jdWMzQnNhWFFvY21WblpYaFRaWEJoY21GMGIzSnpLU3dnWm00cExtcHZhVzRvSnk0bktUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR052Ym5SaGFXNXBibWNnZEdobElHNTFiV1Z5YVdNZ1kyOWtaU0J3YjJsdWRITWdiMllnWldGamFDQlZibWxqYjJSbFhHNWNkQ0FxSUdOb1lYSmhZM1JsY2lCcGJpQjBhR1VnYzNSeWFXNW5MaUJYYUdsc1pTQktZWFpoVTJOeWFYQjBJSFZ6WlhNZ1ZVTlRMVElnYVc1MFpYSnVZV3hzZVN4Y2JseDBJQ29nZEdocGN5Qm1kVzVqZEdsdmJpQjNhV3hzSUdOdmJuWmxjblFnWVNCd1lXbHlJRzltSUhOMWNuSnZaMkYwWlNCb1lXeDJaWE1nS0dWaFkyZ2diMllnZDJocFkyaGNibHgwSUNvZ1ZVTlRMVElnWlhod2IzTmxjeUJoY3lCelpYQmhjbUYwWlNCamFHRnlZV04wWlhKektTQnBiblJ2SUdFZ2MybHVaMnhsSUdOdlpHVWdjRzlwYm5Rc1hHNWNkQ0FxSUcxaGRHTm9hVzVuSUZWVVJpMHhOaTVjYmx4MElDb2dRSE5sWlNCZ2NIVnVlV052WkdVdWRXTnpNaTVsYm1OdlpHVmdYRzVjZENBcUlFQnpaV1VnUEdoMGRIQTZMeTl0WVhSb2FXRnpZbmx1Wlc1ekxtSmxMMjV2ZEdWekwycGhkbUZ6WTNKcGNIUXRaVzVqYjJScGJtYytYRzVjZENBcUlFQnRaVzFpWlhKUFppQndkVzU1WTI5a1pTNTFZM015WEc1Y2RDQXFJRUJ1WVcxbElHUmxZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdjM1J5YVc1bklGUm9aU0JWYm1samIyUmxJR2x1Y0hWMElITjBjbWx1WnlBb1ZVTlRMVElwTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3UVhKeVlYbDlJRlJvWlNCdVpYY2dZWEp5WVhrZ2IyWWdZMjlrWlNCd2IybHVkSE11WEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCMVkzTXlaR1ZqYjJSbEtITjBjbWx1WnlrZ2UxeHVYSFJjZEhaaGNpQnZkWFJ3ZFhRZ1BTQmJYU3hjYmx4MFhIUWdJQ0FnWTI5MWJuUmxjaUE5SURBc1hHNWNkRngwSUNBZ0lHeGxibWQwYUNBOUlITjBjbWx1Wnk1c1pXNW5kR2dzWEc1Y2RGeDBJQ0FnSUhaaGJIVmxMRnh1WEhSY2RDQWdJQ0JsZUhSeVlUdGNibHgwWEhSM2FHbHNaU0FvWTI5MWJuUmxjaUE4SUd4bGJtZDBhQ2tnZTF4dVhIUmNkRngwZG1Gc2RXVWdQU0J6ZEhKcGJtY3VZMmhoY2tOdlpHVkJkQ2hqYjNWdWRHVnlLeXNwTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0OUlEQjRSRGd3TUNBbUppQjJZV3gxWlNBOFBTQXdlRVJDUmtZZ0ppWWdZMjkxYm5SbGNpQThJR3hsYm1kMGFDa2dlMXh1WEhSY2RGeDBYSFF2THlCb2FXZG9JSE4xY25KdloyRjBaU3dnWVc1a0lIUm9aWEpsSUdseklHRWdibVY0ZENCamFHRnlZV04wWlhKY2JseDBYSFJjZEZ4MFpYaDBjbUVnUFNCemRISnBibWN1WTJoaGNrTnZaR1ZCZENoamIzVnVkR1Z5S3lzcE8xeHVYSFJjZEZ4MFhIUnBaaUFvS0dWNGRISmhJQ1lnTUhoR1F6QXdLU0E5UFNBd2VFUkRNREFwSUhzZ0x5OGdiRzkzSUhOMWNuSnZaMkYwWlZ4dVhIUmNkRngwWEhSY2RHOTFkSEIxZEM1d2RYTm9LQ2dvZG1Gc2RXVWdKaUF3ZUROR1Jpa2dQRHdnTVRBcElDc2dLR1Y0ZEhKaElDWWdNSGd6UmtZcElDc2dNSGd4TURBd01DazdYRzVjZEZ4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRngwTHk4Z2RXNXRZWFJqYUdWa0lITjFjbkp2WjJGMFpUc2diMjVzZVNCaGNIQmxibVFnZEdocGN5QmpiMlJsSUhWdWFYUXNJR2x1SUdOaGMyVWdkR2hsSUc1bGVIUmNibHgwWEhSY2RGeDBYSFF2THlCamIyUmxJSFZ1YVhRZ2FYTWdkR2hsSUdocFoyZ2djM1Z5Y205bllYUmxJRzltSUdFZ2MzVnljbTluWVhSbElIQmhhWEpjYmx4MFhIUmNkRngwWEhSdmRYUndkWFF1Y0hWemFDaDJZV3gxWlNrN1hHNWNkRngwWEhSY2RGeDBZMjkxYm5SbGNpMHRPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNoMllXeDFaU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EzSmxZWFJsY3lCaElITjBjbWx1WnlCaVlYTmxaQ0J2YmlCaGJpQmhjbkpoZVNCdlppQnVkVzFsY21saklHTnZaR1VnY0c5cGJuUnpMbHh1WEhRZ0tpQkFjMlZsSUdCd2RXNTVZMjlrWlM1MVkzTXlMbVJsWTI5a1pXQmNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbExuVmpjekpjYmx4MElDb2dRRzVoYldVZ1pXNWpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdRWEp5WVhsOUlHTnZaR1ZRYjJsdWRITWdWR2hsSUdGeWNtRjVJRzltSUc1MWJXVnlhV01nWTI5a1pTQndiMmx1ZEhNdVhHNWNkQ0FxSUVCeVpYUjFjbTV6SUh0VGRISnBibWQ5SUZSb1pTQnVaWGNnVlc1cFkyOWtaU0J6ZEhKcGJtY2dLRlZEVXkweUtTNWNibHgwSUNvdlhHNWNkR1oxYm1OMGFXOXVJSFZqY3pKbGJtTnZaR1VvWVhKeVlYa3BJSHRjYmx4MFhIUnlaWFIxY200Z2JXRndLR0Z5Y21GNUxDQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVYSFJjZEZ4MGRtRnlJRzkxZEhCMWRDQTlJQ2NuTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0Z01IaEdSa1pHS1NCN1hHNWNkRngwWEhSY2RIWmhiSFZsSUMwOUlEQjRNVEF3TURBN1hHNWNkRngwWEhSY2RHOTFkSEIxZENBclBTQnpkSEpwYm1kR2NtOXRRMmhoY2tOdlpHVW9kbUZzZFdVZ1BqNCtJREV3SUNZZ01IZ3pSa1lnZkNBd2VFUTRNREFwTzF4dVhIUmNkRngwWEhSMllXeDFaU0E5SURCNFJFTXdNQ0I4SUhaaGJIVmxJQ1lnTUhnelJrWTdYRzVjZEZ4MFhIUjlYRzVjZEZ4MFhIUnZkWFJ3ZFhRZ0t6MGdjM1J5YVc1blJuSnZiVU5vWVhKRGIyUmxLSFpoYkhWbEtUdGNibHgwWEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RGeDBmU2t1YW05cGJpZ25KeWs3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOXVkbVZ5ZEhNZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MElHbHVkRzhnWVNCa2FXZHBkQzlwYm5SbFoyVnlMbHh1WEhRZ0tpQkFjMlZsSUdCa2FXZHBkRlJ2UW1GemFXTW9LV0JjYmx4MElDb2dRSEJ5YVhaaGRHVmNibHgwSUNvZ1FIQmhjbUZ0SUh0T2RXMWlaWEo5SUdOdlpHVlFiMmx1ZENCVWFHVWdZbUZ6YVdNZ2JuVnRaWEpwWXlCamIyUmxJSEJ2YVc1MElIWmhiSFZsTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3VG5WdFltVnlmU0JVYUdVZ2JuVnRaWEpwWXlCMllXeDFaU0J2WmlCaElHSmhjMmxqSUdOdlpHVWdjRzlwYm5RZ0tHWnZjaUIxYzJVZ2FXNWNibHgwSUNvZ2NtVndjbVZ6Wlc1MGFXNW5JR2x1ZEdWblpYSnpLU0JwYmlCMGFHVWdjbUZ1WjJVZ1lEQmdJSFJ2SUdCaVlYTmxJQzBnTVdBc0lHOXlJR0JpWVhObFlDQnBabHh1WEhRZ0tpQjBhR1VnWTI5a1pTQndiMmx1ZENCa2IyVnpJRzV2ZENCeVpYQnlaWE5sYm5RZ1lTQjJZV3gxWlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHSmhjMmxqVkc5RWFXZHBkQ2hqYjJSbFVHOXBiblFwSUh0Y2JseDBYSFJwWmlBb1kyOWtaVkJ2YVc1MElDMGdORGdnUENBeE1Da2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlHTnZaR1ZRYjJsdWRDQXRJREl5TzF4dVhIUmNkSDFjYmx4MFhIUnBaaUFvWTI5a1pWQnZhVzUwSUMwZ05qVWdQQ0F5TmlrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SUdOdlpHVlFiMmx1ZENBdElEWTFPMXh1WEhSY2RIMWNibHgwWEhScFppQW9ZMjlrWlZCdmFXNTBJQzBnT1RjZ1BDQXlOaWtnZTF4dVhIUmNkRngwY21WMGRYSnVJR052WkdWUWIybHVkQ0F0SURrM08xeHVYSFJjZEgxY2JseDBYSFJ5WlhSMWNtNGdZbUZ6WlR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkRiMjUyWlhKMGN5QmhJR1JwWjJsMEwybHVkR1ZuWlhJZ2FXNTBieUJoSUdKaGMybGpJR052WkdVZ2NHOXBiblF1WEc1Y2RDQXFJRUJ6WldVZ1lHSmhjMmxqVkc5RWFXZHBkQ2dwWUZ4dVhIUWdLaUJBY0hKcGRtRjBaVnh1WEhRZ0tpQkFjR0Z5WVcwZ2UwNTFiV0psY24wZ1pHbG5hWFFnVkdobElHNTFiV1Z5YVdNZ2RtRnNkV1VnYjJZZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1RuVnRZbVZ5ZlNCVWFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRDQjNhRzl6WlNCMllXeDFaU0FvZDJobGJpQjFjMlZrSUdadmNseHVYSFFnS2lCeVpYQnlaWE5sYm5ScGJtY2dhVzUwWldkbGNuTXBJR2x6SUdCa2FXZHBkR0FzSUhkb2FXTm9JRzVsWldSeklIUnZJR0psSUdsdUlIUm9aU0J5WVc1blpWeHVYSFFnS2lCZ01HQWdkRzhnWUdKaGMyVWdMU0F4WUM0Z1NXWWdZR1pzWVdkZ0lHbHpJRzV2YmkxNlpYSnZMQ0IwYUdVZ2RYQndaWEpqWVhObElHWnZjbTBnYVhOY2JseDBJQ29nZFhObFpEc2daV3h6WlN3Z2RHaGxJR3h2ZDJWeVkyRnpaU0JtYjNKdElHbHpJSFZ6WldRdUlGUm9aU0JpWldoaGRtbHZjaUJwY3lCMWJtUmxabWx1WldSY2JseDBJQ29nYVdZZ1lHWnNZV2RnSUdseklHNXZiaTE2WlhKdklHRnVaQ0JnWkdsbmFYUmdJR2hoY3lCdWJ5QjFjSEJsY21OaGMyVWdabTl5YlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHUnBaMmwwVkc5Q1lYTnBZeWhrYVdkcGRDd2dabXhoWnlrZ2UxeHVYSFJjZEM4dklDQXdMaTR5TlNCdFlYQWdkRzhnUVZORFNVa2dZUzR1ZWlCdmNpQkJMaTVhWEc1Y2RGeDBMeThnTWpZdUxqTTFJRzFoY0NCMGJ5QkJVME5KU1NBd0xpNDVYRzVjZEZ4MGNtVjBkWEp1SUdScFoybDBJQ3NnTWpJZ0t5QTNOU0FxSUNoa2FXZHBkQ0E4SURJMktTQXRJQ2dvWm14aFp5QWhQU0F3S1NBOFBDQTFLVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCQ2FXRnpJR0ZrWVhCMFlYUnBiMjRnWm5WdVkzUnBiMjRnWVhNZ2NHVnlJSE5sWTNScGIyNGdNeTQwSUc5bUlGSkdReUF6TkRreUxseHVYSFFnS2lCb2RIUndPaTh2ZEc5dmJITXVhV1YwWmk1dmNtY3ZhSFJ0YkM5eVptTXpORGt5STNObFkzUnBiMjR0TXk0MFhHNWNkQ0FxSUVCd2NtbDJZWFJsWEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCaFpHRndkQ2hrWld4MFlTd2diblZ0VUc5cGJuUnpMQ0JtYVhKemRGUnBiV1VwSUh0Y2JseDBYSFIyWVhJZ2F5QTlJREE3WEc1Y2RGeDBaR1ZzZEdFZ1BTQm1hWEp6ZEZScGJXVWdQeUJtYkc5dmNpaGtaV3gwWVNBdklHUmhiWEFwSURvZ1pHVnNkR0VnUGo0Z01UdGNibHgwWEhSa1pXeDBZU0FyUFNCbWJHOXZjaWhrWld4MFlTQXZJRzUxYlZCdmFXNTBjeWs3WEc1Y2RGeDBabTl5SUNndktpQnVieUJwYm1sMGFXRnNhWHBoZEdsdmJpQXFMenNnWkdWc2RHRWdQaUJpWVhObFRXbHVkWE5VVFdsdUlDb2dkRTFoZUNBK1BpQXhPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEdSbGJIUmhJRDBnWm14dmIzSW9aR1ZzZEdFZ0x5QmlZWE5sVFdsdWRYTlVUV2x1S1R0Y2JseDBYSFI5WEc1Y2RGeDBjbVYwZFhKdUlHWnNiMjl5S0dzZ0t5QW9ZbUZ6WlUxcGJuVnpWRTFwYmlBcklERXBJQ29nWkdWc2RHRWdMeUFvWkdWc2RHRWdLeUJ6YTJWM0tTazdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nUTI5dWRtVnlkSE1nWVNCUWRXNTVZMjlrWlNCemRISnBibWNnYjJZZ1FWTkRTVWt0YjI1c2VTQnplVzFpYjJ4eklIUnZJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1ZjYmx4MElDb2djM2x0WW05c2N5NWNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbFhHNWNkQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5mU0JwYm5CMWRDQlVhR1VnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElISmxjM1ZzZEdsdVp5QnpkSEpwYm1jZ2IyWWdWVzVwWTI5a1pTQnplVzFpYjJ4ekxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdaR1ZqYjJSbEtHbHVjSFYwS1NCN1hHNWNkRngwTHk4Z1JHOXVKM1FnZFhObElGVkRVeTB5WEc1Y2RGeDBkbUZ5SUc5MWRIQjFkQ0E5SUZ0ZExGeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ0E5SUdsdWNIVjBMbXhsYm1kMGFDeGNibHgwWEhRZ0lDQWdiM1YwTEZ4dVhIUmNkQ0FnSUNCcElEMGdNQ3hjYmx4MFhIUWdJQ0FnYmlBOUlHbHVhWFJwWVd4T0xGeHVYSFJjZENBZ0lDQmlhV0Z6SUQwZ2FXNXBkR2xoYkVKcFlYTXNYRzVjZEZ4MElDQWdJR0poYzJsakxGeHVYSFJjZENBZ0lDQnFMRnh1WEhSY2RDQWdJQ0JwYm1SbGVDeGNibHgwWEhRZ0lDQWdiMnhrYVN4Y2JseDBYSFFnSUNBZ2R5eGNibHgwWEhRZ0lDQWdheXhjYmx4MFhIUWdJQ0FnWkdsbmFYUXNYRzVjZEZ4MElDQWdJSFFzWEc1Y2RGeDBJQ0FnSUM4cUtpQkRZV05vWldRZ1kyRnNZM1ZzWVhScGIyNGdjbVZ6ZFd4MGN5QXFMMXh1WEhSY2RDQWdJQ0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwTHk4Z1NHRnVaR3hsSUhSb1pTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MGN6b2diR1YwSUdCaVlYTnBZMkFnWW1VZ2RHaGxJRzUxYldKbGNpQnZaaUJwYm5CMWRDQmpiMlJsWEc1Y2RGeDBMeThnY0c5cGJuUnpJR0psWm05eVpTQjBhR1VnYkdGemRDQmtaV3hwYldsMFpYSXNJRzl5SUdBd1lDQnBaaUIwYUdWeVpTQnBjeUJ1YjI1bExDQjBhR1Z1SUdOdmNIbGNibHgwWEhRdkx5QjBhR1VnWm1seWMzUWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITWdkRzhnZEdobElHOTFkSEIxZEM1Y2JseHVYSFJjZEdKaGMybGpJRDBnYVc1d2RYUXViR0Z6ZEVsdVpHVjRUMllvWkdWc2FXMXBkR1Z5S1R0Y2JseDBYSFJwWmlBb1ltRnphV01nUENBd0tTQjdYRzVjZEZ4MFhIUmlZWE5wWXlBOUlEQTdYRzVjZEZ4MGZWeHVYRzVjZEZ4MFptOXlJQ2hxSUQwZ01Ec2dhaUE4SUdKaGMybGpPeUFySzJvcElIdGNibHgwWEhSY2RDOHZJR2xtSUdsMEozTWdibTkwSUdFZ1ltRnphV01nWTI5a1pTQndiMmx1ZEZ4dVhIUmNkRngwYVdZZ0tHbHVjSFYwTG1Ob1lYSkRiMlJsUVhRb2Fpa2dQajBnTUhnNE1Da2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25ibTkwTFdKaGMybGpKeWs3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNocGJuQjFkQzVqYUdGeVEyOWtaVUYwS0dvcEtUdGNibHgwWEhSOVhHNWNibHgwWEhRdkx5Qk5ZV2x1SUdSbFkyOWthVzVuSUd4dmIzQTZJSE4wWVhKMElHcDFjM1FnWVdaMFpYSWdkR2hsSUd4aGMzUWdaR1ZzYVcxcGRHVnlJR2xtSUdGdWVTQmlZWE5wWXlCamIyUmxYRzVjZEZ4MEx5OGdjRzlwYm5SeklIZGxjbVVnWTI5d2FXVmtPeUJ6ZEdGeWRDQmhkQ0IwYUdVZ1ltVm5hVzV1YVc1bklHOTBhR1Z5ZDJselpTNWNibHh1WEhSY2RHWnZjaUFvYVc1a1pYZ2dQU0JpWVhOcFl5QStJREFnUHlCaVlYTnBZeUFySURFZ09pQXdPeUJwYm1SbGVDQThJR2x1Y0hWMFRHVnVaM1JvT3lBdktpQnVieUJtYVc1aGJDQmxlSEJ5WlhOemFXOXVJQ292S1NCN1hHNWNibHgwWEhSY2RDOHZJR0JwYm1SbGVHQWdhWE1nZEdobElHbHVaR1Y0SUc5bUlIUm9aU0J1WlhoMElHTm9ZWEpoWTNSbGNpQjBieUJpWlNCamIyNXpkVzFsWkM1Y2JseDBYSFJjZEM4dklFUmxZMjlrWlNCaElHZGxibVZ5WVd4cGVtVmtJSFpoY21saFlteGxMV3hsYm1kMGFDQnBiblJsWjJWeUlHbHVkRzhnWUdSbGJIUmhZQ3hjYmx4MFhIUmNkQzh2SUhkb2FXTm9JR2RsZEhNZ1lXUmtaV1FnZEc4Z1lHbGdMaUJVYUdVZ2IzWmxjbVpzYjNjZ1kyaGxZMnRwYm1jZ2FYTWdaV0Z6YVdWeVhHNWNkRngwWEhRdkx5QnBaaUIzWlNCcGJtTnlaV0Z6WlNCZ2FXQWdZWE1nZDJVZ1oyOHNJSFJvWlc0Z2MzVmlkSEpoWTNRZ2IyWm1JR2wwY3lCemRHRnlkR2x1WjF4dVhIUmNkRngwTHk4Z2RtRnNkV1VnWVhRZ2RHaGxJR1Z1WkNCMGJ5QnZZblJoYVc0Z1lHUmxiSFJoWUM1Y2JseDBYSFJjZEdadmNpQW9iMnhrYVNBOUlHa3NJSGNnUFNBeExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseHVYSFJjZEZ4MFhIUnBaaUFvYVc1a1pYZ2dQajBnYVc1d2RYUk1aVzVuZEdncElIdGNibHgwWEhSY2RGeDBYSFJsY25KdmNpZ25hVzUyWVd4cFpDMXBibkIxZENjcE8xeHVYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkRngwWkdsbmFYUWdQU0JpWVhOcFkxUnZSR2xuYVhRb2FXNXdkWFF1WTJoaGNrTnZaR1ZCZENocGJtUmxlQ3NyS1NrN1hHNWNibHgwWEhSY2RGeDBhV1lnS0dScFoybDBJRDQ5SUdKaGMyVWdmSHdnWkdsbmFYUWdQaUJtYkc5dmNpZ29iV0Y0U1c1MElDMGdhU2tnTHlCM0tTa2dlMXh1WEhSY2RGeDBYSFJjZEdWeWNtOXlLQ2R2ZG1WeVpteHZkeWNwTzF4dVhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBhU0FyUFNCa2FXZHBkQ0FxSUhjN1hHNWNkRngwWEhSY2RIUWdQU0JySUR3OUlHSnBZWE1nUHlCMFRXbHVJRG9nS0dzZ1BqMGdZbWxoY3lBcklIUk5ZWGdnUHlCMFRXRjRJRG9nYXlBdElHSnBZWE1wTzF4dVhHNWNkRngwWEhSY2RHbG1JQ2hrYVdkcGRDQThJSFFwSUh0Y2JseDBYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUmNkR0poYzJWTmFXNTFjMVFnUFNCaVlYTmxJQzBnZER0Y2JseDBYSFJjZEZ4MGFXWWdLSGNnUGlCbWJHOXZjaWh0WVhoSmJuUWdMeUJpWVhObFRXbHVkWE5VS1NrZ2UxeHVYSFJjZEZ4MFhIUmNkR1Z5Y205eUtDZHZkbVZ5Wm14dmR5Y3BPMXh1WEhSY2RGeDBYSFI5WEc1Y2JseDBYSFJjZEZ4MGR5QXFQU0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RHOTFkQ0E5SUc5MWRIQjFkQzVzWlc1bmRHZ2dLeUF4TzF4dVhIUmNkRngwWW1saGN5QTlJR0ZrWVhCMEtHa2dMU0J2YkdScExDQnZkWFFzSUc5c1pHa2dQVDBnTUNrN1hHNWNibHgwWEhSY2RDOHZJR0JwWUNCM1lYTWdjM1Z3Y0c5elpXUWdkRzhnZDNKaGNDQmhjbTkxYm1RZ1puSnZiU0JnYjNWMFlDQjBieUJnTUdBc1hHNWNkRngwWEhRdkx5QnBibU55WlcxbGJuUnBibWNnWUc1Z0lHVmhZMmdnZEdsdFpTd2djMjhnZDJVbmJHd2dabWw0SUhSb1lYUWdibTkzT2x4dVhIUmNkRngwYVdZZ0tHWnNiMjl5S0drZ0x5QnZkWFFwSUQ0Z2JXRjRTVzUwSUMwZ2Jpa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwYmlBclBTQm1iRzl2Y2locElDOGdiM1YwS1R0Y2JseDBYSFJjZEdrZ0pUMGdiM1YwTzF4dVhHNWNkRngwWEhRdkx5Qkpibk5sY25RZ1lHNWdJR0YwSUhCdmMybDBhVzl1SUdCcFlDQnZaaUIwYUdVZ2IzVjBjSFYwWEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjM0JzYVdObEtHa3JLeXdnTUN3Z2JpazdYRzVjYmx4MFhIUjlYRzVjYmx4MFhIUnlaWFIxY200Z2RXTnpNbVZ1WTI5a1pTaHZkWFJ3ZFhRcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRU52Ym5abGNuUnpJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1VnYzNsdFltOXNjeUIwYnlCaElGQjFibmxqYjJSbElITjBjbWx1WnlCdlppQkJVME5KU1MxdmJteDVYRzVjZENBcUlITjViV0p2YkhNdVhHNWNkQ0FxSUVCdFpXMWlaWEpQWmlCd2RXNTVZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdhVzV3ZFhRZ1ZHaGxJSE4wY21sdVp5QnZaaUJWYm1samIyUmxJSE41YldKdmJITXVYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0J5WlhOMWJIUnBibWNnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHVnVZMjlrWlNocGJuQjFkQ2tnZTF4dVhIUmNkSFpoY2lCdUxGeHVYSFJjZENBZ0lDQmtaV3gwWVN4Y2JseDBYSFFnSUNBZ2FHRnVaR3hsWkVOUVEyOTFiblFzWEc1Y2RGeDBJQ0FnSUdKaGMybGpUR1Z1WjNSb0xGeHVYSFJjZENBZ0lDQmlhV0Z6TEZ4dVhIUmNkQ0FnSUNCcUxGeHVYSFJjZENBZ0lDQnRMRnh1WEhSY2RDQWdJQ0J4TEZ4dVhIUmNkQ0FnSUNCckxGeHVYSFJjZENBZ0lDQjBMRnh1WEhSY2RDQWdJQ0JqZFhKeVpXNTBWbUZzZFdVc1hHNWNkRngwSUNBZ0lHOTFkSEIxZENBOUlGdGRMRnh1WEhSY2RDQWdJQ0F2S2lvZ1lHbHVjSFYwVEdWdVozUm9ZQ0IzYVd4c0lHaHZiR1FnZEdobElHNTFiV0psY2lCdlppQmpiMlJsSUhCdmFXNTBjeUJwYmlCZ2FXNXdkWFJnTGlBcUwxeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ3hjYmx4MFhIUWdJQ0FnTHlvcUlFTmhZMmhsWkNCallXeGpkV3hoZEdsdmJpQnlaWE4xYkhSeklDb3ZYRzVjZEZ4MElDQWdJR2hoYm1Sc1pXUkRVRU52ZFc1MFVHeDFjMDl1WlN4Y2JseDBYSFFnSUNBZ1ltRnpaVTFwYm5WelZDeGNibHgwWEhRZ0lDQWdjVTFwYm5WelZEdGNibHh1WEhSY2RDOHZJRU52Ym5abGNuUWdkR2hsSUdsdWNIVjBJR2x1SUZWRFV5MHlJSFJ2SUZWdWFXTnZaR1ZjYmx4MFhIUnBibkIxZENBOUlIVmpjekprWldOdlpHVW9hVzV3ZFhRcE8xeHVYRzVjZEZ4MEx5OGdRMkZqYUdVZ2RHaGxJR3hsYm1kMGFGeHVYSFJjZEdsdWNIVjBUR1Z1WjNSb0lEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNWNkRngwTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnYzNSaGRHVmNibHgwWEhSdUlEMGdhVzVwZEdsaGJFNDdYRzVjZEZ4MFpHVnNkR0VnUFNBd08xeHVYSFJjZEdKcFlYTWdQU0JwYm1sMGFXRnNRbWxoY3p0Y2JseHVYSFJjZEM4dklFaGhibVJzWlNCMGFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITmNibHgwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWTNWeWNtVnVkRlpoYkhWbElEMGdhVzV3ZFhSYmFsMDdYRzVjZEZ4MFhIUnBaaUFvWTNWeWNtVnVkRlpoYkhWbElEd2dNSGc0TUNrZ2UxeHVYSFJjZEZ4MFhIUnZkWFJ3ZFhRdWNIVnphQ2h6ZEhKcGJtZEdjbTl0UTJoaGNrTnZaR1VvWTNWeWNtVnVkRlpoYkhWbEtTazdYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYRzVjZEZ4MGFHRnVaR3hsWkVOUVEyOTFiblFnUFNCaVlYTnBZMHhsYm1kMGFDQTlJRzkxZEhCMWRDNXNaVzVuZEdnN1hHNWNibHgwWEhRdkx5QmdhR0Z1Wkd4bFpFTlFRMjkxYm5SZ0lHbHpJSFJvWlNCdWRXMWlaWElnYjJZZ1kyOWtaU0J3YjJsdWRITWdkR2hoZENCb1lYWmxJR0psWlc0Z2FHRnVaR3hsWkR0Y2JseDBYSFF2THlCZ1ltRnphV05NWlc1bmRHaGdJR2x6SUhSb1pTQnVkVzFpWlhJZ2IyWWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITXVYRzVjYmx4MFhIUXZMeUJHYVc1cGMyZ2dkR2hsSUdKaGMybGpJSE4wY21sdVp5QXRJR2xtSUdsMElHbHpJRzV2ZENCbGJYQjBlU0F0SUhkcGRHZ2dZU0JrWld4cGJXbDBaWEpjYmx4MFhIUnBaaUFvWW1GemFXTk1aVzVuZEdncElIdGNibHgwWEhSY2RHOTFkSEIxZEM1d2RYTm9LR1JsYkdsdGFYUmxjaWs3WEc1Y2RGeDBmVnh1WEc1Y2RGeDBMeThnVFdGcGJpQmxibU52WkdsdVp5QnNiMjl3T2x4dVhIUmNkSGRvYVd4bElDaG9ZVzVrYkdWa1ExQkRiM1Z1ZENBOElHbHVjSFYwVEdWdVozUm9LU0I3WEc1Y2JseDBYSFJjZEM4dklFRnNiQ0J1YjI0dFltRnphV01nWTI5a1pTQndiMmx1ZEhNZ1BDQnVJR2hoZG1VZ1ltVmxiaUJvWVc1a2JHVmtJR0ZzY21WaFpIa3VJRVpwYm1RZ2RHaGxJRzVsZUhSY2JseDBYSFJjZEM4dklHeGhjbWRsY2lCdmJtVTZYRzVjZEZ4MFhIUm1iM0lnS0cwZ1BTQnRZWGhKYm5Rc0lHb2dQU0F3T3lCcUlEd2dhVzV3ZFhSTVpXNW5kR2c3SUNzcmFpa2dlMXh1WEhSY2RGeDBYSFJqZFhKeVpXNTBWbUZzZFdVZ1BTQnBibkIxZEZ0cVhUdGNibHgwWEhSY2RGeDBhV1lnS0dOMWNuSmxiblJXWVd4MVpTQStQU0J1SUNZbUlHTjFjbkpsYm5SV1lXeDFaU0E4SUcwcElIdGNibHgwWEhSY2RGeDBYSFJ0SUQwZ1kzVnljbVZ1ZEZaaGJIVmxPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5WEc1Y2JseDBYSFJjZEM4dklFbHVZM0psWVhObElHQmtaV3gwWVdBZ1pXNXZkV2RvSUhSdklHRmtkbUZ1WTJVZ2RHaGxJR1JsWTI5a1pYSW5jeUE4Yml4cFBpQnpkR0YwWlNCMGJ5QThiU3d3UGl4Y2JseDBYSFJjZEM4dklHSjFkQ0JuZFdGeVpDQmhaMkZwYm5OMElHOTJaWEptYkc5M1hHNWNkRngwWEhSb1lXNWtiR1ZrUTFCRGIzVnVkRkJzZFhOUGJtVWdQU0JvWVc1a2JHVmtRMUJEYjNWdWRDQXJJREU3WEc1Y2RGeDBYSFJwWmlBb2JTQXRJRzRnUGlCbWJHOXZjaWdvYldGNFNXNTBJQzBnWkdWc2RHRXBJQzhnYUdGdVpHeGxaRU5RUTI5MWJuUlFiSFZ6VDI1bEtTa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwWkdWc2RHRWdLejBnS0cwZ0xTQnVLU0FxSUdoaGJtUnNaV1JEVUVOdmRXNTBVR3gxYzA5dVpUdGNibHgwWEhSY2RHNGdQU0J0TzF4dVhHNWNkRngwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWEhSamRYSnlaVzUwVm1Gc2RXVWdQU0JwYm5CMWRGdHFYVHRjYmx4dVhIUmNkRngwWEhScFppQW9ZM1Z5Y21WdWRGWmhiSFZsSUR3Z2JpQW1KaUFySzJSbGJIUmhJRDRnYldGNFNXNTBLU0I3WEc1Y2RGeDBYSFJjZEZ4MFpYSnliM0lvSjI5MlpYSm1iRzkzSnlrN1hHNWNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJwWmlBb1kzVnljbVZ1ZEZaaGJIVmxJRDA5SUc0cElIdGNibHgwWEhSY2RGeDBYSFF2THlCU1pYQnlaWE5sYm5RZ1pHVnNkR0VnWVhNZ1lTQm5aVzVsY21Gc2FYcGxaQ0IyWVhKcFlXSnNaUzFzWlc1bmRHZ2dhVzUwWldkbGNseHVYSFJjZEZ4MFhIUmNkR1p2Y2lBb2NTQTlJR1JsYkhSaExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEZ4MFhIUmNkSFFnUFNCcklEdzlJR0pwWVhNZ1B5QjBUV2x1SURvZ0tHc2dQajBnWW1saGN5QXJJSFJOWVhnZ1B5QjBUV0Y0SURvZ2F5QXRJR0pwWVhNcE8xeHVYSFJjZEZ4MFhIUmNkRngwYVdZZ0tIRWdQQ0IwS1NCN1hHNWNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUmNkRngwY1UxcGJuVnpWQ0E5SUhFZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MFltRnpaVTFwYm5WelZDQTlJR0poYzJVZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MGIzVjBjSFYwTG5CMWMyZ29YRzVjZEZ4MFhIUmNkRngwWEhSY2RITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vZENBcklIRk5hVzUxYzFRZ0pTQmlZWE5sVFdsdWRYTlVMQ0F3S1NsY2JseDBYSFJjZEZ4MFhIUmNkQ2s3WEc1Y2RGeDBYSFJjZEZ4MFhIUnhJRDBnWm14dmIzSW9jVTFwYm5WelZDQXZJR0poYzJWTmFXNTFjMVFwTzF4dVhIUmNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJjZEc5MWRIQjFkQzV3ZFhOb0tITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vY1N3Z01Da3BLVHRjYmx4MFhIUmNkRngwWEhSaWFXRnpJRDBnWVdSaGNIUW9aR1ZzZEdFc0lHaGhibVJzWldSRFVFTnZkVzUwVUd4MWMwOXVaU3dnYUdGdVpHeGxaRU5RUTI5MWJuUWdQVDBnWW1GemFXTk1aVzVuZEdncE8xeHVYSFJjZEZ4MFhIUmNkR1JsYkhSaElEMGdNRHRjYmx4MFhIUmNkRngwWEhRcksyaGhibVJzWldSRFVFTnZkVzUwTzF4dVhIUmNkRngwWEhSOVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RDc3JaR1ZzZEdFN1hHNWNkRngwWEhRcksyNDdYRzVjYmx4MFhIUjlYRzVjZEZ4MGNtVjBkWEp1SUc5MWRIQjFkQzVxYjJsdUtDY25LVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCRGIyNTJaWEowY3lCaElGQjFibmxqYjJSbElITjBjbWx1WnlCeVpYQnlaWE5sYm5ScGJtY2dZU0JrYjIxaGFXNGdibUZ0WlNCMGJ5QlZibWxqYjJSbExpQlBibXg1SUhSb1pWeHVYSFFnS2lCUWRXNTVZMjlrWldRZ2NHRnlkSE1nYjJZZ2RHaGxJR1J2YldGcGJpQnVZVzFsSUhkcGJHd2dZbVVnWTI5dWRtVnlkR1ZrTENCcExtVXVJR2wwSUdSdlpYTnVKM1JjYmx4MElDb2diV0YwZEdWeUlHbG1JSGx2ZFNCallXeHNJR2wwSUc5dUlHRWdjM1J5YVc1bklIUm9ZWFFnYUdGeklHRnNjbVZoWkhrZ1ltVmxiaUJqYjI1MlpYSjBaV1FnZEc5Y2JseDBJQ29nVlc1cFkyOWtaUzVjYmx4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElGQjFibmxqYjJSbElHUnZiV0ZwYmlCdVlXMWxJSFJ2SUdOdmJuWmxjblFnZEc4Z1ZXNXBZMjlrWlM1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElGVnVhV052WkdVZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaGxJR2RwZG1WdUlGQjFibmxqYjJSbFhHNWNkQ0FxSUhOMGNtbHVaeTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUhSdlZXNXBZMjlrWlNoa2IyMWhhVzRwSUh0Y2JseDBYSFJ5WlhSMWNtNGdiV0Z3Ukc5dFlXbHVLR1J2YldGcGJpd2dablZ1WTNScGIyNG9jM1J5YVc1bktTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2NtVm5aWGhRZFc1NVkyOWtaUzUwWlhOMEtITjBjbWx1WnlsY2JseDBYSFJjZEZ4MFB5QmtaV052WkdVb2MzUnlhVzVuTG5Oc2FXTmxLRFFwTG5SdlRHOTNaWEpEWVhObEtDa3BYRzVjZEZ4MFhIUmNkRG9nYzNSeWFXNW5PMXh1WEhSY2RIMHBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVOdmJuWmxjblJ6SUdFZ1ZXNXBZMjlrWlNCemRISnBibWNnY21Wd2NtVnpaVzUwYVc1bklHRWdaRzl0WVdsdUlHNWhiV1VnZEc4Z1VIVnVlV052WkdVdUlFOXViSGtnZEdobFhHNWNkQ0FxSUc1dmJpMUJVME5KU1NCd1lYSjBjeUJ2WmlCMGFHVWdaRzl0WVdsdUlHNWhiV1VnZDJsc2JDQmlaU0JqYjI1MlpYSjBaV1FzSUdrdVpTNGdhWFFnWkc5bGMyNG5kRnh1WEhRZ0tpQnRZWFIwWlhJZ2FXWWdlVzkxSUdOaGJHd2dhWFFnZDJsMGFDQmhJR1J2YldGcGJpQjBhR0YwSjNNZ1lXeHlaV0ZrZVNCcGJpQkJVME5KU1M1Y2JseDBJQ29nUUcxbGJXSmxjazltSUhCMWJubGpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQmtiMjFoYVc0Z1ZHaGxJR1J2YldGcGJpQnVZVzFsSUhSdklHTnZiblpsY25Rc0lHRnpJR0VnVlc1cFkyOWtaU0J6ZEhKcGJtY3VYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0JRZFc1NVkyOWtaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ1oybDJaVzRnWkc5dFlXbHVJRzVoYldVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQjBiMEZUUTBsSktHUnZiV0ZwYmlrZ2UxeHVYSFJjZEhKbGRIVnliaUJ0WVhCRWIyMWhhVzRvWkc5dFlXbHVMQ0JtZFc1amRHbHZiaWh6ZEhKcGJtY3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQnlaV2RsZUU1dmJrRlRRMGxKTG5SbGMzUW9jM1J5YVc1bktWeHVYSFJjZEZ4MFhIUS9JQ2Q0YmkwdEp5QXJJR1Z1WTI5a1pTaHpkSEpwYm1jcFhHNWNkRngwWEhSY2REb2djM1J5YVc1bk8xeHVYSFJjZEgwcE8xeHVYSFI5WEc1Y2JseDBMeW90TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNvdlhHNWNibHgwTHlvcUlFUmxabWx1WlNCMGFHVWdjSFZpYkdsaklFRlFTU0FxTDF4dVhIUndkVzU1WTI5a1pTQTlJSHRjYmx4MFhIUXZLaXBjYmx4MFhIUWdLaUJCSUhOMGNtbHVaeUJ5WlhCeVpYTmxiblJwYm1jZ2RHaGxJR04xY25KbGJuUWdVSFZ1ZVdOdlpHVXVhbk1nZG1WeWMybHZiaUJ1ZFcxaVpYSXVYRzVjZEZ4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZEZ4MElDb2dRSFI1Y0dVZ1UzUnlhVzVuWEc1Y2RGeDBJQ292WEc1Y2RGeDBKM1psY25OcGIyNG5PaUFuTVM0eUxqUW5MRnh1WEhSY2RDOHFLbHh1WEhSY2RDQXFJRUZ1SUc5aWFtVmpkQ0J2WmlCdFpYUm9iMlJ6SUhSdklHTnZiblpsY25RZ1puSnZiU0JLWVhaaFUyTnlhWEIwSjNNZ2FXNTBaWEp1WVd3Z1kyaGhjbUZqZEdWeVhHNWNkRngwSUNvZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnS0ZWRFV5MHlLU0IwYnlCVmJtbGpiMlJsSUdOdlpHVWdjRzlwYm5SekxDQmhibVFnWW1GamF5NWNibHgwWEhRZ0tpQkFjMlZsSUR4b2RIUndPaTh2YldGMGFHbGhjMko1Ym1WdWN5NWlaUzl1YjNSbGN5OXFZWFpoYzJOeWFYQjBMV1Z1WTI5a2FXNW5QbHh1WEhSY2RDQXFJRUJ0WlcxaVpYSlBaaUJ3ZFc1NVkyOWtaVnh1WEhSY2RDQXFJRUIwZVhCbElFOWlhbVZqZEZ4dVhIUmNkQ0FxTDF4dVhIUmNkQ2QxWTNNeUp6b2dlMXh1WEhSY2RGeDBKMlJsWTI5a1pTYzZJSFZqY3pKa1pXTnZaR1VzWEc1Y2RGeDBYSFFuWlc1amIyUmxKem9nZFdOek1tVnVZMjlrWlZ4dVhIUmNkSDBzWEc1Y2RGeDBKMlJsWTI5a1pTYzZJR1JsWTI5a1pTeGNibHgwWEhRblpXNWpiMlJsSnpvZ1pXNWpiMlJsTEZ4dVhIUmNkQ2QwYjBGVFEwbEpKem9nZEc5QlUwTkpTU3hjYmx4MFhIUW5kRzlWYm1samIyUmxKem9nZEc5VmJtbGpiMlJsWEc1Y2RIMDdYRzVjYmx4MEx5b3FJRVY0Y0c5elpTQmdjSFZ1ZVdOdlpHVmdJQ292WEc1Y2RDOHZJRk52YldVZ1FVMUVJR0oxYVd4a0lHOXdkR2x0YVhwbGNuTXNJR3hwYTJVZ2NpNXFjeXdnWTJobFkyc2dabTl5SUhOd1pXTnBabWxqSUdOdmJtUnBkR2x2YmlCd1lYUjBaWEp1YzF4dVhIUXZMeUJzYVd0bElIUm9aU0JtYjJ4c2IzZHBibWM2WEc1Y2RHbG1JQ2hjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsSUQwOUlDZG1kVzVqZEdsdmJpY2dKaVpjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsTG1GdFpDQTlQU0FuYjJKcVpXTjBKeUFtSmx4dVhIUmNkR1JsWm1sdVpTNWhiV1JjYmx4MEtTQjdYRzVjZEZ4MFpHVm1hVzVsS0Nkd2RXNTVZMjlrWlNjc0lHWjFibU4wYVc5dUtDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIQjFibmxqYjJSbE8xeHVYSFJjZEgwcE8xeHVYSFI5SUdWc2MyVWdhV1lnS0daeVpXVkZlSEJ2Y25SeklDWW1JQ0ZtY21WbFJYaHdiM0owY3k1dWIyUmxWSGx3WlNrZ2UxeHVYSFJjZEdsbUlDaG1jbVZsVFc5a2RXeGxLU0I3SUM4dklHbHVJRTV2WkdVdWFuTWdiM0lnVW1sdVoyOUtVeUIyTUM0NExqQXJYRzVjZEZ4MFhIUm1jbVZsVFc5a2RXeGxMbVY0Y0c5eWRITWdQU0J3ZFc1NVkyOWtaVHRjYmx4MFhIUjlJR1ZzYzJVZ2V5QXZMeUJwYmlCT1lYSjNhR0ZzSUc5eUlGSnBibWR2U2xNZ2RqQXVOeTR3TFZ4dVhIUmNkRngwWm05eUlDaHJaWGtnYVc0Z2NIVnVlV052WkdVcElIdGNibHgwWEhSY2RGeDBjSFZ1ZVdOdlpHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU0FtSmlBb1puSmxaVVY0Y0c5eWRITmJhMlY1WFNBOUlIQjFibmxqYjJSbFcydGxlVjBwTzF4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTQmxiSE5sSUhzZ0x5OGdhVzRnVW1ocGJtOGdiM0lnWVNCM1pXSWdZbkp2ZDNObGNseHVYSFJjZEhKdmIzUXVjSFZ1ZVdOdlpHVWdQU0J3ZFc1NVkyOWtaVHRjYmx4MGZWeHVYRzU5S0hSb2FYTXBLVHRjYmlKZGZRPT0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5MWRHbHNMM1YwYVd3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4dklFTnZjSGx5YVdkb2RDQktiM2xsYm5Rc0lFbHVZeTRnWVc1a0lHOTBhR1Z5SUU1dlpHVWdZMjl1ZEhKcFluVjBiM0p6TGx4dUx5OWNiaTh2SUZCbGNtMXBjM05wYjI0Z2FYTWdhR1Z5WldKNUlHZHlZVzUwWldRc0lHWnlaV1VnYjJZZ1kyaGhjbWRsTENCMGJ5QmhibmtnY0dWeWMyOXVJRzlpZEdGcGJtbHVaeUJoWEc0dkx5QmpiM0I1SUc5bUlIUm9hWE1nYzI5bWRIZGhjbVVnWVc1a0lHRnpjMjlqYVdGMFpXUWdaRzlqZFcxbGJuUmhkR2x2YmlCbWFXeGxjeUFvZEdobFhHNHZMeUJjSWxOdlpuUjNZWEpsWENJcExDQjBieUJrWldGc0lHbHVJSFJvWlNCVGIyWjBkMkZ5WlNCM2FYUm9iM1YwSUhKbGMzUnlhV04wYVc5dUxDQnBibU5zZFdScGJtZGNiaTh2SUhkcGRHaHZkWFFnYkdsdGFYUmhkR2x2YmlCMGFHVWdjbWxuYUhSeklIUnZJSFZ6WlN3Z1kyOXdlU3dnYlc5a2FXWjVMQ0J0WlhKblpTd2djSFZpYkdsemFDeGNiaTh2SUdScGMzUnlhV0oxZEdVc0lITjFZbXhwWTJWdWMyVXNJR0Z1WkM5dmNpQnpaV3hzSUdOdmNHbGxjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXNJR0Z1WkNCMGJ5QndaWEp0YVhSY2JpOHZJSEJsY25OdmJuTWdkRzhnZDJodmJTQjBhR1VnVTI5bWRIZGhjbVVnYVhNZ1puVnlibWx6YUdWa0lIUnZJR1J2SUhOdkxDQnpkV0pxWldOMElIUnZJSFJvWlZ4dUx5OGdabTlzYkc5M2FXNW5JR052Ym1ScGRHbHZibk02WEc0dkwxeHVMeThnVkdobElHRmliM1psSUdOdmNIbHlhV2RvZENCdWIzUnBZMlVnWVc1a0lIUm9hWE1nY0dWeWJXbHpjMmx2YmlCdWIzUnBZMlVnYzJoaGJHd2dZbVVnYVc1amJIVmtaV1JjYmk4dklHbHVJR0ZzYkNCamIzQnBaWE1nYjNJZ2MzVmljM1JoYm5ScFlXd2djRzl5ZEdsdmJuTWdiMllnZEdobElGTnZablIzWVhKbExseHVMeTljYmk4dklGUklSU0JUVDBaVVYwRlNSU0JKVXlCUVVrOVdTVVJGUkNCY0lrRlRJRWxUWENJc0lGZEpWRWhQVlZRZ1YwRlNVa0ZPVkZrZ1QwWWdRVTVaSUV0SlRrUXNJRVZZVUZKRlUxTmNiaTh2SUU5U0lFbE5VRXhKUlVRc0lFbE9RMHhWUkVsT1J5QkNWVlFnVGs5VUlFeEpUVWxVUlVRZ1ZFOGdWRWhGSUZkQlVsSkJUbFJKUlZNZ1QwWmNiaTh2SUUxRlVrTklRVTVVUVVKSlRFbFVXU3dnUmtsVVRrVlRVeUJHVDFJZ1FTQlFRVkpVU1VOVlRFRlNJRkJWVWxCUFUwVWdRVTVFSUU1UFRrbE9SbEpKVGtkRlRVVk9WQzRnU1U1Y2JpOHZJRTVQSUVWV1JVNVVJRk5JUVV4TUlGUklSU0JCVlZSSVQxSlRJRTlTSUVOUFVGbFNTVWRJVkNCSVQweEVSVkpUSUVKRklFeEpRVUpNUlNCR1QxSWdRVTVaSUVOTVFVbE5MRnh1THk4Z1JFRk5RVWRGVXlCUFVpQlBWRWhGVWlCTVNVRkNTVXhKVkZrc0lGZElSVlJJUlZJZ1NVNGdRVTRnUVVOVVNVOU9JRTlHSUVOUFRsUlNRVU5VTENCVVQxSlVJRTlTWEc0dkx5QlBWRWhGVWxkSlUwVXNJRUZTU1ZOSlRrY2dSbEpQVFN3Z1QxVlVJRTlHSUU5U0lFbE9JRU5QVGs1RlExUkpUMDRnVjBsVVNDQlVTRVVnVTA5R1ZGZEJVa1VnVDFJZ1ZFaEZYRzR2THlCVlUwVWdUMUlnVDFSSVJWSWdSRVZCVEVsT1IxTWdTVTRnVkVoRklGTlBSbFJYUVZKRkxseHVYRzUyWVhJZ1ptOXliV0YwVW1WblJYaHdJRDBnTHlWYmMyUnFKVjB2Wnp0Y2JtVjRjRzl5ZEhNdVptOXliV0YwSUQwZ1puVnVZM1JwYjI0b1ppa2dlMXh1SUNCcFppQW9JV2x6VTNSeWFXNW5LR1lwS1NCN1hHNGdJQ0FnZG1GeUlHOWlhbVZqZEhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2IySnFaV04wY3k1d2RYTm9LR2x1YzNCbFkzUW9ZWEpuZFcxbGJuUnpXMmxkS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnZZbXBsWTNSekxtcHZhVzRvSnlBbktUdGNiaUFnZlZ4dVhHNGdJSFpoY2lCcElEMGdNVHRjYmlBZ2RtRnlJR0Z5WjNNZ1BTQmhjbWQxYldWdWRITTdYRzRnSUhaaGNpQnNaVzRnUFNCaGNtZHpMbXhsYm1kMGFEdGNiaUFnZG1GeUlITjBjaUE5SUZOMGNtbHVaeWhtS1M1eVpYQnNZV05sS0dadmNtMWhkRkpsWjBWNGNDd2dablZ1WTNScGIyNG9lQ2tnZTF4dUlDQWdJR2xtSUNoNElEMDlQU0FuSlNVbktTQnlaWFIxY200Z0p5VW5PMXh1SUNBZ0lHbG1JQ2hwSUQ0OUlHeGxiaWtnY21WMGRYSnVJSGc3WEc0Z0lDQWdjM2RwZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0JqWVhObElDY2xjeWM2SUhKbGRIVnliaUJUZEhKcGJtY29ZWEpuYzF0cEt5dGRLVHRjYmlBZ0lDQWdJR05oYzJVZ0p5VmtKem9nY21WMGRYSnVJRTUxYldKbGNpaGhjbWR6VzJrcksxMHBPMXh1SUNBZ0lDQWdZMkZ6WlNBbkpXb25PbHh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQktVMDlPTG5OMGNtbHVaMmxtZVNoaGNtZHpXMmtySzEwcE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkYlEybHlZM1ZzWVhKZEp6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIZzdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JpQWdabTl5SUNoMllYSWdlQ0E5SUdGeVozTmJhVjA3SUdrZ1BDQnNaVzQ3SUhnZ1BTQmhjbWR6V3lzcmFWMHBJSHRjYmlBZ0lDQnBaaUFvYVhOT2RXeHNLSGdwSUh4OElDRnBjMDlpYW1WamRDaDRLU2tnZTF4dUlDQWdJQ0FnYzNSeUlDczlJQ2NnSnlBcklIZzdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhOMGNpQXJQU0FuSUNjZ0t5QnBibk53WldOMEtIZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2MzUnlPMXh1ZlR0Y2JseHVYRzR2THlCTllYSnJJSFJvWVhRZ1lTQnRaWFJvYjJRZ2MyaHZkV3hrSUc1dmRDQmlaU0IxYzJWa0xseHVMeThnVW1WMGRYSnVjeUJoSUcxdlpHbG1hV1ZrSUdaMWJtTjBhVzl1SUhkb2FXTm9JSGRoY201eklHOXVZMlVnWW5rZ1pHVm1ZWFZzZEM1Y2JpOHZJRWxtSUMwdGJtOHRaR1Z3Y21WallYUnBiMjRnYVhNZ2MyVjBMQ0IwYUdWdUlHbDBJR2x6SUdFZ2JtOHRiM0F1WEc1bGVIQnZjblJ6TG1SbGNISmxZMkYwWlNBOUlHWjFibU4wYVc5dUtHWnVMQ0J0YzJjcElIdGNiaUFnTHk4Z1FXeHNiM2NnWm05eUlHUmxjSEpsWTJGMGFXNW5JSFJvYVc1bmN5QnBiaUIwYUdVZ2NISnZZMlZ6Y3lCdlppQnpkR0Z5ZEdsdVp5QjFjQzVjYmlBZ2FXWWdLR2x6Vlc1a1pXWnBibVZrS0dkc2IySmhiQzV3Y205alpYTnpLU2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmxlSEJ2Y25SekxtUmxjSEpsWTJGMFpTaG1iaXdnYlhObktTNWhjSEJzZVNoMGFHbHpMQ0JoY21kMWJXVnVkSE1wTzF4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCcFppQW9jSEp2WTJWemN5NXViMFJsY0hKbFkyRjBhVzl1SUQwOVBTQjBjblZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJSGRoY201bFpDQTlJR1poYkhObE8xeHVJQ0JtZFc1amRHbHZiaUJrWlhCeVpXTmhkR1ZrS0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkMkZ5Ym1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvY0hKdlkyVnpjeTUwYUhKdmQwUmxjSEpsWTJGMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWh0YzJjcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHdjbTlqWlhOekxuUnlZV05sUkdWd2NtVmpZWFJwYjI0cElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNTBjbUZqWlNodGMyY3BPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lodGMyY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkMkZ5Ym1Wa0lEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWnVMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1pHVndjbVZqWVhSbFpEdGNibjA3WEc1Y2JseHVkbUZ5SUdSbFluVm5jeUE5SUh0OU8xeHVkbUZ5SUdSbFluVm5SVzUyYVhKdmJqdGNibVY0Y0c5eWRITXVaR1ZpZFdkc2IyY2dQU0JtZFc1amRHbHZiaWh6WlhRcElIdGNiaUFnYVdZZ0tHbHpWVzVrWldacGJtVmtLR1JsWW5WblJXNTJhWEp2YmlrcFhHNGdJQ0FnWkdWaWRXZEZiblpwY205dUlEMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUVSVUpWUnlCOGZDQW5KenRjYmlBZ2MyVjBJRDBnYzJWMExuUnZWWEJ3WlhKRFlYTmxLQ2s3WEc0Z0lHbG1JQ2doWkdWaWRXZHpXM05sZEYwcElIdGNiaUFnSUNCcFppQW9ibVYzSUZKbFowVjRjQ2duWEZ4Y1hHSW5JQ3NnYzJWMElDc2dKMXhjWEZ4aUp5d2dKMmtuS1M1MFpYTjBLR1JsWW5WblJXNTJhWEp2YmlrcElIdGNiaUFnSUNBZ0lIWmhjaUJ3YVdRZ1BTQndjbTlqWlhOekxuQnBaRHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCdGMyY2dQU0JsZUhCdmNuUnpMbVp2Y20xaGRDNWhjSEJzZVNobGVIQnZjblJ6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0NjbGN5QWxaRG9nSlhNbkxDQnpaWFFzSUhCcFpDd2diWE5uS1R0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdmVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUmxZblZuYzF0elpYUmRPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVZqYUc5eklIUm9aU0IyWVd4MVpTQnZaaUJoSUhaaGJIVmxMaUJVY25seklIUnZJSEJ5YVc1MElIUm9aU0IyWVd4MVpTQnZkWFJjYmlBcUlHbHVJSFJvWlNCaVpYTjBJSGRoZVNCd2IzTnphV0pzWlNCbmFYWmxiaUIwYUdVZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2WW1vZ1ZHaGxJRzlpYW1WamRDQjBieUJ3Y21sdWRDQnZkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUJQY0hScGIyNWhiQ0J2Y0hScGIyNXpJRzlpYW1WamRDQjBhR0YwSUdGc2RHVnljeUIwYUdVZ2IzVjBjSFYwTGx4dUlDb3ZYRzR2S2lCc1pXZGhZM2s2SUc5aWFpd2djMmh2ZDBocFpHUmxiaXdnWkdWd2RHZ3NJR052Ykc5eWN5b3ZYRzVtZFc1amRHbHZiaUJwYm5Od1pXTjBLRzlpYWl3Z2IzQjBjeWtnZTF4dUlDQXZMeUJrWldaaGRXeDBJRzl3ZEdsdmJuTmNiaUFnZG1GeUlHTjBlQ0E5SUh0Y2JpQWdJQ0J6WldWdU9pQmJYU3hjYmlBZ0lDQnpkSGxzYVhwbE9pQnpkSGxzYVhwbFRtOURiMnh2Y2x4dUlDQjlPMXh1SUNBdkx5QnNaV2RoWTNrdUxpNWNiaUFnYVdZZ0tHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BqMGdNeWtnWTNSNExtUmxjSFJvSUQwZ1lYSm5kVzFsYm5Seld6SmRPMXh1SUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQStQU0EwS1NCamRIZ3VZMjlzYjNKeklEMGdZWEpuZFcxbGJuUnpXek5kTzF4dUlDQnBaaUFvYVhOQ2IyOXNaV0Z1S0c5d2RITXBLU0I3WEc0Z0lDQWdMeThnYkdWbllXTjVMaTR1WEc0Z0lDQWdZM1I0TG5Ob2IzZElhV1JrWlc0Z1BTQnZjSFJ6TzF4dUlDQjlJR1ZzYzJVZ2FXWWdLRzl3ZEhNcElIdGNiaUFnSUNBdkx5Qm5iM1FnWVc0Z1hDSnZjSFJwYjI1elhDSWdiMkpxWldOMFhHNGdJQ0FnWlhod2IzSjBjeTVmWlhoMFpXNWtLR04wZUN3Z2IzQjBjeWs3WEc0Z0lIMWNiaUFnTHk4Z2MyVjBJR1JsWm1GMWJIUWdiM0IwYVc5dWMxeHVJQ0JwWmlBb2FYTlZibVJsWm1sdVpXUW9ZM1I0TG5Ob2IzZElhV1JrWlc0cEtTQmpkSGd1YzJodmQwaHBaR1JsYmlBOUlHWmhiSE5sTzF4dUlDQnBaaUFvYVhOVmJtUmxabWx1WldRb1kzUjRMbVJsY0hSb0tTa2dZM1I0TG1SbGNIUm9JRDBnTWp0Y2JpQWdhV1lnS0dselZXNWtaV1pwYm1Wa0tHTjBlQzVqYjJ4dmNuTXBLU0JqZEhndVkyOXNiM0p6SUQwZ1ptRnNjMlU3WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNoamRIZ3VZM1Z6ZEc5dFNXNXpjR1ZqZENrcElHTjBlQzVqZFhOMGIyMUpibk53WldOMElEMGdkSEoxWlR0Y2JpQWdhV1lnS0dOMGVDNWpiMnh2Y25NcElHTjBlQzV6ZEhsc2FYcGxJRDBnYzNSNWJHbDZaVmRwZEdoRGIyeHZjanRjYmlBZ2NtVjBkWEp1SUdadmNtMWhkRlpoYkhWbEtHTjBlQ3dnYjJKcUxDQmpkSGd1WkdWd2RHZ3BPMXh1ZlZ4dVpYaHdiM0owY3k1cGJuTndaV04wSUQwZ2FXNXpjR1ZqZER0Y2JseHVYRzR2THlCb2RIUndPaTh2Wlc0dWQybHJhWEJsWkdsaExtOXlaeTkzYVd0cEwwRk9VMGxmWlhOallYQmxYMk52WkdValozSmhjR2hwWTNOY2JtbHVjM0JsWTNRdVkyOXNiM0p6SUQwZ2UxeHVJQ0FuWW05c1pDY2dPaUJiTVN3Z01qSmRMRnh1SUNBbmFYUmhiR2xqSnlBNklGc3pMQ0F5TTEwc1hHNGdJQ2QxYm1SbGNteHBibVVuSURvZ1d6UXNJREkwWFN4Y2JpQWdKMmx1ZG1WeWMyVW5JRG9nV3pjc0lESTNYU3hjYmlBZ0ozZG9hWFJsSnlBNklGc3pOeXdnTXpsZExGeHVJQ0FuWjNKbGVTY2dPaUJiT1RBc0lETTVYU3hjYmlBZ0oySnNZV05ySnlBNklGc3pNQ3dnTXpsZExGeHVJQ0FuWW14MVpTY2dPaUJiTXpRc0lETTVYU3hjYmlBZ0oyTjVZVzRuSURvZ1d6TTJMQ0F6T1Ywc1hHNGdJQ2RuY21WbGJpY2dPaUJiTXpJc0lETTVYU3hjYmlBZ0oyMWhaMlZ1ZEdFbklEb2dXek0xTENBek9WMHNYRzRnSUNkeVpXUW5JRG9nV3pNeExDQXpPVjBzWEc0Z0lDZDVaV3hzYjNjbklEb2dXek16TENBek9WMWNibjA3WEc1Y2JpOHZJRVJ2YmlkMElIVnpaU0FuWW14MVpTY2dibTkwSUhacGMybGliR1VnYjI0Z1kyMWtMbVY0WlZ4dWFXNXpjR1ZqZEM1emRIbHNaWE1nUFNCN1hHNGdJQ2R6Y0dWamFXRnNKem9nSjJONVlXNG5MRnh1SUNBbmJuVnRZbVZ5SnpvZ0ozbGxiR3h2ZHljc1hHNGdJQ2RpYjI5c1pXRnVKem9nSjNsbGJHeHZkeWNzWEc0Z0lDZDFibVJsWm1sdVpXUW5PaUFuWjNKbGVTY3NYRzRnSUNkdWRXeHNKem9nSjJKdmJHUW5MRnh1SUNBbmMzUnlhVzVuSnpvZ0oyZHlaV1Z1Snl4Y2JpQWdKMlJoZEdVbk9pQW5iV0ZuWlc1MFlTY3NYRzRnSUM4dklGd2libUZ0WlZ3aU9pQnBiblJsYm5ScGIyNWhiR3g1SUc1dmRDQnpkSGxzYVc1blhHNGdJQ2R5WldkbGVIQW5PaUFuY21Wa0oxeHVmVHRjYmx4dVhHNW1kVzVqZEdsdmJpQnpkSGxzYVhwbFYybDBhRU52Ykc5eUtITjBjaXdnYzNSNWJHVlVlWEJsS1NCN1hHNGdJSFpoY2lCemRIbHNaU0E5SUdsdWMzQmxZM1F1YzNSNWJHVnpXM04wZVd4bFZIbHdaVjA3WEc1Y2JpQWdhV1lnS0hOMGVXeGxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDZGNYSFV3TURGaVd5Y2dLeUJwYm5Od1pXTjBMbU52Ykc5eWMxdHpkSGxzWlYxYk1GMGdLeUFuYlNjZ0t5QnpkSElnSzF4dUlDQWdJQ0FnSUNBZ0lDQW5YRngxTURBeFlsc25JQ3NnYVc1emNHVmpkQzVqYjJ4dmNuTmJjM1I1YkdWZFd6RmRJQ3NnSjIwbk8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCemRISTdYRzRnSUgxY2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCemRIbHNhWHBsVG05RGIyeHZjaWh6ZEhJc0lITjBlV3hsVkhsd1pTa2dlMXh1SUNCeVpYUjFjbTRnYzNSeU8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHRnljbUY1Vkc5SVlYTm9LR0Z5Y21GNUtTQjdYRzRnSUhaaGNpQm9ZWE5vSUQwZ2UzMDdYRzVjYmlBZ1lYSnlZWGt1Wm05eVJXRmphQ2htZFc1amRHbHZiaWgyWVd3c0lHbGtlQ2tnZTF4dUlDQWdJR2hoYzJoYmRtRnNYU0E5SUhSeWRXVTdYRzRnSUgwcE8xeHVYRzRnSUhKbGRIVnliaUJvWVhOb08xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEZaaGJIVmxLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5a2dlMXh1SUNBdkx5QlFjbTkyYVdSbElHRWdhRzl2YXlCbWIzSWdkWE5sY2kxemNHVmphV1pwWldRZ2FXNXpjR1ZqZENCbWRXNWpkR2x2Ym5NdVhHNGdJQzh2SUVOb1pXTnJJSFJvWVhRZ2RtRnNkV1VnYVhNZ1lXNGdiMkpxWldOMElIZHBkR2dnWVc0Z2FXNXpjR1ZqZENCbWRXNWpkR2x2YmlCdmJpQnBkRnh1SUNCcFppQW9ZM1I0TG1OMWMzUnZiVWx1YzNCbFkzUWdKaVpjYmlBZ0lDQWdJSFpoYkhWbElDWW1YRzRnSUNBZ0lDQnBjMFoxYm1OMGFXOXVLSFpoYkhWbExtbHVjM0JsWTNRcElDWW1YRzRnSUNBZ0lDQXZMeUJHYVd4MFpYSWdiM1YwSUhSb1pTQjFkR2xzSUcxdlpIVnNaU3dnYVhRbmN5QnBibk53WldOMElHWjFibU4wYVc5dUlHbHpJSE53WldOcFlXeGNiaUFnSUNBZ0lIWmhiSFZsTG1sdWMzQmxZM1FnSVQwOUlHVjRjRzl5ZEhNdWFXNXpjR1ZqZENBbUpseHVJQ0FnSUNBZ0x5OGdRV3h6YnlCbWFXeDBaWElnYjNWMElHRnVlU0J3Y205MGIzUjVjR1VnYjJKcVpXTjBjeUIxYzJsdVp5QjBhR1VnWTJseVkzVnNZWElnWTJobFkyc3VYRzRnSUNBZ0lDQWhLSFpoYkhWbExtTnZibk4wY25WamRHOXlJQ1ltSUhaaGJIVmxMbU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlNBOVBUMGdkbUZzZFdVcEtTQjdYRzRnSUNBZ2RtRnlJSEpsZENBOUlIWmhiSFZsTG1sdWMzQmxZM1FvY21WamRYSnpaVlJwYldWekxDQmpkSGdwTzF4dUlDQWdJR2xtSUNnaGFYTlRkSEpwYm1jb2NtVjBLU2tnZTF4dUlDQWdJQ0FnY21WMElEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQnlaWFFzSUhKbFkzVnljMlZVYVcxbGN5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDFjYmx4dUlDQXZMeUJRY21sdGFYUnBkbVVnZEhsd1pYTWdZMkZ1Ym05MElHaGhkbVVnY0hKdmNHVnlkR2xsYzF4dUlDQjJZWElnY0hKcGJXbDBhWFpsSUQwZ1ptOXliV0YwVUhKcGJXbDBhWFpsS0dOMGVDd2dkbUZzZFdVcE8xeHVJQ0JwWmlBb2NISnBiV2wwYVhabEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCeWFXMXBkR2wyWlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRXh2YjJzZ2RYQWdkR2hsSUd0bGVYTWdiMllnZEdobElHOWlhbVZqZEM1Y2JpQWdkbUZ5SUd0bGVYTWdQU0JQWW1wbFkzUXVhMlY1Y3loMllXeDFaU2s3WEc0Z0lIWmhjaUIyYVhOcFlteGxTMlY1Y3lBOUlHRnljbUY1Vkc5SVlYTm9LR3RsZVhNcE8xeHVYRzRnSUdsbUlDaGpkSGd1YzJodmQwaHBaR1JsYmlrZ2UxeHVJQ0FnSUd0bGVYTWdQU0JQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsT1lXMWxjeWgyWVd4MVpTazdYRzRnSUgxY2JseHVJQ0F2THlCSlJTQmtiMlZ6YmlkMElHMWhhMlVnWlhKeWIzSWdabWxsYkdSeklHNXZiaTFsYm5WdFpYSmhZbXhsWEc0Z0lDOHZJR2gwZEhBNkx5OXRjMlJ1TG0xcFkzSnZjMjltZEM1amIyMHZaVzR0ZFhNdmJHbGljbUZ5ZVM5cFpTOWtkM2MxTW5OaWRDaDJQWFp6TGprMEtTNWhjM0I0WEc0Z0lHbG1JQ2hwYzBWeWNtOXlLSFpoYkhWbEtWeHVJQ0FnSUNBZ0ppWWdLR3RsZVhNdWFXNWtaWGhQWmlnbmJXVnpjMkZuWlNjcElENDlJREFnZkh3Z2EyVjVjeTVwYm1SbGVFOW1LQ2RrWlhOamNtbHdkR2x2YmljcElENDlJREFwS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p2Y20xaGRFVnljbTl5S0haaGJIVmxLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTnZiV1VnZEhsd1pTQnZaaUJ2WW1wbFkzUWdkMmwwYUc5MWRDQndjbTl3WlhKMGFXVnpJR05oYmlCaVpTQnphRzl5ZEdOMWRIUmxaQzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCMllYSWdibUZ0WlNBOUlIWmhiSFZsTG01aGJXVWdQeUFuT2lBbklDc2dkbUZzZFdVdWJtRnRaU0E2SUNjbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtDZGJSblZ1WTNScGIyNG5JQ3NnYm1GdFpTQXJJQ2RkSnl3Z0ozTndaV05wWVd3bktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpVbVZuUlhod0tIWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtGSmxaMFY0Y0M1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jdVkyRnNiQ2gyWVd4MVpTa3NJQ2R5WldkbGVIQW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2x6UkdGMFpTaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTaEVZWFJsTG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1Wnk1allXeHNLSFpoYkhWbEtTd2dKMlJoZEdVbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpSWEp5YjNJb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhaaGNpQmlZWE5sSUQwZ0p5Y3NJR0Z5Y21GNUlEMGdabUZzYzJVc0lHSnlZV05sY3lBOUlGc25leWNzSUNkOUoxMDdYRzVjYmlBZ0x5OGdUV0ZyWlNCQmNuSmhlU0J6WVhrZ2RHaGhkQ0IwYUdWNUlHRnlaU0JCY25KaGVWeHVJQ0JwWmlBb2FYTkJjbkpoZVNoMllXeDFaU2twSUh0Y2JpQWdJQ0JoY25KaGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnWW5KaFkyVnpJRDBnV3lkYkp5d2dKMTBuWFR0Y2JpQWdmVnh1WEc0Z0lDOHZJRTFoYTJVZ1puVnVZM1JwYjI1eklITmhlU0IwYUdGMElIUm9aWGtnWVhKbElHWjFibU4wYVc5dWMxeHVJQ0JwWmlBb2FYTkdkVzVqZEdsdmJpaDJZV3gxWlNrcElIdGNiaUFnSUNCMllYSWdiaUE5SUhaaGJIVmxMbTVoYldVZ1B5QW5PaUFuSUNzZ2RtRnNkV1V1Ym1GdFpTQTZJQ2NuTzF4dUlDQWdJR0poYzJVZ1BTQW5JRnRHZFc1amRHbHZiaWNnS3lCdUlDc2dKMTBuTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCU1pXZEZlSEJ6SUhOaGVTQjBhR0YwSUhSb1pYa2dZWEpsSUZKbFowVjRjSE5jYmlBZ2FXWWdLR2x6VW1WblJYaHdLSFpoYkhWbEtTa2dlMXh1SUNBZ0lHSmhjMlVnUFNBbklDY2dLeUJTWldkRmVIQXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCa1lYUmxjeUIzYVhSb0lIQnliM0JsY25ScFpYTWdabWx5YzNRZ2MyRjVJSFJvWlNCa1lYUmxYRzRnSUdsbUlDaHBjMFJoZEdVb2RtRnNkV1VwS1NCN1hHNGdJQ0FnWW1GelpTQTlJQ2NnSnlBcklFUmhkR1V1Y0hKdmRHOTBlWEJsTG5SdlZWUkRVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBPMXh1SUNCOVhHNWNiaUFnTHk4Z1RXRnJaU0JsY25KdmNpQjNhWFJvSUcxbGMzTmhaMlVnWm1seWMzUWdjMkY1SUhSb1pTQmxjbkp2Y2x4dUlDQnBaaUFvYVhORmNuSnZjaWgyWVd4MVpTa3BJSHRjYmlBZ0lDQmlZWE5sSUQwZ0p5QW5JQ3NnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdJQ1ltSUNnaFlYSnlZWGtnZkh3Z2RtRnNkV1V1YkdWdVozUm9JRDA5SURBcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdKeVlXTmxjMXN3WFNBcklHSmhjMlVnS3lCaWNtRmpaWE5iTVYwN1hHNGdJSDFjYmx4dUlDQnBaaUFvY21WamRYSnpaVlJwYldWeklEd2dNQ2tnZTF4dUlDQWdJR2xtSUNocGMxSmxaMFY0Y0NoMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNoU1pXZEZlSEF1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29kbUZzZFdVcExDQW5jbVZuWlhod0p5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNnblcwOWlhbVZqZEYwbkxDQW5jM0JsWTJsaGJDY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR04wZUM1elpXVnVMbkIxYzJnb2RtRnNkV1VwTzF4dVhHNGdJSFpoY2lCdmRYUndkWFE3WEc0Z0lHbG1JQ2hoY25KaGVTa2dlMXh1SUNBZ0lHOTFkSEIxZENBOUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzkxZEhCMWRDQTlJR3RsZVhNdWJXRndLR1oxYm1OMGFXOXVLR3RsZVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdadmNtMWhkRkJ5YjNCbGNuUjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVTd2dZWEp5WVhrcE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdZM1I0TG5ObFpXNHVjRzl3S0NrN1hHNWNiaUFnY21WMGRYSnVJSEpsWkhWalpWUnZVMmx1WjJ4bFUzUnlhVzVuS0c5MWRIQjFkQ3dnWW1GelpTd2dZbkpoWTJWektUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSUWNtbHRhWFJwZG1Vb1kzUjRMQ0IyWVd4MVpTa2dlMXh1SUNCcFppQW9hWE5WYm1SbFptbHVaV1FvZG1Gc2RXVXBLVnh1SUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTZ25kVzVrWldacGJtVmtKeXdnSjNWdVpHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb2FYTlRkSEpwYm1jb2RtRnNkV1VwS1NCN1hHNGdJQ0FnZG1GeUlITnBiWEJzWlNBOUlDZGNYQ2NuSUNzZ1NsTlBUaTV6ZEhKcGJtZHBabmtvZG1Gc2RXVXBMbkpsY0d4aFkyVW9MMTVjSW54Y0lpUXZaeXdnSnljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZYRnhjWEZ3aUwyY3NJQ2RjSWljcElDc2dKMXhjSnljN1hHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0hOcGJYQnNaU3dnSjNOMGNtbHVaeWNwTzF4dUlDQjlYRzRnSUdsbUlDaHBjMDUxYldKbGNpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZHVkVzFpWlhJbktUdGNiaUFnYVdZZ0tHbHpRbTl2YkdWaGJpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZGliMjlzWldGdUp5azdYRzRnSUM4dklFWnZjaUJ6YjIxbElISmxZWE52YmlCMGVYQmxiMllnYm5Wc2JDQnBjeUJjSW05aWFtVmpkRndpTENCemJ5QnpjR1ZqYVdGc0lHTmhjMlVnYUdWeVpTNWNiaUFnYVdZZ0tHbHpUblZzYkNoMllXeDFaU2twWEc0Z0lDQWdjbVYwZFhKdUlHTjBlQzV6ZEhsc2FYcGxLQ2R1ZFd4c0p5d2dKMjUxYkd3bktUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSRmNuSnZjaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnSjFzbklDc2dSWEp5YjNJdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBJQ3NnSjEwbk8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBJSHRjYmlBZ2RtRnlJRzkxZEhCMWRDQTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnTUN3Z2JDQTlJSFpoYkhWbExteGxibWQwYURzZ2FTQThJR3c3SUNzcmFTa2dlMXh1SUNBZ0lHbG1JQ2hvWVhOUGQyNVFjbTl3WlhKMGVTaDJZV3gxWlN3Z1UzUnlhVzVuS0drcEtTa2dlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvWm05eWJXRjBVSEp2Y0dWeWRIa29ZM1I0TENCMllXeDFaU3dnY21WamRYSnpaVlJwYldWekxDQjJhWE5wWW14bFMyVjVjeXhjYmlBZ0lDQWdJQ0FnSUNCVGRISnBibWNvYVNrc0lIUnlkV1VwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvSnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCclpYbHpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9hMlY1S1NCN1hHNGdJQ0FnYVdZZ0tDRnJaWGt1YldGMFkyZ29MMTVjWEdRckpDOHBLU0I3WEc0Z0lDQWdJQ0J2ZFhSd2RYUXVjSFZ6YUNobWIzSnRZWFJRY205d1pYSjBlU2hqZEhnc0lIWmhiSFZsTENCeVpXTjFjbk5sVkdsdFpYTXNJSFpwYzJsaWJHVkxaWGx6TEZ4dUlDQWdJQ0FnSUNBZ0lHdGxlU3dnZEhKMVpTa3BPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNGdJSEpsZEhWeWJpQnZkWFJ3ZFhRN1hHNTlYRzVjYmx4dVpuVnVZM1JwYjI0Z1ptOXliV0YwVUhKdmNHVnlkSGtvWTNSNExDQjJZV3gxWlN3Z2NtVmpkWEp6WlZScGJXVnpMQ0IyYVhOcFlteGxTMlY1Y3l3Z2EyVjVMQ0JoY25KaGVTa2dlMXh1SUNCMllYSWdibUZ0WlN3Z2MzUnlMQ0JrWlhOak8xeHVJQ0JrWlhOaklEMGdUMkpxWldOMExtZGxkRTkzYmxCeWIzQmxjblI1UkdWelkzSnBjSFJ2Y2loMllXeDFaU3dnYTJWNUtTQjhmQ0I3SUhaaGJIVmxPaUIyWVd4MVpWdHJaWGxkSUgwN1hHNGdJR2xtSUNoa1pYTmpMbWRsZENrZ2UxeHVJQ0FnSUdsbUlDaGtaWE5qTG5ObGRDa2dlMXh1SUNBZ0lDQWdjM1J5SUQwZ1kzUjRMbk4wZVd4cGVtVW9KMXRIWlhSMFpYSXZVMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lITjBjaUE5SUdOMGVDNXpkSGxzYVhwbEtDZGJSMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2xtSUNoa1pYTmpMbk5sZENrZ2UxeHVJQ0FnSUNBZ2MzUnlJRDBnWTNSNExuTjBlV3hwZW1Vb0oxdFRaWFIwWlhKZEp5d2dKM053WldOcFlXd25LVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdhV1lnS0NGb1lYTlBkMjVRY205d1pYSjBlU2gyYVhOcFlteGxTMlY1Y3l3Z2EyVjVLU2tnZTF4dUlDQWdJRzVoYldVZ1BTQW5XeWNnS3lCclpYa2dLeUFuWFNjN1hHNGdJSDFjYmlBZ2FXWWdLQ0Z6ZEhJcElIdGNiaUFnSUNCcFppQW9ZM1I0TG5ObFpXNHVhVzVrWlhoUFppaGtaWE5qTG5aaGJIVmxLU0E4SURBcElIdGNiaUFnSUNBZ0lHbG1JQ2hwYzA1MWJHd29jbVZqZFhKelpWUnBiV1Z6S1NrZ2UxeHVJQ0FnSUNBZ0lDQnpkSElnUFNCbWIzSnRZWFJXWVd4MVpTaGpkSGdzSUdSbGMyTXVkbUZzZFdVc0lHNTFiR3dwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYzNSeUlEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQmtaWE5qTG5aaGJIVmxMQ0J5WldOMWNuTmxWR2x0WlhNZ0xTQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoemRISXVhVzVrWlhoUFppZ25YRnh1SnlrZ1BpQXRNU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZWEp5WVhrcElIdGNiaUFnSUNBZ0lDQWdJQ0J6ZEhJZ1BTQnpkSEl1YzNCc2FYUW9KMXhjYmljcExtMWhjQ2htZFc1amRHbHZiaWhzYVc1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlBZ0p5QXJJR3hwYm1VN1hHNGdJQ0FnSUNBZ0lDQWdmU2t1YW05cGJpZ25YRnh1SnlrdWMzVmljM1J5S0RJcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4wY2lBOUlDZGNYRzRuSUNzZ2MzUnlMbk53YkdsMEtDZGNYRzRuS1M1dFlYQW9ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NnSUNBbklDc2diR2x1WlR0Y2JpQWdJQ0FnSUNBZ0lDQjlLUzVxYjJsdUtDZGNYRzRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J6ZEhJZ1BTQmpkSGd1YzNSNWJHbDZaU2duVzBOcGNtTjFiR0Z5WFNjc0lDZHpjR1ZqYVdGc0p5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNodVlXMWxLU2tnZTF4dUlDQWdJR2xtSUNoaGNuSmhlU0FtSmlCclpYa3ViV0YwWTJnb0wxNWNYR1FySkM4cEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MzUnlPMXh1SUNBZ0lIMWNiaUFnSUNCdVlXMWxJRDBnU2xOUFRpNXpkSEpwYm1kcFpua29KeWNnS3lCclpYa3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbExtMWhkR05vS0M5ZVhDSW9XMkV0ZWtFdFdsOWRXMkV0ZWtFdFdsOHdMVGxkS2lsY0lpUXZLU2tnZTF4dUlDQWdJQ0FnYm1GdFpTQTlJRzVoYldVdWMzVmljM1J5S0RFc0lHNWhiV1V1YkdWdVozUm9JQzBnTWlrN1hHNGdJQ0FnSUNCdVlXMWxJRDBnWTNSNExuTjBlV3hwZW1Vb2JtRnRaU3dnSjI1aGJXVW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JtRnRaU0E5SUc1aGJXVXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXlaWEJzWVdObEtDOWNYRnhjWENJdlp5d2dKMXdpSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0x5aGVYQ0o4WENJa0tTOW5MQ0JjSWlkY0lpazdYRzRnSUNBZ0lDQnVZVzFsSUQwZ1kzUjRMbk4wZVd4cGVtVW9ibUZ0WlN3Z0ozTjBjbWx1WnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCdVlXMWxJQ3NnSnpvZ0p5QXJJSE4wY2p0Y2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCeVpXUjFZMlZVYjFOcGJtZHNaVk4wY21sdVp5aHZkWFJ3ZFhRc0lHSmhjMlVzSUdKeVlXTmxjeWtnZTF4dUlDQjJZWElnYm5WdFRHbHVaWE5GYzNRZ1BTQXdPMXh1SUNCMllYSWdiR1Z1WjNSb0lEMGdiM1YwY0hWMExuSmxaSFZqWlNobWRXNWpkR2x2Ymlod2NtVjJMQ0JqZFhJcElIdGNiaUFnSUNCdWRXMU1hVzVsYzBWemRDc3JPMXh1SUNBZ0lHbG1JQ2hqZFhJdWFXNWtaWGhQWmlnblhGeHVKeWtnUGowZ01Da2diblZ0VEdsdVpYTkZjM1FyS3p0Y2JpQWdJQ0J5WlhSMWNtNGdjSEpsZGlBcklHTjFjaTV5WlhCc1lXTmxLQzljWEhVd01ERmlYRnhiWEZ4a1hGeGtQMjB2Wnl3Z0p5Y3BMbXhsYm1kMGFDQXJJREU3WEc0Z0lIMHNJREFwTzF4dVhHNGdJR2xtSUNoc1pXNW5kR2dnUGlBMk1Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCaWNtRmpaWE5iTUYwZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FvWW1GelpTQTlQVDBnSnljZ1B5QW5KeUE2SUdKaGMyVWdLeUFuWEZ4dUlDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwTG1wdmFXNG9KeXhjWEc0Z0lDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ1luSmhZMlZ6V3pGZE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHSnlZV05sYzFzd1hTQXJJR0poYzJVZ0t5QW5JQ2NnS3lCdmRYUndkWFF1YW05cGJpZ25MQ0FuS1NBcklDY2dKeUFySUdKeVlXTmxjMXN4WFR0Y2JuMWNibHh1WEc0dkx5Qk9UMVJGT2lCVWFHVnpaU0IwZVhCbElHTm9aV05yYVc1bklHWjFibU4wYVc5dWN5QnBiblJsYm5ScGIyNWhiR3g1SUdSdmJpZDBJSFZ6WlNCZ2FXNXpkR0Z1WTJWdlptQmNiaTh2SUdKbFkyRjFjMlVnYVhRZ2FYTWdabkpoWjJsc1pTQmhibVFnWTJGdUlHSmxJR1ZoYzJsc2VTQm1ZV3RsWkNCM2FYUm9JR0JQWW1wbFkzUXVZM0psWVhSbEtDbGdMbHh1Wm5WdVkzUnBiMjRnYVhOQmNuSmhlU2hoY2lrZ2UxeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdWFYTkJjbkpoZVNoaGNpazdYRzU5WEc1bGVIQnZjblJ6TG1selFYSnlZWGtnUFNCcGMwRnljbUY1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMEp2YjJ4bFlXNG9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBblltOXZiR1ZoYmljN1hHNTlYRzVsZUhCdmNuUnpMbWx6UW05dmJHVmhiaUE5SUdselFtOXZiR1ZoYmp0Y2JseHVablZ1WTNScGIyNGdhWE5PZFd4c0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5UFNCdWRXeHNPMXh1ZlZ4dVpYaHdiM0owY3k1cGMwNTFiR3dnUFNCcGMwNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHbHpUblZzYkU5eVZXNWtaV1pwYm1Wa0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5SUc1MWJHdzdYRzU5WEc1bGVIQnZjblJ6TG1selRuVnNiRTl5Vlc1a1pXWnBibVZrSUQwZ2FYTk9kV3hzVDNKVmJtUmxabWx1WldRN1hHNWNibVoxYm1OMGFXOXVJR2x6VG5WdFltVnlLR0Z5WnlrZ2UxeHVJQ0J5WlhSMWNtNGdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oyNTFiV0psY2ljN1hHNTlYRzVsZUhCdmNuUnpMbWx6VG5WdFltVnlJRDBnYVhOT2RXMWlaWEk3WEc1Y2JtWjFibU4wYVc5dUlHbHpVM1J5YVc1bktHRnlaeWtnZTF4dUlDQnlaWFIxY200Z2RIbHdaVzltSUdGeVp5QTlQVDBnSjNOMGNtbHVaeWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpVM1J5YVc1bklEMGdhWE5UZEhKcGJtYzdYRzVjYm1aMWJtTjBhVzl1SUdselUzbHRZbTlzS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM041YldKdmJDYzdYRzU5WEc1bGVIQnZjblJ6TG1selUzbHRZbTlzSUQwZ2FYTlRlVzFpYjJ3N1hHNWNibVoxYm1OMGFXOXVJR2x6Vlc1a1pXWnBibVZrS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnWVhKbklEMDlQU0IyYjJsa0lEQTdYRzU5WEc1bGVIQnZjblJ6TG1selZXNWtaV1pwYm1Wa0lEMGdhWE5WYm1SbFptbHVaV1E3WEc1Y2JtWjFibU4wYVc5dUlHbHpVbVZuUlhod0tISmxLU0I3WEc0Z0lISmxkSFZ5YmlCcGMwOWlhbVZqZENoeVpTa2dKaVlnYjJKcVpXTjBWRzlUZEhKcGJtY29jbVVwSUQwOVBTQW5XMjlpYW1WamRDQlNaV2RGZUhCZEp6dGNibjFjYm1WNGNHOXlkSE11YVhOU1pXZEZlSEFnUFNCcGMxSmxaMFY0Y0R0Y2JseHVablZ1WTNScGIyNGdhWE5QWW1wbFkzUW9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBbmIySnFaV04wSnlBbUppQmhjbWNnSVQwOUlHNTFiR3c3WEc1OVhHNWxlSEJ2Y25SekxtbHpUMkpxWldOMElEMGdhWE5QWW1wbFkzUTdYRzVjYm1aMWJtTjBhVzl1SUdselJHRjBaU2hrS1NCN1hHNGdJSEpsZEhWeWJpQnBjMDlpYW1WamRDaGtLU0FtSmlCdlltcGxZM1JVYjFOMGNtbHVaeWhrS1NBOVBUMGdKMXR2WW1wbFkzUWdSR0YwWlYwbk8xeHVmVnh1Wlhod2IzSjBjeTVwYzBSaGRHVWdQU0JwYzBSaGRHVTdYRzVjYm1aMWJtTjBhVzl1SUdselJYSnliM0lvWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhWE5QWW1wbFkzUW9aU2tnSmlaY2JpQWdJQ0FnSUNodlltcGxZM1JVYjFOMGNtbHVaeWhsS1NBOVBUMGdKMXR2WW1wbFkzUWdSWEp5YjNKZEp5QjhmQ0JsSUdsdWMzUmhibU5sYjJZZ1JYSnliM0lwTzF4dWZWeHVaWGh3YjNKMGN5NXBjMFZ5Y205eUlEMGdhWE5GY25KdmNqdGNibHh1Wm5WdVkzUnBiMjRnYVhOR2RXNWpkR2x2YmloaGNtY3BJSHRjYmlBZ2NtVjBkWEp1SUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2RtZFc1amRHbHZiaWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpSblZ1WTNScGIyNGdQU0JwYzBaMWJtTjBhVzl1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMUJ5YVcxcGRHbDJaU2hoY21jcElIdGNiaUFnY21WMGRYSnVJR0Z5WnlBOVBUMGdiblZzYkNCOGZGeHVJQ0FnSUNBZ0lDQWdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oySnZiMnhsWVc0bklIeDhYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5iblZ0WW1WeUp5QjhmRnh1SUNBZ0lDQWdJQ0FnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM04wY21sdVp5Y2dmSHhjYmlBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2R6ZVcxaWIyd25JSHg4SUNBdkx5QkZVellnYzNsdFltOXNYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5kVzVrWldacGJtVmtKenRjYm4xY2JtVjRjRzl5ZEhNdWFYTlFjbWx0YVhScGRtVWdQU0JwYzFCeWFXMXBkR2wyWlR0Y2JseHVaWGh3YjNKMGN5NXBjMEoxWm1abGNpQTlJSEpsY1hWcGNtVW9KeTR2YzNWd2NHOXlkQzlwYzBKMVptWmxjaWNwTzF4dVhHNW1kVzVqZEdsdmJpQnZZbXBsWTNSVWIxTjBjbWx1WnlodktTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2J5azdYRzU5WEc1Y2JseHVablZ1WTNScGIyNGdjR0ZrS0c0cElIdGNiaUFnY21WMGRYSnVJRzRnUENBeE1DQS9JQ2N3SnlBcklHNHVkRzlUZEhKcGJtY29NVEFwSURvZ2JpNTBiMU4wY21sdVp5Z3hNQ2s3WEc1OVhHNWNibHh1ZG1GeUlHMXZiblJvY3lBOUlGc25TbUZ1Snl3Z0owWmxZaWNzSUNkTllYSW5MQ0FuUVhCeUp5d2dKMDFoZVNjc0lDZEtkVzRuTENBblNuVnNKeXdnSjBGMVp5Y3NJQ2RUWlhBbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBblQyTjBKeXdnSjA1dmRpY3NJQ2RFWldNblhUdGNibHh1THk4Z01qWWdSbVZpSURFMk9qRTVPak0wWEc1bWRXNWpkR2x2YmlCMGFXMWxjM1JoYlhBb0tTQjdYRzRnSUhaaGNpQmtJRDBnYm1WM0lFUmhkR1VvS1R0Y2JpQWdkbUZ5SUhScGJXVWdQU0JiY0dGa0tHUXVaMlYwU0c5MWNuTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRTFwYm5WMFpYTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRk5sWTI5dVpITW9LU2xkTG1wdmFXNG9Kem9uS1R0Y2JpQWdjbVYwZFhKdUlGdGtMbWRsZEVSaGRHVW9LU3dnYlc5dWRHaHpXMlF1WjJWMFRXOXVkR2dvS1Ywc0lIUnBiV1ZkTG1wdmFXNG9KeUFuS1R0Y2JuMWNibHh1WEc0dkx5QnNiMmNnYVhNZ2FuVnpkQ0JoSUhSb2FXNGdkM0poY0hCbGNpQjBieUJqYjI1emIyeGxMbXh2WnlCMGFHRjBJSEJ5WlhCbGJtUnpJR0VnZEdsdFpYTjBZVzF3WEc1bGVIQnZjblJ6TG14dlp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQmpiMjV6YjJ4bExteHZaeWduSlhNZ0xTQWxjeWNzSUhScGJXVnpkR0Z0Y0NncExDQmxlSEJ2Y25SekxtWnZjbTFoZEM1aGNIQnNlU2hsZUhCdmNuUnpMQ0JoY21kMWJXVnVkSE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCSmJtaGxjbWwwSUhSb1pTQndjbTkwYjNSNWNHVWdiV1YwYUc5a2N5Qm1jbTl0SUc5dVpTQmpiMjV6ZEhKMVkzUnZjaUJwYm5SdklHRnViM1JvWlhJdVhHNGdLbHh1SUNvZ1ZHaGxJRVoxYm1OMGFXOXVMbkJ5YjNSdmRIbHdaUzVwYm1obGNtbDBjeUJtY205dElHeGhibWN1YW5NZ2NtVjNjbWwwZEdWdUlHRnpJR0VnYzNSaGJtUmhiRzl1WlZ4dUlDb2dablZ1WTNScGIyNGdLRzV2ZENCdmJpQkdkVzVqZEdsdmJpNXdjbTkwYjNSNWNHVXBMaUJPVDFSRk9pQkpaaUIwYUdseklHWnBiR1VnYVhNZ2RHOGdZbVVnYkc5aFpHVmtYRzRnS2lCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QjBhR2x6SUdaMWJtTjBhVzl1SUc1bFpXUnpJSFJ2SUdKbElISmxkM0pwZEhSbGJpQjFjMmx1WnlCemIyMWxJRzVoZEdsMlpWeHVJQ29nWm5WdVkzUnBiMjV6SUdGeklIQnliM1J2ZEhsd1pTQnpaWFIxY0NCMWMybHVaeUJ1YjNKdFlXd2dTbUYyWVZOamNtbHdkQ0JrYjJWeklHNXZkQ0IzYjNKcklHRnpYRzRnS2lCbGVIQmxZM1JsWkNCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QW9jMlZsSUcxcGNuSnZjaTVxY3lCcGJpQnlNVEUwT1RBektTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIZG9hV05vSUc1bFpXUnpJSFJ2SUdsdWFHVnlhWFFnZEdobFhHNGdLaUFnSUNBZ2NISnZkRzkwZVhCbExseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYzNWd1pYSkRkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIUnZJR2x1YUdWeWFYUWdjSEp2ZEc5MGVYQmxJR1p5YjIwdVhHNGdLaTljYm1WNGNHOXlkSE11YVc1b1pYSnBkSE1nUFNCeVpYRjFhWEpsS0NkcGJtaGxjbWwwY3ljcE8xeHVYRzVsZUhCdmNuUnpMbDlsZUhSbGJtUWdQU0JtZFc1amRHbHZiaWh2Y21sbmFXNHNJR0ZrWkNrZ2UxeHVJQ0F2THlCRWIyNG5kQ0JrYnlCaGJubDBhR2x1WnlCcFppQmhaR1FnYVhOdUozUWdZVzRnYjJKcVpXTjBYRzRnSUdsbUlDZ2hZV1JrSUh4OElDRnBjMDlpYW1WamRDaGhaR1FwS1NCeVpYUjFjbTRnYjNKcFoybHVPMXh1WEc0Z0lIWmhjaUJyWlhseklEMGdUMkpxWldOMExtdGxlWE1vWVdSa0tUdGNiaUFnZG1GeUlHa2dQU0JyWlhsekxteGxibWQwYUR0Y2JpQWdkMmhwYkdVZ0tHa3RMU2tnZTF4dUlDQWdJRzl5YVdkcGJsdHJaWGx6VzJsZFhTQTlJR0ZrWkZ0clpYbHpXMmxkWFR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjNKcFoybHVPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdhR0Z6VDNkdVVISnZjR1Z5ZEhrb2IySnFMQ0J3Y205d0tTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYjJKcUxDQndjbTl3S1R0Y2JuMWNiaUpkZlE9PSIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0eXBlZCxcbiAgICAgICAgdXRpbGl0eSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAganNkb2MsXG4gICAgICAgIGVzdXRpbHMsXG4gICAgICAgIGhhc093blByb3BlcnR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuICAgIHR5cGVkID0gcmVxdWlyZSgnLi90eXBlZCcpO1xuICAgIHV0aWxpdHkgPSByZXF1aXJlKCcuL3V0aWxpdHknKTtcblxuICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3QpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShpbmRleCwgbGFzdCk7XG4gICAgfVxuXG4gICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPj0gMHg2MSAgLyogJ2EnICovICYmIGNoIDw9IDB4N0EgIC8qICd6JyAqLykgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDQxICAvKiAnQScgKi8gJiYgY2ggPD0gMHg1QSAgLyogJ1onICovKSB8fFxuICAgICAgICAgICAgKGNoID49IDB4MzAgIC8qICcwJyAqLyAmJiBjaCA8PSAweDM5ICAvKiAnOScgKi8pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRsZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09ICdhcmd1bWVudCcgfHwgdGl0bGUgPT09ICdhcmcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8IHRpdGxlID09PSAncHJvcCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgaXNQcm9wZXJ0eSh0aXRsZSkgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJlcyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5lc3RlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwgaXNQYXJhbVRpdGxlKHRpdGxlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fFxuICAgICAgICAgICAgdGl0bGUgPT09ICdpbXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5cGVkZWYnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHkodGl0bGUpO1xuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNpbmcgJ2lzVHlwZVBhcmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBwaWNrIHdoZW4gYSB0eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkXG4gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8gJ3BhcnNlVHlwZSdcbiAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBlKHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUgPT09ICdtZW1iZXInIHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3MnIHx8IHRpdGxlID09PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxlID09PSAncHJvdGVjdGVkJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVud3JhcENvbW1lbnQoZG9jKSB7XG4gICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm1cbiAgICAgICAgLy8gICAvKipcbiAgICAgICAgLy8gICAgKiAuLi4uLi4uXG4gICAgICAgIC8vICAgICovXG4gICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqXG4gICAgICAgIHZhciBCRUZPUkVfU1RBUiA9IDAsXG4gICAgICAgICAgICBTVEFSID0gMSxcbiAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAyLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2g7XG5cbiAgICAgICAgZG9jID0gZG9jLnJlcGxhY2UoL15cXC9cXCpcXCo/LywgJycpLnJlcGxhY2UoL1xcKlxcLyQvLCAnJyk7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGVuID0gZG9jLmxlbmd0aDtcbiAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNoID0gZG9jLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEJFRk9SRV9TVEFSOlxuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEgIC8qICcqJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gU1RBUjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTVEFSOlxuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlID0gZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIEpTRG9jIFRhZyBQYXJzZXJcblxuICAgIChmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICAgICB2YXIgUnVsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICByZWNvdmVyYWJsZSxcbiAgICAgICAgICAgIHNsb3BweSxcbiAgICAgICAgICAgIHN0cmljdDtcblxuICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgICAgICAgICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkgJiYgIShjaCA9PT0gMHgwRCAgLyogJ1xccicgKi8gJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykpIHtcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzY2FuVGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAnJztcbiAgICAgICAgICAgIC8vIHdhc3RlICdAJ1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHtcbiAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4O1xuXG4gICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQobGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSAmJiAhKGNoID09PSAweDBEICAvKiAnXFxyJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChsYXN0ICsgMSkgPT09IDB4MEEgIC8qICdcXG4nICovKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3QgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZlIG5lc3QgYnJhY2UsIHN1Y2ggYXMsXG4gICAgICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfVxuICAgICAgICAvL1xuICAgICAgICAvLyB0aGVyZWZvcmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3aXRoIGJhbGFuY2luZyBicmFjZXMuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwgbGFzdCkge1xuICAgICAgICAgICAgdmFyIGNoLCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgLy8gc2VhcmNoICd7J1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHg3QiAgLyogJ3snICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVyblxuICAgICAgICAgICAgICAgICAgICBkaXJlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZFxuICAgICAgICAgICAgYnJhY2UgPSAxO1xuICAgICAgICAgICAgdHlwZSA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg3RCAgLyogJ30nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDdCICAvKiAneycgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBicmFjZXMgaXMgbm90IGJhbGFuY2VkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxpdHkudGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VQYXJhbVR5cGUodHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VUeXBlKHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIobGFzdCkge1xuICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7XG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxhc3QpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgKGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2Uoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSAnJywgdXNlQnJhY2tldHM7XG5cbiAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3QpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0cyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLykge1xuICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7XG5cbiAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0EgLyogJzonICovICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDVEICAvKiAnXScgKi8pe1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MkUgIC8qICcuJyAqLyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIzICAvKiAnIycgKi8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg3RSAgLyogJ34nICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxhc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXM/XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCAgLyogJz0nICovKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NUQgIC8qICddJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCAgfHwgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDVEICAvKiAnXScgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmV2ZXIgZm91bmQgYSBjbG9zaW5nICddJ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRoZSBsYXN0ICddJ1xuICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBUb1RhZygpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1dGlsaXR5LmFzc2VydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NDAgIC8qICdAJyAqLyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fdGFnID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmxpbmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IDA7XG4gICAgICAgICAgICAvLyBzcGFjZSB0byBzYXZlIHNwZWNpYWwgaW5mb3JtYXRpb24gZm9yIHRpdGxlIHBhcnNlcnMuXG4gICAgICAgICAgICB0aGlzLl9leHRyYSA9IHsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZEVycm9yKGVyciwgLi4uKVxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gYWRkRXJyb3IoZXJyb3JUZXh0KSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgbXNnID0gZXJyb3JUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8lKFxcZCkvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS5hc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IobXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMucHVzaChtc2cpO1xuICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXNcbiAgICAgICAgICAgIGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgdHlwZXNcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvL0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHtcbiAgICAgICAgICAgIHZhciBuYW1lO1xuICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBhdGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKHRydWUpO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXNzaWduLCBuYW1lO1xuXG4gICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFtZVxuICAgICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQgdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiB0aGlzLl90YWcudHlwZSAmJiB0aGlzLl90YWcudHlwZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHRyYS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3RhZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdbJyAmJiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30gW3NvbWVib2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBhc3NpZ25bMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb3B0aW9uYWwgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBlICYmIHRoaXMuX3RhZy50eXBlLnR5cGUgIT09ICdPcHRpb25hbFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb25hbFR5cGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl90YWcudHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICgoL14tXFxzKy8pLnRlc3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl90YWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VLaW5kID0gZnVuY3Rpb24gcGFyc2VLaW5kKCkge1xuICAgICAgICAgICAgdmFyIGtpbmQsIGtpbmRzO1xuICAgICAgICAgICAga2luZHMgPSB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnY29uc3RhbnQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdldmVudCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2V4dGVybmFsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWl4aW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICdtb2R1bGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICduYW1lc3BhY2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICd0eXBlZGVmJzogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGtpbmQgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy5raW5kID0ga2luZDtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoa2luZHMsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIGtpbmQgbmFtZSBcXCclMFxcJycsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0gZnVuY3Rpb24gcGFyc2VBY2Nlc3MoKSB7XG4gICAgICAgICAgICB2YXIgYWNjZXNzO1xuICAgICAgICAgICAgYWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzO1xuICAgICAgICAgICAgaWYgKGFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNjZXNzICE9PSAncHVibGljJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBhY2Nlc3MgbmFtZSBcXCclMFxcJycsIGFjY2VzcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYXRpb24gPSBmdW5jdGlvbiBwYXJzZVZhcmlhdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB2YXJpYXRpb24sIHRleHQ7XG4gICAgICAgICAgICB0ZXh0ID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB2YXJpYXRpb24gPSBwYXJzZUZsb2F0KHRleHQsIDEwKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy52YXJpYXRpb24gPSB2YXJpYXRpb247XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFyaWF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCB2YXJpYXRpb24gXFwnJTBcXCcnLCB0ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lbnN1cmVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQmVFbXB0eSA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZEJlRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ1Vua25vd24gY29udGVudCBcXCclMFxcJycsIHNob3VsZEJlRW1wdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxvZ3VlID0gZnVuY3Rpb24gZXBpbG9ndWUoKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYmIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzbG9wcHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBSdWxlcyA9IHtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nlc3MuaHRtbFxuICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sXG4gICAgICAgICAgICAnYWxpYXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbFxuICAgICAgICAgICAgJ2F1Z21lbnRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWxcbiAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sXG4gICAgICAgICAgICAnY2xhc3MnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5odG1sXG4gICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1kZXByZWNhdGVkLmh0bWxcbiAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZ2xvYmFsLmh0bWxcbiAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWxcbiAgICAgICAgICAgICdpbm5lcic6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtaW5zdGFuY2UuaHRtbFxuICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWxcbiAgICAgICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1taXhlcy5odG1sXG4gICAgICAgICAgICAnbWl4ZXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4aW4uaHRtbFxuICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWxcbiAgICAgICAgICAgICdtZXRob2QnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbFxuICAgICAgICAgICAgJ21vZHVsZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICd2YXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sXG4gICAgICAgICAgICAnbmFtZSc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbFxuICAgICAgICAgICAgJ25hbWVzcGFjZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWxcbiAgICAgICAgICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sXG4gICAgICAgICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sXG4gICAgICAgICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWxcbiAgICAgICAgICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbFxuICAgICAgICAgICAgJ3JlcXVpcmVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXNpbmNlLmh0bWxcbiAgICAgICAgICAgICdzaW5jZSc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN0YXRpYy5odG1sXG4gICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWxcbiAgICAgICAgICAgICdzdW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sXG4gICAgICAgICAgICAndGhpcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy10b2RvLmh0bWxcbiAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdHlwZWRlZi5odG1sXG4gICAgICAgICAgICAndHlwZWRlZic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZhcmlhdGlvbi5odG1sXG4gICAgICAgICAgICAndmFyaWF0aW9uJzogWydwYXJzZVZhcmlhdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZlcnNpb24uaHRtbFxuICAgICAgICAgICAgJ3ZlcnNpb24nOiBbJ3BhcnNlRGVzY3JpcHRpb24nXVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSgpIHtcbiAgICAgICAgICAgIHZhciBpLCBpeiwgc2VxdWVuY2VzLCBtZXRob2Q7XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHRpdGxlXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RpdGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGl0bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlZWsgdG8gY29udGVudCBsYXN0IGluZGV4LlxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IHNlZWtDb250ZW50KHRoaXMuX3RpdGxlKTtcblxuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KFJ1bGVzLCB0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgPSBSdWxlc1t0aGlzLl90aXRsZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VxdWVuY2VzXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VzID0gWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lJywgJ3BhcnNlRGVzY3JpcHRpb24nLCAnZXBpbG9ndWUnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzZXF1ZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IHNlcXVlbmNlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbbWV0aG9kXSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2VlayBnbG9iYWwgaW5kZXggdG8gZW5kIG9mIHRoaXMgdGFnLlxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9sYXN0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZztcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRhZyhvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUsIHBhcnNlcjtcblxuICAgICAgICAgICAgLy8gc2tpcCB0byB0YWdcbiAgICAgICAgICAgIGlmICghc2tpcFRvVGFnKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2NhbiB0aXRsZVxuICAgICAgICAgICAgdGl0bGUgPSBzY2FuVGl0bGUoKTtcblxuICAgICAgICAgICAgLy8gY29uc3RydWN0IHRhZyBwYXJzZXJcbiAgICAgICAgICAgIHBhcnNlciA9IG5ldyBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUGFyc2UgSlNEb2NcbiAgICAgICAgLy9cblxuICAgICAgICBmdW5jdGlvbiBzY2FuSlNEb2NEZXNjcmlwdGlvbihwcmVzZXJ2ZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICcnLCBjaCwgYXRBbGxvd2VkO1xuXG4gICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXRBbGxvd2VkICYmIGNoID09PSAweDQwICAvKiAnQCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRBbGxvd2VkICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyBkZXNjcmlwdGlvbiA6IHRyaW0oZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBpejtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFnc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGFncykge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlvbnMudGFncykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7IGkgPCBpejsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGFnc1tpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignSW52YWxpZCBcInRhZ3NcIiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCdJbnZhbGlkIFwidGFnc1wiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgbGluZU51bWJlciA9IDA7XG4gICAgICAgICAgICByZWNvdmVyYWJsZSA9IG9wdGlvbnMucmVjb3ZlcmFibGU7XG4gICAgICAgICAgICBzbG9wcHkgPSBvcHRpb25zLnNsb3BweTtcbiAgICAgICAgICAgIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHNjYW5KU0RvY0Rlc2NyaXB0aW9uKG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSBwYXJzZVRhZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhZykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcmVzdGluZ1RhZ3MgfHwgaW50ZXJlc3RpbmdUYWdzLmhhc093blByb3BlcnR5KHRhZy50aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFncy5wdXNoKHRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbiAgICB9KGpzZG9jID0ge30pKTtcblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHV0aWxpdHkuVkVSU0lPTjtcbiAgICBleHBvcnRzLnBhcnNlID0ganNkb2MucGFyc2U7XG4gICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7XG4gICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlO1xuICAgIGV4cG9ydHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7XG4gICAgZXhwb3J0cy5TeW50YXggPSBzaGFsbG93Q29weSh0eXBlZC5TeW50YXgpO1xuICAgIGV4cG9ydHMuRXJyb3IgPSB1dGlsaXR5LkRvY3RyaW5lRXJyb3I7XG4gICAgZXhwb3J0cy50eXBlID0ge1xuICAgICAgICBTeW50YXg6IGV4cG9ydHMuU3ludGF4LFxuICAgICAgICBwYXJzZVR5cGU6IHR5cGVkLnBhcnNlVHlwZSxcbiAgICAgICAgcGFyc2VQYXJhbVR5cGU6IHR5cGVkLnBhcnNlUGFyYW1UeXBlLFxuICAgICAgICBzdHJpbmdpZnk6IHR5cGVkLnN0cmluZ2lmeVxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vLyBcInR5cGVkXCIsIHRoZSBUeXBlIEV4cHJlc3Npb24gUGFyc2VyIGZvciBkb2N0cmluZS5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBUb2tlbixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlc3V0aWxzLFxuICAgICAgICB1dGlsaXR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICB1dGlsaXR5ID0gcmVxdWlyZSgnLi91dGlsaXR5Jyk7XG5cbiAgICBTeW50YXggPSB7XG4gICAgICAgIE51bGxhYmxlTGl0ZXJhbDogJ051bGxhYmxlTGl0ZXJhbCcsXG4gICAgICAgIEFsbExpdGVyYWw6ICdBbGxMaXRlcmFsJyxcbiAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsXG4gICAgICAgIFVuZGVmaW5lZExpdGVyYWw6ICdVbmRlZmluZWRMaXRlcmFsJyxcbiAgICAgICAgVm9pZExpdGVyYWw6ICdWb2lkTGl0ZXJhbCcsXG4gICAgICAgIFVuaW9uVHlwZTogJ1VuaW9uVHlwZScsXG4gICAgICAgIEFycmF5VHlwZTogJ0FycmF5VHlwZScsXG4gICAgICAgIFJlY29yZFR5cGU6ICdSZWNvcmRUeXBlJyxcbiAgICAgICAgRmllbGRUeXBlOiAnRmllbGRUeXBlJyxcbiAgICAgICAgRnVuY3Rpb25UeXBlOiAnRnVuY3Rpb25UeXBlJyxcbiAgICAgICAgUGFyYW1ldGVyVHlwZTogJ1BhcmFtZXRlclR5cGUnLFxuICAgICAgICBSZXN0VHlwZTogJ1Jlc3RUeXBlJyxcbiAgICAgICAgTm9uTnVsbGFibGVUeXBlOiAnTm9uTnVsbGFibGVUeXBlJyxcbiAgICAgICAgT3B0aW9uYWxUeXBlOiAnT3B0aW9uYWxUeXBlJyxcbiAgICAgICAgTnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJyxcbiAgICAgICAgTmFtZUV4cHJlc3Npb246ICdOYW1lRXhwcmVzc2lvbicsXG4gICAgICAgIFR5cGVBcHBsaWNhdGlvbjogJ1R5cGVBcHBsaWNhdGlvbidcbiAgICB9O1xuXG4gICAgVG9rZW4gPSB7XG4gICAgICAgIElMTEVHQUw6IDAsICAgIC8vIElMTEVHQUxcbiAgICAgICAgRE9UX0xUOiAxLCAgICAgLy8gLjxcbiAgICAgICAgUkVTVDogMiwgICAgICAgLy8gLi4uXG4gICAgICAgIExUOiAzLCAgICAgICAgIC8vIDxcbiAgICAgICAgR1Q6IDQsICAgICAgICAgLy8gPlxuICAgICAgICBMUEFSRU46IDUsICAgICAvLyAoXG4gICAgICAgIFJQQVJFTjogNiwgICAgIC8vIClcbiAgICAgICAgTEJSQUNFOiA3LCAgICAgLy8ge1xuICAgICAgICBSQlJBQ0U6IDgsICAgICAvLyB9XG4gICAgICAgIExCUkFDSzogOSwgICAgLy8gW1xuICAgICAgICBSQlJBQ0s6IDEwLCAgICAvLyBdXG4gICAgICAgIENPTU1BOiAxMSwgICAgIC8vICxcbiAgICAgICAgQ09MT046IDEyLCAgICAgLy8gOlxuICAgICAgICBTVEFSOiAxMywgICAgICAvLyAqXG4gICAgICAgIFBJUEU6IDE0LCAgICAgIC8vIHxcbiAgICAgICAgUVVFU1RJT046IDE1LCAgLy8gP1xuICAgICAgICBCQU5HOiAxNiwgICAgICAvLyAhXG4gICAgICAgIEVRVUFMOiAxNywgICAgIC8vID1cbiAgICAgICAgTkFNRTogMTgsICAgICAgLy8gbmFtZSB0b2tlblxuICAgICAgICBTVFJJTkc6IDE5LCAgICAvLyBzdHJpbmdcbiAgICAgICAgTlVNQkVSOiAyMCwgICAgLy8gbnVtYmVyXG4gICAgICAgIEVPRjogMjFcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkge1xuICAgICAgICByZXR1cm4gJz48KCl7fVtdLDoqfD8hPScuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkgPT09IC0xICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSAmJiAhZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXMgPSBwcmV2aW91cztcbiAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBDb250ZXh0LnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmV2aW91cyA9IHRoaXMuX3ByZXZpb3VzO1xuICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4O1xuICAgICAgICB0b2tlbiA9IHRoaXMuX3Rva2VuO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH07XG5cbiAgICBDb250ZXh0LnNhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGV4dChwcmV2aW91cywgaW5kZXgsIHRva2VuLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzSGV4RGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmU7IC8vVE9ETyByZXZpZXcgcmVtb3ZhbCBvY3RhbCA9IGZhbHNlXG4gICAgICAgIHF1b3RlID0gc291cmNlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xccic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxiJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxmJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyByZXZpZXcgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETyBSZXZpZXcgUmVtb3ZhbCBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAgJ1xccicgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1b3RlICE9PSAnJykge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHF1b3RlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHN0cjtcbiAgICAgICAgcmV0dXJuIFRva2VuLlNUUklORztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuTnVtYmVyKCkge1xuICAgICAgICB2YXIgbnVtYmVyLCBjaDtcblxuICAgICAgICBudW1iZXIgPSAnJztcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNoICE9PSAweDJFICAvKiAnLicgKi8pIHtcbiAgICAgICAgICAgIG51bWJlciA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NzggIC8qICd4JyAqLyB8fCBjaCA9PT0gMHg1OCAgLyogJ1gnICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgMHhcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCA4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDY1ICAvKiAnZScgKi8gfHwgY2ggPT09IDB4NDUgIC8qICdFJyAqLykge1xuICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MkIgIC8qICcrJyAqLyB8fCBjaCA9PT0gMHgyRCAgLyogJy0nICovKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7XG4gICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzY2FuVHlwZU5hbWUoKSB7XG4gICAgICAgIHZhciBjaCwgY2gyO1xuXG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNUeXBlTmFtZShzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2gyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2gyID09PSAweDNDICAvKiAnPCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUb2tlbi5OQU1FO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciBjaDtcblxuICAgICAgICBwcmV2aW91cyA9IGluZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgMHgyNzogIC8qICcnJyAqL1xuICAgICAgICBjYXNlIDB4MjI6ICAvKiAnXCInICovXG4gICAgICAgICAgICB0b2tlbiA9IHNjYW5TdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0E6ICAvKiAnOicgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09MT047XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDJDOiAgLyogJywnICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyODogIC8qICcoJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MUEFSRU47XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDI5OiAgLyogJyknICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJQQVJFTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4NUI6ICAvKiAnWycgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNLO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg1RDogIC8qICddJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0s7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDdCOiAgLyogJ3snICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDRTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4N0Q6ICAvKiAnfScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyRTogIC8qICcuJyAqL1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4M0MgIC8qICc8JyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJzwnXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UX0xUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJFICAvKiAnLicgKi8gJiYgaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4MkUgIC8qICcuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJy4nXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgIC8vICcuJ1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0M6ICAvKiAnPCcgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFQ7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNFOiAgLyogJz4nICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkdUO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyQTogIC8qICcqJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg3QzogIC8qICd8JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5QSVBFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgzRjogIC8qICc/JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5RVUVTVElPTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4MjE6ICAvKiAnIScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQkFORztcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0Q6ICAvKiAnPScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRVFVQUw7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIHN0cmluZyBwZXJtaXRzIGZvbGxvd2luZyBjYXNlLFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzc1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoaXMgcmVkdWNlZCAxIHRva2VuIFRLX05BTUVcbiAgICAgICAgICAgIHV0aWxpdHkuYXNzZXJ0KGlzVHlwZU5hbWUoY2gpKTtcbiAgICAgICAgICAgIHRva2VuID0gc2NhblR5cGVOYW1lKCk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lKHRhcmdldCwgdGV4dCkge1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gdGFyZ2V0LCB0ZXh0IHx8ICdjb25zdW1lZCB0b2tlbiBub3QgbWF0Y2hlZCcpO1xuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwZWN0KHRhcmdldCwgbWVzc2FnZSkge1xuICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKG1lc3NhZ2UgfHwgJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJ1xuICAgIC8vXG4gICAgLy8gVHlwZVVuaW9uTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgTm9uZW1wdHlUeXBlVW5pb25MaXN0XG4gICAgLy9cbiAgICAvLyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj1cbiAgICAvLyAgICAgVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgVHlwZUV4cHJlc3Npb24gJ3wnIE5vbmVtcHR5VHlwZVVuaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTFBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBzdGFydCB3aXRoICgnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUlBBUkVOKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uUElQRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3VtZShUb2tlbi5SUEFSRU4sICdVbmlvblR5cGUgc2hvdWxkIGVuZCB3aXRoICknKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcnJheVR5cGUgOj0gJ1snIEVsZW1lbnRUeXBlTGlzdCAnXSdcbiAgICAvL1xuICAgIC8vIEVsZW1lbnRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgfCBUeXBlRXhwcmVzc2lvblxuICAgIC8vICB8ICcuLi4nIFR5cGVFeHByZXNzaW9uXG4gICAgLy8gIHwgVHlwZUV4cHJlc3Npb24gJywnIEVsZW1lbnRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlUeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLLCAnQXJyYXlUeXBlIHNob3VsZCBzdGFydCB3aXRoIFsnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNLKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheVR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICAgICAgdmFyIHYgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FIHx8IHRva2VuID09PSBUb2tlbi5TVFJJTkcpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTlVNQkVSKTtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICAgIH1cblxuICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICB9XG5cbiAgICAvLyBGaWVsZFR5cGUgOj1cbiAgICAvLyAgICAgRmllbGROYW1lXG4gICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Npb25cbiAgICAvL1xuICAgIC8vIEZpZWxkTmFtZSA6PVxuICAgIC8vICAgICBOYW1lRXhwcmVzc2lvblxuICAgIC8vICAgfCBTdHJpbmdMaXRlcmFsXG4gICAgLy8gICB8IE51bWJlckxpdGVyYWxcbiAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyXG4gICAgZnVuY3Rpb24gcGFyc2VGaWVsZFR5cGUoKSB7XG4gICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZpZWxkVHlwZSxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9J1xuICAgIC8vXG4gICAgLy8gRmllbGRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgRmllbGRUeXBlXG4gICAgLy8gICB8IEZpZWxkVHlwZSAnLCcgRmllbGRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHtcbiAgICAgICAgdmFyIGZpZWxkcztcblxuICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDRSwgJ1JlY29yZFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggeycpO1xuICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkge1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlRmllbGRUeXBlKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlY29yZFR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5hbWVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgSWRlbnRpZmllclxuICAgIC8vICB8IFRhZ0lkZW50aWZpZXIgJzonIElkZW50aWZpZXJcbiAgICAvL1xuICAgIC8vIFRhZyBpZGVudGlmaWVyIGlzIG9uZSBvZiBcIm1vZHVsZVwiLCBcImV4dGVybmFsXCIgb3IgXCJldmVudFwiXG4gICAgLy8gSWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyBUb2tlbi5OQU1FLCBpbmNsdWRpbmcgYW55IGRvdHMsIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gbmFtZXNwYWNlLm1vZHVsZS5NeUNsYXNzXG4gICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZTtcbiAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUpO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04gJiYgKFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgbmFtZSA9PT0gJ2V4dGVybmFsJyB8fFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdldmVudCcpKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OKTtcbiAgICAgICAgICAgIG5hbWUgKz0gJzonICsgdmFsdWU7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVFeHByZXNzaW9uTGlzdCA6PVxuICAgIC8vICAgICBUb3BMZXZlbFR5cGVFeHByZXNzaW9uXG4gICAgLy8gICB8IFRvcExldmVsVHlwZUV4cHJlc3Npb24gJywnIFR5cGVFeHByZXNzaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpO1xuICAgICAgICB3aGlsZSAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIFR5cGVOYW1lIDo9XG4gICAgLy8gICAgIE5hbWVFeHByZXNzaW9uXG4gICAgLy8gICB8IE5hbWVFeHByZXNzaW9uIFR5cGVBcHBsaWNhdGlvblxuICAgIC8vXG4gICAgLy8gVHlwZUFwcGxpY2F0aW9uIDo9XG4gICAgLy8gICAgICcuPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+J1xuICAgIC8vICAgfCAnPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+JyAgIC8vIHRoaXMgaXMgZXh0ZW5zaW9uIG9mIGRvY3RyaW5lXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlTmFtZSgpIHtcbiAgICAgICAgdmFyIGV4cHIsIGFwcGxpY2F0aW9ucztcblxuICAgICAgICBleHByID0gcGFyc2VOYW1lRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9ucyA9IHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCk7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBhcHBsaWNhdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gUmVzdWx0VHlwZSA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgJzonIHZvaWRcbiAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgLy9cbiAgICAvLyBCTkYgaXMgYWJvdmVcbiAgICAvLyBidXQsIHdlIHJlbW92ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6Q09MT05cbiAgICBmdW5jdGlvbiBwYXJzZVJlc3VsdFR5cGUoKSB7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04sICdSZXN1bHRUeXBlIHNob3VsZCBzdGFydCB3aXRoIDonKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8vIFBhcmFtZXRlcnNUeXBlIDo9XG4gICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlwZVxuICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVyc1R5cGUgJywnIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy9cbiAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZSA6PVxuICAgIC8vICAgICAnLi4uJ1xuICAgIC8vICAgICAnLi4uJyBJZGVudGlmaWVyXG4gICAgLy9cbiAgICAvLyBOb25SZXN0UGFyYW1ldGVyc1R5cGUgOj1cbiAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBlXG4gICAgLy8gICB8IFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZVxuICAgIC8vXG4gICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZSA6PVxuICAgIC8vICAgICBPcHRpb25hbFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlXG4gICAgLy9cbiAgICAvLyBPcHRpb25hbFBhcmFtZXRlclR5cGUgOj0gUGFyYW1ldGVyVHlwZT1cbiAgICAvL1xuICAgIC8vIFBhcmFtZXRlclR5cGUgOj0gVHlwZUV4cHJlc3Npb24gfCBJZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvblxuICAgIC8vXG4gICAgLy8gSWRlbnRpZmllciBpcyBcIm5ld1wiIG9yIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzVHlwZSgpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IFtdLCBvcHRpb25hbFNlcXVlbmNlID0gZmFsc2UsIGV4cHIsIHJlc3QgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5cGVcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpO1xuICAgICAgICAgICAgICAgIHJlc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk5hbWVFeHByZXNzaW9uICYmIHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICAgICAgZXhwciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlBhcmFtZXRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvcHRpb25hbFNlcXVlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZXhwcik7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGVcbiAgICAvL1xuICAgIC8vIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZSA6PVxuICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGVcbiAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcsJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZVxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25UeXBlKCkge1xuICAgICAgICB2YXIgaXNOZXcsIHRoaXNCaW5kaW5nLCBwYXJhbXMsIHJlc3VsdCwgZm5UeXBlO1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJywgJ0Z1bmN0aW9uVHlwZSBzaG91bGQgc3RhcnQgd2l0aCBcXCdmdW5jdGlvblxcJycpO1xuICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuXG4gICAgICAgIC8vIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGlzIG5vdCBpbXBsZW1lbnRpbmcgVHlwZVBhcmFtZXRlcnMuXG4gICAgICAgIC8vIFNvIHdlIGRvIG5vdC4gaWYgd2UgZG9uJ3QgZ2V0ICcoJywgd2Ugc2VlIGl0IGFzIGVycm9yLlxuICAgICAgICBleHBlY3QoVG9rZW4uTFBBUkVOKTtcblxuICAgICAgICBpc05ldyA9IGZhbHNlO1xuICAgICAgICBwYXJhbXMgPSBbXTtcbiAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgb3IgJ3RoaXMnXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndGhpcycgfHwgdmFsdWUgPT09ICduZXcnKSkge1xuICAgICAgICAgICAgICAgIC8vICd0aGlzJyBvciAnbmV3J1xuICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgICAgaXNOZXcgPSB2YWx1ZSA9PT0gJ25ldyc7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09MT04pO1xuICAgICAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gcGFyc2VUeXBlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChUb2tlbi5SUEFSRU4pO1xuXG4gICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmVzdWx0VHlwZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm5UeXBlID0ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXNCaW5kaW5nKSB7XG4gICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgbnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGZuVHlwZVsndGhpcyddID0gdGhpc0JpbmRpbmc7XG4gICAgICAgICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm5UeXBlO1xuICAgIH1cblxuICAgIC8vIEJhc2ljVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgJyonXG4gICAgLy8gICB8ICdudWxsJ1xuICAgIC8vICAgfCAndW5kZWZpbmVkJ1xuICAgIC8vICAgfCBUeXBlTmFtZVxuICAgIC8vICAgfCBGdW5jdGlvblR5cGVcbiAgICAvLyAgIHwgVW5pb25UeXBlXG4gICAgLy8gICB8IFJlY29yZFR5cGVcbiAgICAvLyAgIHwgQXJyYXlUeXBlXG4gICAgZnVuY3Rpb24gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgY29udGV4dDtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlIFRva2VuLlNUQVI6XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlNUQVIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQWxsTGl0ZXJhbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICBjYXNlIFRva2VuLkxQQVJFTjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVVuaW9uVHlwZSgpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0U6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5OQU1FOlxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsTGl0ZXJhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmRlZmluZWRMaXRlcmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dCA9IENvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25UeXBlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVOYW1lKCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnPycgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnIScgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICc/J1xuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICchJ1xuICAgIC8vICAgfCAnPydcbiAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnW10nXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BIHx8IHRva2VuID09PSBUb2tlbi5FUVVBTCB8fCB0b2tlbiA9PT0gVG9rZW4uUkJSQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID09PSBUb2tlbi5SUEFSRU4gfHwgdG9rZW4gPT09IFRva2VuLlBJUEUgfHwgdG9rZW4gPT09IFRva2VuLkVPRiB8fFxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLIHx8IHRva2VuID09PSBUb2tlbi5HVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZUxpdGVyYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlFVRVNUSU9OKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkxCUkFDSykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0spO1xuICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDSywgJ2V4cGVjdGVkIGFuIGFycmF5LXN0eWxlIHR5cGUgZGVjbGFyYXRpb24gKCcgKyB2YWx1ZSArICdbXSknKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBUb3BMZXZlbFR5cGVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgICBUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgIHwgVHlwZVVuaW9uTGlzdFxuICAgIC8vXG4gICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lvbiwgbm90IEVTNFxuICAgIC8vIGxpa2UsXG4gICAgLy8gICB7IG51bWJlciB8IHN0cmluZyB9XG4gICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRlIGl0IGFzXG4gICAgLy8gICB7IChudW1iZXJ8c3RyaW5nKSB9XG4gICAgZnVuY3Rpb24gcGFyc2VUb3AoKSB7XG4gICAgICAgIHZhciBleHByLCBlbGVtZW50cztcblxuICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHtcbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMgPSBbIGV4cHIgXTtcbiAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VUb3BQYXJhbVR5cGUoKSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVG9wKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VUb3AoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5FUVVBTCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZShzcmMsIG9wdCkge1xuICAgICAgICB2YXIgZXhwcjtcblxuICAgICAgICBzb3VyY2UgPSBzcmM7XG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgcHJldmlvdXMgPSAwO1xuXG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7XG5cbiAgICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHByZXZpb3VzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbVR5cGUoc3JjLCBvcHQpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHByZXZpb3VzID0gMDtcblxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVRvcFBhcmFtVHlwZSgpO1xuXG4gICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHtcbiAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXo7XG5cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJz8nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQWxsTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICcqJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ251bGwnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6XG4gICAgICAgICAgICByZXN1bHQgPSAndm9pZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5VbmlvblR5cGU6XG4gICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJygnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdG9wTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQXJyYXlUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ1snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnXSc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5SZWNvcmRUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ3snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmZpZWxkcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5maWVsZHNbaV0sIGNvbXBhY3QpO1xuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICd9JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXkgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnZhbHVlLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5GdW5jdGlvblR5cGU6XG4gICAgICAgICAgICByZXN1bHQgPSBjb21wYWN0ID8gJ2Z1bmN0aW9uKCcgOiAnZnVuY3Rpb24gKCc7XG5cbiAgICAgICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZVsnbmV3J10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ25ldzonIDogJ25ldzogJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ3RoaXM6JyA6ICd0aGlzOiAnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7XG5cbiAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnJlc3VsdCwgY29tcGFjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5QYXJhbWV0ZXJUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlJlc3RUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJy4uLic7XG4gICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk5vbk51bGxhYmxlVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICchJyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJyEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguT3B0aW9uYWxUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJz0nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVUeXBlOlxuICAgICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8nICsgc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnPyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUubmFtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICcuPCc7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuYXBwbGljYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJz4nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignVW5rbm93biB0eXBlICcgKyBub2RlLnR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUltcGwobm9kZSwgb3B0aW9ucy5jb21wYWN0LCBvcHRpb25zLnRvcExldmVsKTtcbiAgICB9XG5cbiAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTtcbiAgICBleHBvcnRzLnBhcnNlUGFyYW1UeXBlID0gcGFyc2VQYXJhbVR5cGU7XG4gICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG4gICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBWRVJTSU9OO1xuXG4gICAgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIGZ1bmN0aW9uIERvY3RyaW5lRXJyb3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSAnRG9jdHJpbmVFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIE1pZGRsZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgTWlkZGxlLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbiAgICAgICAgcmV0dXJuIG5ldyBNaWRkbGUoKTtcbiAgICB9KCkpO1xuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9jdHJpbmVFcnJvcjtcbiAgICBleHBvcnRzLkRvY3RyaW5lRXJyb3IgPSBEb2N0cmluZUVycm9yO1xuXG4gICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBEb2N0cmluZUVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBleHBvcnRzLnRocm93RXJyb3IgPSB0aHJvd0Vycm9yO1xuXG4gICAgZXhwb3J0cy5hc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbn0oKSk7XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgJ0FTIElTJ1xuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQXNzaWdubWVudEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgICAgICBjYXNlICdMb2dpY2FsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ05ld0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdTZXF1ZW5jZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1VwZGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGlvblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0JyZWFrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbnRpbnVlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RlYnVnZ2VyU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RvV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1RyeVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NvdXJjZUVsZW1lbnQobm9kZSkge1xuICAgICAgcmV0dXJuIGlzU3RhdGVtZW50KG5vZGUpIHx8IG5vZGUgIT0gbnVsbCAmJiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFpbGluZ1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0lmU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29uc2VxdWVudDtcblxuICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgY3VycmVudDtcblxuICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbm9kZS5jb25zZXF1ZW50O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuYWx0ZXJuYXRlID09IG51bGwpICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB0cmFpbGluZ1N0YXRlbWVudChjdXJyZW50KTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0V4cHJlc3Npb246IGlzRXhwcmVzc2lvbixcbiAgICAgICAgaXNTdGF0ZW1lbnQ6IGlzU3RhdGVtZW50LFxuICAgICAgICBpc0l0ZXJhdGlvblN0YXRlbWVudDogaXNJdGVyYXRpb25TdGF0ZW1lbnQsXG4gICAgICAgIGlzU291cmNlRWxlbWVudDogaXNTb3VyY2VFbGVtZW50LFxuICAgICAgICBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQ6IGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudCxcblxuICAgICAgICB0cmFpbGluZ1N0YXRlbWVudDogdHJhaWxpbmdTdGF0ZW1lbnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBJdmFuIE5pa3VsaW4gPGlmYWFhbkBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgUmVnZXgsIE5PTl9BU0NJSV9XSElURVNQQUNFUztcblxuICAgIC8vIFNlZSBgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc2AuXG4gICAgUmVnZXggPSB7XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdJyksXG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOEU0LVxcdTA4RkVcXHUwOTAwLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N0ZcXHUwOTgxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMS1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4XFx1MEM1OVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODJcXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAyXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0QtXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTdcXHUwRDYwLVxcdTBENjNcXHUwRDY2LVxcdTBENkZcXHUwRDdBLVxcdTBEN0ZcXHUwRDgyXFx1MEQ4M1xcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUwMS1cXHUwRTNBXFx1MEU0MC1cXHUwRTRFXFx1MEU1MC1cXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjlcXHUwRUJCLVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjI5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjBcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEOVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRjZcXHUxRDAwLVxcdTFERTZcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyRlxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOTlcXHUzMDlBXFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNjk3XFx1QTY5Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdCXFx1QUE4MC1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyNlxcdUZFMzNcXHVGRTM0XFx1RkU0RC1cXHVGRTRGXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYxMC1cXHVGRjE5XFx1RkYyMS1cXHVGRjNBXFx1RkYzRlxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10nKVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gaXNEZWNpbWFsRGlnaXQoY2gpIHx8ICAgIC8vIDAuLjlcbiAgICAgICAgICAgICg5NyA8PSBjaCAmJiBjaCA8PSAxMDIpIHx8ICAvLyBhLi5mXG4gICAgICAgICAgICAoNjUgPD0gY2ggJiYgY2ggPD0gNzApOyAgICAgLy8gQS4uRlxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU1KTsgICAvLyAwLi43XG4gICAgfVxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBOT05fQVNDSUlfV0hJVEVTUEFDRVMgPSBbXG4gICAgICAgIDB4MTY4MCwgMHgxODBFLFxuICAgICAgICAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSxcbiAgICAgICAgMHgyMDJGLCAweDIwNUYsXG4gICAgICAgIDB4MzAwMCxcbiAgICAgICAgMHhGRUZGXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8XG4gICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIE5PTl9BU0NJSV9XSElURVNQQUNFUy5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9XG5cbiAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9yc1xuXG4gICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7XG4gICAgfVxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPT09IDM2KSB8fCAoY2ggPT09IDk1KSB8fCAgICAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8ICAgICAgICAgICAgICAgICAgICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPj0gNDggJiYgY2ggPD0gNTcpIHx8ICAgICAgICAgLy8gMC4uOVxuICAgICAgICAgICAgKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgICAgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzRGVjaW1hbERpZ2l0OiBpc0RlY2ltYWxEaWdpdCxcbiAgICAgICAgaXNIZXhEaWdpdDogaXNIZXhEaWdpdCxcbiAgICAgICAgaXNPY3RhbERpZ2l0OiBpc09jdGFsRGlnaXQsXG4gICAgICAgIGlzV2hpdGVTcGFjZTogaXNXaGl0ZVNwYWNlLFxuICAgICAgICBpc0xpbmVUZXJtaW5hdG9yOiBpc0xpbmVUZXJtaW5hdG9yLFxuICAgICAgICBpc0lkZW50aWZpZXJTdGFydDogaXNJZGVudGlmaWVyU3RhcnQsXG4gICAgICAgIGlzSWRlbnRpZmllclBhcnQ6IGlzSWRlbnRpZmllclBhcnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZEVTNihpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOlxuICAgICAgICBjYXNlICdpbnRlcmZhY2UnOlxuICAgICAgICBjYXNlICdwYWNrYWdlJzpcbiAgICAgICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6XG4gICAgICAgIGNhc2UgJ3B1YmxpYyc6XG4gICAgICAgIGNhc2UgJ3N0YXRpYyc6XG4gICAgICAgIGNhc2UgJ2xldCc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KSB7XG4gICAgICAgIC8vIHlpZWxkIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBrZXl3b3JkIHVuZGVyIG5vbi1zdHJpY3QgbW9kZS5cbiAgICAgICAgaWYgKCFzdHJpY3QgJiYgaWQgPT09ICd5aWVsZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkRVM2KGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fCAoaWQgPT09ICd0cnknKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmRFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdudWxsJyB8fCBpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnIHx8IGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc2VydmVkV29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ251bGwnIHx8IGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScgfHwgaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUoaWQpIHtcbiAgICAgICAgdmFyIGksIGl6LCBjaDtcblxuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICghY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMSwgaXogPSBpZC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoIWNvZGUuaXNJZGVudGlmaWVyUGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyTmFtZShpZCkgJiYgIWlzUmVzZXJ2ZWRXb3JkRVM1KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllckVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpc0lkZW50aWZpZXJOYW1lKGlkKSAmJiAhaXNSZXNlcnZlZFdvcmRFUzYoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzS2V5d29yZEVTNTogaXNLZXl3b3JkRVM1LFxuICAgICAgICBpc0tleXdvcmRFUzY6IGlzS2V5d29yZEVTNixcbiAgICAgICAgaXNSZXNlcnZlZFdvcmRFUzU6IGlzUmVzZXJ2ZWRXb3JkRVM1LFxuICAgICAgICBpc1Jlc2VydmVkV29yZEVTNjogaXNSZXNlcnZlZFdvcmRFUzYsXG4gICAgICAgIGlzUmVzdHJpY3RlZFdvcmQ6IGlzUmVzdHJpY3RlZFdvcmQsXG4gICAgICAgIGlzSWRlbnRpZmllck5hbWU6IGlzSWRlbnRpZmllck5hbWUsXG4gICAgICAgIGlzSWRlbnRpZmllckVTNTogaXNJZGVudGlmaWVyRVM1LFxuICAgICAgICBpc0lkZW50aWZpZXJFUzY6IGlzSWRlbnRpZmllckVTNlxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydHMuYXN0ID0gcmVxdWlyZSgnLi9hc3QnKTtcbiAgICBleHBvcnRzLmNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcbiAgICBleHBvcnRzLmtleXdvcmQgPSByZXF1aXJlKCcuL2tleXdvcmQnKTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwibW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJkb2N0cmluZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiSlNEb2MgcGFyc2VyXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLmh0bWxcIixcbiAgXCJtYWluXCI6IFwibGliL2RvY3RyaW5lLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuNy4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHtcbiAgICBcImxpYlwiOiBcIi4vbGliXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJsaWJcIixcbiAgICBcIkxJQ0VOU0UuQlNEXCIsXG4gICAgXCJMSUNFTlNFLmNsb3N1cmUtY29tcGlsZXJcIixcbiAgICBcIkxJQ0VOU0UuZXNwcmltYVwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICAgIFwiZW1haWxcIjogXCJuaWNob2xhc0BuY3pjb25zdWx0aW5nLmNvbVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2RvY3RyaW5lLmdpdFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImNvdmVyYWxsc1wiOiBcIl4yLjExLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWJ1bXBcIjogXCJeMC4xLjEzXCIsXG4gICAgXCJndWxwLWVzbGludFwiOiBcIl4wLjUuMFwiLFxuICAgIFwiZ3VscC1maWx0ZXJcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHAtZ2l0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJndWxwLWlzdGFuYnVsXCI6IFwiXjAuNi4wXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjkuMFwiLFxuICAgIFwiZ3VscC1tb2NoYVwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC10YWctdmVyc2lvblwiOiBcIl4xLjIuMVwiLFxuICAgIFwianNoaW50LXN0eWxpc2hcIjogXCJeMS4wLjBcIixcbiAgICBcInNob3VsZFwiOiBcIl41LjAuMVwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZG9jdHJpbmUvcmF3L21hc3Rlci9MSUNFTlNFLkJTRFwiXG4gICAgfVxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwidGVzdFwiOiBcImd1bHBcIixcbiAgICBcInVuaXQtdGVzdFwiOiBcImd1bHAgdGVzdFwiLFxuICAgIFwibGludFwiOiBcImd1bHAgbGludFwiLFxuICAgIFwiY292ZXJhbGxzXCI6IFwiY2F0IC4vY292ZXJhZ2UvbGNvdi5pbmZvIHwgY292ZXJhbGxzICYmIHJtIC1yZiAuL2NvdmVyYWdlXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiZXN1dGlsc1wiOiBcIl4xLjEuNlwiLFxuICAgIFwiaXNhcnJheVwiOiBcIjAuMC4xXCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiMGQwNTllNDIyYmRmZDYzMGVhYTE1ZDU4MzU2N2M4NjY4OTIzZjdlNlwiLFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9kb2N0cmluZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImRvY3RyaW5lQDAuNy4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcImRjYzk1ODk4NTBiMDQzZDZlNThhYmUyNGI1NjFjY2Q1NzE3NmNmZDNcIixcbiAgXCJfZnJvbVwiOiBcImRvY3RyaW5lQCpcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjEuNC4yOFwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiZGNjOTU4OTg1MGIwNDNkNmU1OGFiZTI0YjU2MWNjZDU3MTc2Y2ZkM1wiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9jdHJpbmUvLS9kb2N0cmluZS0wLjcuMC50Z3pcIlxuICB9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvY3RyaW5lLy0vZG9jdHJpbmUtMC43LjAudGd6XCJcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKSB7XG4gIGlmICghZWxlbWVudC5hdHRycykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGVsZW1lbnQuYXR0cnNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWZmIFtlbGVtZW50XSBoYXMgdGhlIGF0dHJpYnV0ZSBbbmFtZV0sIGBmYWxzZWBcbiAqICAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICByZXR1cm4gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkgIT09IC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBvZiBhdHRyaWJ1dGUgYG5hbWVgLCBvciBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5hdHRyc1tpXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICBlbGVtZW50LmF0dHJzW2ldLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hdHRycy5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRycy5zcGxpY2UoaSwgMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzVGFnTmFtZShuYW1lKSB7XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbjtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHJlZ2V4Lm1hdGNoKHRhZ05hbWUpYCBmaW5kcyBhIG1hdGNoLlxuICpcbiAqIFRoaXMgd2lsbCB1c2UgdGhlIGxvd2VyY2FzZWQgdGFnTmFtZSBmb3IgY29tcGFyaXNvbi5cbiAqIFxuICogQHBhcmFtICB7UmVnRXhwfSByZWdleFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTWF0Y2hpbmdUYWdOYW1lKHJlZ2V4KSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhdHRyLnNwbGl0KCcgJykuaW5kZXhPZihuYW1lKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsYXBzZVRleHRSYW5nZShwYXJlbnQsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRleHQgPSAnJztcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgdGV4dCArPSBnZXRUZXh0Q29udGVudChwYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gIH1cbiAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAoZW5kIC0gc3RhcnQpICsgMSk7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodGV4dCk7XG4gICAgdG4ucGFyZW50Tm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIDAsIHRuKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYGVsZW1lbnQubm9ybWFsaXplKClgIGluIHRoZSBicm93c2VyXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9ybWFsaXplXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShub2RlKSB7XG4gIGlmICghKGlzRWxlbWVudChub2RlKSB8fCBpc0RvY3VtZW50KG5vZGUpIHx8IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gIGZvciAodmFyIGkgPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgbjsgaSA+PSAwOyBpLS0pIHtcbiAgICBuID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChpc1RleHROb2RlKG4pKSB7XG4gICAgICBpZiAodGV4dFJhbmdlU3RhcnQgPT0gLTEpIHtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgLy8gY29sbGFwc2UgbGVhZGluZyB0ZXh0IG5vZGVzXG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIDAsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVjdXJzZVxuICAgICAgbm9ybWFsaXplKG4pO1xuICAgICAgLy8gY29sbGFwc2UgdGhlIHJhbmdlIGFmdGVyIHRoaXMgbm9kZVxuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID4gLTEpIHtcbiAgICAgICAgY29sbGFwc2VUZXh0UmFuZ2Uobm9kZSwgaSArIDEsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRleHQgdmFsdWUgb2YgYSBub2RlIG9yIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlLnRleHRDb250ZW50YCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gIGlmIChpc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YTtcbiAgfVxuICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG4gIHZhciBzdWJ0cmVlID0gbm9kZVdhbGtBbGwobm9kZSwgaXNUZXh0Tm9kZSk7XG4gIHJldHVybiBzdWJ0cmVlLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG59XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudCA9IHZhbHVlYCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB2YWx1ZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIG5vZGUuZGF0YSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodmFsdWUpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBub2RlO1xuICAgIG5vZGUuY2hpbGROb2RlcyA9IFt0bl07XG4gIH1cbn1cblxuLyoqXG4gKiBNYXRjaCB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudCwgdGV4dG5vZGUsIG9yIGNvbW1lbnRcbiAqXG4gKiBOb3RlOiBub2RlV2Fsa0FsbCB3aXRoIGhhc1RleHRWYWx1ZSBtYXkgcmV0dXJuIGFuIHRleHRub2RlIGFuZCBpdHMgcGFyZW50IGlmXG4gKiB0aGUgdGV4dG5vZGUgaXMgdGhlIG9ubHkgY2hpbGQgaW4gdGhhdCBwYXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGhhc1RleHRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRUZXh0Q29udGVudChub2RlKSA9PT0gdmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogT1IgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBPUigvKiAuLi5ydWxlcyAqLykge1xuICB2YXIgcnVsZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcnVsZXNbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBTkQgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBBTkQoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFydWxlc1tpXShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG4vKipcbiAqIG5lZ2F0ZSBhbiBpbmRpdmlkdWFsIHByZWRpY2F0ZSwgb3IgYSBncm91cCB3aXRoIEFORCBvciBPUlxuICovXG5mdW5jdGlvbiBOT1QocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZUZuKG5vZGUpO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCBtYXRjaGVzIGFueSBub2RlIHdpdGggYSBwYXJlbnQgbWF0Y2hpbmcgYHByZWRpY2F0ZUZuYC5cbiAqL1xuZnVuY3Rpb24gcGFyZW50TWF0Y2hlcyhwcmVkaWNhdGVGbikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgd2hpbGUocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcmVkaWNhdGVGbihwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cihhdHRyKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KG5vZGUsIGF0dHIpID4gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHJWYWx1ZShhdHRyLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobm9kZSwgYXR0cikgPT09IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSBub2RlLnRhZ05hbWU7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jztcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYG1hcGZuYCB0byBgbm9kZWAgYW5kIHRoZSB0cmVlIGJlbG93IGBub2RlYCwgcmV0dXJuaW5nIGEgZmxhdHRlbmVkXG4gKiBsaXN0IG9mIHJlc3VsdHMuXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdHJlZU1hcChub2RlLCBtYXBmbikge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBub2RlV2Fsayhub2RlLCBmdW5jdGlvbihub2RlKXtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwZm4obm9kZSkpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogUmV0dXJuIHRoZSBmaXJzdCBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICpcbiAqIEByZXR1cm5zIHtOb2RlfSBgbnVsbGAgaWYgbm8gbm9kZSBtYXRjaGVzLCBwYXJzZTUgbm9kZSBvYmplY3QgaWYgYSBub2RlXG4gKiBtYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrKG5vZGUsIHByZWRpY2F0ZSkge1xuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgdmFyIG1hdGNoID0gbnVsbDtcbiAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRjaCA9IG5vZGVXYWxrKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQWxsIG5vZGVzIG1hdGNoaW5nIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZnJvbSBgbm9kZWAgdG8gbGVhdmVzIHdpbGwgYmVcbiAqIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheVtOb2RlXX1cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gX3JldmVyc2VOb2RlV2Fsa0FsbChub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBub2RlV2Fsa0FsbChub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlclxuICogYW5jZXN0b3JzIG9yIGVhcmxpZXIgY291c2lucy9zaWJsaW5ncyBpbiB0aGUgZG9jdW1lbnQuXG4gKlxuICogTm9kZXMgYXJlIHNlYXJjaGVkIGluIHJldmVyc2UgZG9jdW1lbnQgb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHNpYmxpbmdcbiAqIHByaW9yIHRvIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtQcmlvcihub2RlLCBwcmVkaWNhdGUpIHtcbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUoc2libGluZykpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZm91bmQgPSBub2RlV2Fsa1ByaW9yKHNpYmxpbmcsIHByZWRpY2F0ZSk7XG4gICAgfVxuICAgIGlmIChwcmVkaWNhdGUocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVXYWxrUHJpb3IocGFyZW50LCBwcmVkaWNhdGUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlciBcbiAqIGFuY2VzdG9ycyBvciBlYXJsaWVyIGNvdXNpbnMvc2libGluZ3MgaW4gdGhlIGRvY3VtZW50LlxuICpcbiAqIE5vZGVzIGFyZSByZXR1cm5lZCBpbiByZXZlcnNlIGRvY3VtZW50IG9yZGVyLCBzdGFydGluZyBmcm9tIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGxQcmlvcihub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgX3JldmVyc2VOb2RlV2Fsa0FsbChzaWJsaW5nc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gICAgbm9kZVdhbGtBbGxQcmlvcihwYXJlbnQsIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KG5vZGUsIHByZWRpY2F0ZSkge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsayhub2RlLCBlbGVtZW50UHJlZGljYXRlKTtcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlV2Fsa0FsbGAsIGJ1dCBvbmx5IG1hdGNoZXMgZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtFbGVtZW50XX1cbiAqL1xuZnVuY3Rpb24gcXVlcnlBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIHZhciBlbGVtZW50UHJlZGljYXRlID0gQU5EKGlzRWxlbWVudCwgcHJlZGljYXRlKTtcbiAgcmV0dXJuIG5vZGVXYWxrQWxsKG5vZGUsIGVsZW1lbnRQcmVkaWNhdGUsIG1hdGNoZXMpO1xufVxuXG5mdW5jdGlvbiBuZXdUZXh0Tm9kZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0NvbW1lbnROb2RlKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyNjb21tZW50JyxcbiAgICBkYXRhOiBjb21tZW50LFxuICAgIHBhcmVudE5vZGU6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV3RWxlbWVudCh0YWdOYW1lLCBuYW1lc3BhY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogdGFnTmFtZSxcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlIHx8ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgICBhdHRyczogW10sXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZShvbGROb2RlLCBuZXdOb2RlKSB7XG4gIGluc2VydEJlZm9yZShvbGROb2RlLnBhcmVudE5vZGUsIG9sZE5vZGUsIG5ld05vZGUpO1xuICByZW1vdmUob2xkTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuICBub2RlLnBhcmVudE5vZGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50LCBvbGROb2RlLCBuZXdOb2RlKSB7XG4gIHJlbW92ZShuZXdOb2RlKTtcbiAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yob2xkTm9kZSk7XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDAsIG5ld05vZGUpO1xuICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIG5vZGUpIHtcbiAgcmVtb3ZlKG5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5wdXNoKG5vZGUpO1xuICBub2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbnZhciBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbmZ1bmN0aW9uIHBhcnNlKHRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKHBhcnNlNS5UcmVlQWRhcHRlcnMuZGVmYXVsdCwgb3B0aW9ucyk7XG4gIHJldHVybiBwYXJzZXIucGFyc2UodGV4dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQodGV4dCkge1xuICB2YXIgcGFyc2VyID0gbmV3IHBhcnNlNS5QYXJzZXIoKTtcbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KHRleHQpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoYXN0KSB7XG4gIHZhciBzZXJpYWxpemVyID0gbmV3IHBhcnNlNS5TZXJpYWxpemVyKCk7XG4gIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZShhc3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlLFxuICBzZXRBdHRyaWJ1dGU6IHNldEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQXR0cmlidXRlOiByZW1vdmVBdHRyaWJ1dGUsXG4gIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICByZW1vdmU6IHJlbW92ZSxcbiAgcmVwbGFjZTogcmVwbGFjZSxcbiAgYXBwZW5kOiBhcHBlbmQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgaXNEb2N1bWVudDogaXNEb2N1bWVudCxcbiAgaXNEb2N1bWVudEZyYWdtZW50OiBpc0RvY3VtZW50RnJhZ21lbnQsXG4gIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICBpc1RleHROb2RlOiBpc1RleHROb2RlLFxuICBpc0NvbW1lbnROb2RlOiBpc0NvbW1lbnROb2RlLFxuICBxdWVyeTogcXVlcnksXG4gIHF1ZXJ5QWxsOiBxdWVyeUFsbCxcbiAgbm9kZVdhbGs6IG5vZGVXYWxrLFxuICBub2RlV2Fsa0FsbDogbm9kZVdhbGtBbGwsXG4gIG5vZGVXYWxrUHJpb3I6IG5vZGVXYWxrUHJpb3IsXG4gIG5vZGVXYWxrQWxsUHJpb3I6IG5vZGVXYWxrQWxsUHJpb3IsXG4gIHRyZWVNYXA6IHRyZWVNYXAsXG4gIHByZWRpY2F0ZXM6IHtcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgaGFzQXR0cjogaGFzQXR0cixcbiAgICBoYXNBdHRyVmFsdWU6IGhhc0F0dHJWYWx1ZSxcbiAgICBoYXNNYXRjaGluZ1RhZ05hbWU6IGhhc01hdGNoaW5nVGFnTmFtZSxcbiAgICBoYXNUYWdOYW1lOiBoYXNUYWdOYW1lLFxuICAgIGhhc1RleHRWYWx1ZTogaGFzVGV4dFZhbHVlLFxuICAgIEFORDogQU5ELFxuICAgIE9SOiBPUixcbiAgICBOT1Q6IE5PVCxcbiAgICBwYXJlbnRNYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0sXG4gIGNvbnN0cnVjdG9yczoge1xuICAgIHRleHQ6IG5ld1RleHROb2RlLFxuICAgIGNvbW1lbnQ6IG5ld0NvbW1lbnROb2RlLFxuICAgIGVsZW1lbnQ6IG5ld0VsZW1lbnRcbiAgfSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwYXJzZUZyYWdtZW50OiBwYXJzZUZyYWdtZW50LFxuICBzZXJpYWxpemU6IHNlcmlhbGl6ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyk7XHJcbmV4cG9ydHMuU2ltcGxlQXBpUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlcicpO1xyXG5leHBvcnRzLlRyZWVTZXJpYWxpemVyID1cclxuZXhwb3J0cy5TZXJpYWxpemVyID0gcmVxdWlyZSgnLi9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyJyk7XHJcbmV4cG9ydHMuSnNEb21QYXJzZXIgPSByZXF1aXJlKCcuL2xpYi9qc2RvbS9qc2RvbV9wYXJzZXInKTtcclxuXHJcbmV4cG9ydHMuVHJlZUFkYXB0ZXJzID0ge1xyXG4gICAgZGVmYXVsdDogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBodG1scGFyc2VyMjogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMicpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxuLy9Db25zdFxudmFyIFZBTElEX0RPQ1RZUEVfTkFNRSA9ICdodG1sJyxcbiAgICBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcsXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICBcIisvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvL2VuXCIsXG4gICAgICAgIFwiLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMWUvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9lblwiLFxuICAgICAgICBcIi0vL3NweWdsYXNzLy9kdGQgaHRtbCAyLjAgZXh0ZW5kZWQvL2VuXCIsXG4gICAgICAgIFwiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCB3MyBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lbi8vXCIsXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy9lblwiXG4gICAgXSxcbiAgICBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJ1xuICAgIF0sXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFtcbiAgICAgICAgJy0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLycsXG4gICAgICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAgICAgJ2h0bWwnXG4gICAgXTtcblxuXG4vL1V0aWxzXG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XG4gICAgdmFyIHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyAnXFwnJyA6ICdcIic7XG5cbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuXG5cbi8vQVBJXG5leHBvcnRzLmlzUXVpcmtzID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGlmIChuYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVM7XG5cbiAgICAgICAgaWYgKHN5c3RlbUlkID09PSBudWxsKVxuICAgICAgICAgICAgcHJlZml4ZXMgPSBwcmVmaXhlcy5jb25jYXQoUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5zZXJpYWxpemVDb250ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBzdHIgPSAnIURPQ1RZUEUgJyArIG5hbWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFBVQkxJQyAnICsgZW5xdW90ZURvY3R5cGVJZChwdWJsaWNJZCk7XG5cbiAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcblxuICAgIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xuXG4gICAgcmV0dXJuIHN0cjtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcblxyXG4vL01JTUUgdHlwZXNcclxudmFyIE1JTUVfVFlQRVMgPSB7XHJcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxyXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJ1xyXG59O1xyXG5cclxuLy9BdHRyaWJ1dGVzXHJcbnZhciBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnLFxyXG4gICAgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJyxcclxuICAgIFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAnYXR0cmlidXRlbmFtZSc6ICdhdHRyaWJ1dGVOYW1lJyxcclxuICAgICAgICAnYXR0cmlidXRldHlwZSc6ICdhdHRyaWJ1dGVUeXBlJyxcclxuICAgICAgICAnYmFzZWZyZXF1ZW5jeSc6ICdiYXNlRnJlcXVlbmN5JyxcclxuICAgICAgICAnYmFzZXByb2ZpbGUnOiAnYmFzZVByb2ZpbGUnLFxyXG4gICAgICAgICdjYWxjbW9kZSc6ICdjYWxjTW9kZScsXHJcbiAgICAgICAgJ2NsaXBwYXRodW5pdHMnOiAnY2xpcFBhdGhVbml0cycsXHJcbiAgICAgICAgJ2NvbnRlbnRzY3JpcHR0eXBlJzogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcclxuICAgICAgICAnY29udGVudHN0eWxldHlwZSc6ICdjb250ZW50U3R5bGVUeXBlJyxcclxuICAgICAgICAnZGlmZnVzZWNvbnN0YW50JzogJ2RpZmZ1c2VDb25zdGFudCcsXHJcbiAgICAgICAgJ2VkZ2Vtb2RlJzogJ2VkZ2VNb2RlJyxcclxuICAgICAgICAnZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZCc6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcclxuICAgICAgICAnZmlsdGVycmVzJzogJ2ZpbHRlclJlcycsXHJcbiAgICAgICAgJ2ZpbHRlcnVuaXRzJzogJ2ZpbHRlclVuaXRzJyxcclxuICAgICAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgICAgICdncmFkaWVudHRyYW5zZm9ybSc6ICdncmFkaWVudFRyYW5zZm9ybScsXHJcbiAgICAgICAgJ2dyYWRpZW50dW5pdHMnOiAnZ3JhZGllbnRVbml0cycsXHJcbiAgICAgICAgJ2tlcm5lbG1hdHJpeCc6ICdrZXJuZWxNYXRyaXgnLFxyXG4gICAgICAgICdrZXJuZWx1bml0bGVuZ3RoJzogJ2tlcm5lbFVuaXRMZW5ndGgnLFxyXG4gICAgICAgICdrZXlwb2ludHMnOiAna2V5UG9pbnRzJyxcclxuICAgICAgICAna2V5c3BsaW5lcyc6ICdrZXlTcGxpbmVzJyxcclxuICAgICAgICAna2V5dGltZXMnOiAna2V5VGltZXMnLFxyXG4gICAgICAgICdsZW5ndGhhZGp1c3QnOiAnbGVuZ3RoQWRqdXN0JyxcclxuICAgICAgICAnbGltaXRpbmdjb25lYW5nbGUnOiAnbGltaXRpbmdDb25lQW5nbGUnLFxyXG4gICAgICAgICdtYXJrZXJoZWlnaHQnOiAnbWFya2VySGVpZ2h0JyxcclxuICAgICAgICAnbWFya2VydW5pdHMnOiAnbWFya2VyVW5pdHMnLFxyXG4gICAgICAgICdtYXJrZXJ3aWR0aCc6ICdtYXJrZXJXaWR0aCcsXHJcbiAgICAgICAgJ21hc2tjb250ZW50dW5pdHMnOiAnbWFza0NvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ21hc2t1bml0cyc6ICdtYXNrVW5pdHMnLFxyXG4gICAgICAgICdudW1vY3RhdmVzJzogJ251bU9jdGF2ZXMnLFxyXG4gICAgICAgICdwYXRobGVuZ3RoJzogJ3BhdGhMZW5ndGgnLFxyXG4gICAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJzogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxyXG4gICAgICAgICdwYXR0ZXJudHJhbnNmb3JtJzogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxyXG4gICAgICAgICdwYXR0ZXJudW5pdHMnOiAncGF0dGVyblVuaXRzJyxcclxuICAgICAgICAncG9pbnRzYXR4JzogJ3BvaW50c0F0WCcsXHJcbiAgICAgICAgJ3BvaW50c2F0eSc6ICdwb2ludHNBdFknLFxyXG4gICAgICAgICdwb2ludHNhdHonOiAncG9pbnRzQXRaJyxcclxuICAgICAgICAncHJlc2VydmVhbHBoYSc6ICdwcmVzZXJ2ZUFscGhhJyxcclxuICAgICAgICAncHJlc2VydmVhc3BlY3RyYXRpbyc6ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcclxuICAgICAgICAncHJpbWl0aXZldW5pdHMnOiAncHJpbWl0aXZlVW5pdHMnLFxyXG4gICAgICAgICdyZWZ4JzogJ3JlZlgnLFxyXG4gICAgICAgICdyZWZ5JzogJ3JlZlknLFxyXG4gICAgICAgICdyZXBlYXRjb3VudCc6ICdyZXBlYXRDb3VudCcsXHJcbiAgICAgICAgJ3JlcGVhdGR1cic6ICdyZXBlYXREdXInLFxyXG4gICAgICAgICdyZXF1aXJlZGV4dGVuc2lvbnMnOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcclxuICAgICAgICAncmVxdWlyZWRmZWF0dXJlcyc6ICdyZXF1aXJlZEZlYXR1cmVzJyxcclxuICAgICAgICAnc3BlY3VsYXJjb25zdGFudCc6ICdzcGVjdWxhckNvbnN0YW50JyxcclxuICAgICAgICAnc3BlY3VsYXJleHBvbmVudCc6ICdzcGVjdWxhckV4cG9uZW50JyxcclxuICAgICAgICAnc3ByZWFkbWV0aG9kJzogJ3NwcmVhZE1ldGhvZCcsXHJcbiAgICAgICAgJ3N0YXJ0b2Zmc2V0JzogJ3N0YXJ0T2Zmc2V0JyxcclxuICAgICAgICAnc3RkZGV2aWF0aW9uJzogJ3N0ZERldmlhdGlvbicsXHJcbiAgICAgICAgJ3N0aXRjaHRpbGVzJzogJ3N0aXRjaFRpbGVzJyxcclxuICAgICAgICAnc3VyZmFjZXNjYWxlJzogJ3N1cmZhY2VTY2FsZScsXHJcbiAgICAgICAgJ3N5c3RlbWxhbmd1YWdlJzogJ3N5c3RlbUxhbmd1YWdlJyxcclxuICAgICAgICAndGFibGV2YWx1ZXMnOiAndGFibGVWYWx1ZXMnLFxyXG4gICAgICAgICd0YXJnZXR4JzogJ3RhcmdldFgnLFxyXG4gICAgICAgICd0YXJnZXR5JzogJ3RhcmdldFknLFxyXG4gICAgICAgICd0ZXh0bGVuZ3RoJzogJ3RleHRMZW5ndGgnLFxyXG4gICAgICAgICd2aWV3Ym94JzogJ3ZpZXdCb3gnLFxyXG4gICAgICAgICd2aWV3dGFyZ2V0JzogJ3ZpZXdUYXJnZXQnLFxyXG4gICAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJzogJ3hDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJzogJ3lDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd6b29tYW5kcGFuJzogJ3pvb21BbmRQYW4nXHJcbiAgICB9LFxyXG4gICAgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICd4bGluazphY3R1YXRlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6YXJjcm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmhyZWYnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6c2hvdyc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnRpdGxlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnR5cGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bWw6YmFzZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnYmFzZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOmxhbmcnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpzcGFjZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbG5zJzoge3ByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlN9LFxyXG4gICAgICAgICd4bWxuczp4bGluayc6IHtwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlN9XHJcblxyXG4gICAgfTtcclxuXHJcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxyXG52YXIgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICdhbHRnbHlwaCc6ICdhbHRHbHlwaCcsXHJcbiAgICAnYWx0Z2x5cGhkZWYnOiAnYWx0R2x5cGhEZWYnLFxyXG4gICAgJ2FsdGdseXBoaXRlbSc6ICdhbHRHbHlwaEl0ZW0nLFxyXG4gICAgJ2FuaW1hdGVjb2xvcic6ICdhbmltYXRlQ29sb3InLFxyXG4gICAgJ2FuaW1hdGVtb3Rpb24nOiAnYW5pbWF0ZU1vdGlvbicsXHJcbiAgICAnYW5pbWF0ZXRyYW5zZm9ybSc6ICdhbmltYXRlVHJhbnNmb3JtJyxcclxuICAgICdjbGlwcGF0aCc6ICdjbGlwUGF0aCcsXHJcbiAgICAnZmVibGVuZCc6ICdmZUJsZW5kJyxcclxuICAgICdmZWNvbG9ybWF0cml4JzogJ2ZlQ29sb3JNYXRyaXgnLFxyXG4gICAgJ2ZlY29tcG9uZW50dHJhbnNmZXInOiAnZmVDb21wb25lbnRUcmFuc2ZlcicsXHJcbiAgICAnZmVjb21wb3NpdGUnOiAnZmVDb21wb3NpdGUnLFxyXG4gICAgJ2ZlY29udm9sdmVtYXRyaXgnOiAnZmVDb252b2x2ZU1hdHJpeCcsXHJcbiAgICAnZmVkaWZmdXNlbGlnaHRpbmcnOiAnZmVEaWZmdXNlTGlnaHRpbmcnLFxyXG4gICAgJ2ZlZGlzcGxhY2VtZW50bWFwJzogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcclxuICAgICdmZWRpc3RhbnRsaWdodCc6ICdmZURpc3RhbnRMaWdodCcsXHJcbiAgICAnZmVmbG9vZCc6ICdmZUZsb29kJyxcclxuICAgICdmZWZ1bmNhJzogJ2ZlRnVuY0EnLFxyXG4gICAgJ2ZlZnVuY2InOiAnZmVGdW5jQicsXHJcbiAgICAnZmVmdW5jZyc6ICdmZUZ1bmNHJyxcclxuICAgICdmZWZ1bmNyJzogJ2ZlRnVuY1InLFxyXG4gICAgJ2ZlZ2F1c3NpYW5ibHVyJzogJ2ZlR2F1c3NpYW5CbHVyJyxcclxuICAgICdmZWltYWdlJzogJ2ZlSW1hZ2UnLFxyXG4gICAgJ2ZlbWVyZ2UnOiAnZmVNZXJnZScsXHJcbiAgICAnZmVtZXJnZW5vZGUnOiAnZmVNZXJnZU5vZGUnLFxyXG4gICAgJ2ZlbW9ycGhvbG9neSc6ICdmZU1vcnBob2xvZ3knLFxyXG4gICAgJ2Zlb2Zmc2V0JzogJ2ZlT2Zmc2V0JyxcclxuICAgICdmZXBvaW50bGlnaHQnOiAnZmVQb2ludExpZ2h0JyxcclxuICAgICdmZXNwZWN1bGFybGlnaHRpbmcnOiAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcclxuICAgICdmZXNwb3RsaWdodCc6ICdmZVNwb3RMaWdodCcsXHJcbiAgICAnZmV0aWxlJzogJ2ZlVGlsZScsXHJcbiAgICAnZmV0dXJidWxlbmNlJzogJ2ZlVHVyYnVsZW5jZScsXHJcbiAgICAnZm9yZWlnbm9iamVjdCc6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAnbGluZWFyZ3JhZGllbnQnOiAnbGluZWFyR3JhZGllbnQnLFxyXG4gICAgJ3JhZGlhbGdyYWRpZW50JzogJ3JhZGlhbEdyYWRpZW50JyxcclxuICAgICd0ZXh0cGF0aCc6ICd0ZXh0UGF0aCdcclxufTtcclxuXHJcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbnZhciBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7fTtcclxuXHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQklHXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQk9EWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DRU5URVJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ09ERV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ERF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ESVZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1CRURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSEVBRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLklNR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSVNUSU5HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FTlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVUQV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5OT0JSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk9MXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUFJFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlJVQlldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TTUFMTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TUEFOXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUk9OR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJJS0VdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VCXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UQUJMRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlZBUl0gPSB0cnVlO1xyXG5cclxuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbmV4cG9ydHMuY2F1c2VzRXhpdCA9IGZ1bmN0aW9uIChzdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkZPTlQgJiYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5TSVpFKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuRkFDRSkgIT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVYSVRTX0ZPUkVJR05fQ09OVEVOVFt0bl07XHJcbn07XHJcblxyXG4vL1Rva2VuIGFkanVzdG1lbnRzXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ck5hbWUpXHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUFt0b2tlbi50YWdOYW1lXTtcclxuXHJcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKVxyXG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5leHBvcnRzLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zKSB7XHJcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucywgYXR0cnMpIHtcclxuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gQVRUUlMuRU5DT0RJTkcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5zID09PSBOUy5TVkcgJiYgKHRuID09PSAkLkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSAkLkRFU0MgfHwgdG4gPT09ICQuVElUTEUpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTlMgPSBleHBvcnRzLk5BTUVTUEFDRVMgPSB7XHJcbiAgICBIVE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXHJcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcclxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcclxuICAgIFhMSU5LOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXHJcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxyXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcclxufTtcclxuXHJcbmV4cG9ydHMuQVRUUlMgPSB7XHJcbiAgICBUWVBFOiAndHlwZScsXHJcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxyXG4gICAgRU5DT0RJTkc6ICdlbmNvZGluZycsXHJcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxyXG4gICAgTkFNRTogJ25hbWUnLFxyXG4gICAgQ09MT1I6ICdjb2xvcicsXHJcbiAgICBGQUNFOiAnZmFjZScsXHJcbiAgICBTSVpFOiAnc2l6ZSdcclxufTtcclxuXHJcbnZhciAkID0gZXhwb3J0cy5UQUdfTkFNRVMgPSB7XHJcbiAgICBBOiAnYScsXHJcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXHJcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcclxuICAgIEFQUExFVDogJ2FwcGxldCcsXHJcbiAgICBBUkVBOiAnYXJlYScsXHJcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXHJcbiAgICBBU0lERTogJ2FzaWRlJyxcclxuXHJcbiAgICBCOiAnYicsXHJcbiAgICBCQVNFOiAnYmFzZScsXHJcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcclxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcclxuICAgIEJJRzogJ2JpZycsXHJcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXHJcbiAgICBCT0RZOiAnYm9keScsXHJcbiAgICBCUjogJ2JyJyxcclxuICAgIEJVVFRPTjogJ2J1dHRvbicsXHJcblxyXG4gICAgQ0FQVElPTjogJ2NhcHRpb24nLFxyXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcclxuICAgIENPREU6ICdjb2RlJyxcclxuICAgIENPTDogJ2NvbCcsXHJcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcclxuICAgIENPTU1BTkQ6ICdjb21tYW5kJyxcclxuXHJcbiAgICBERDogJ2RkJyxcclxuICAgIERFU0M6ICdkZXNjJyxcclxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcclxuICAgIERJQUxPRzogJ2RpYWxvZycsXHJcbiAgICBESVI6ICdkaXInLFxyXG4gICAgRElWOiAnZGl2JyxcclxuICAgIERMOiAnZGwnLFxyXG4gICAgRFQ6ICdkdCcsXHJcblxyXG4gICAgRU06ICdlbScsXHJcbiAgICBFTUJFRDogJ2VtYmVkJyxcclxuXHJcbiAgICBGSUVMRFNFVDogJ2ZpZWxkc2V0JyxcclxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcclxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXHJcbiAgICBGT05UOiAnZm9udCcsXHJcbiAgICBGT09URVI6ICdmb290ZXInLFxyXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgIEZPUk06ICdmb3JtJyxcclxuICAgIEZSQU1FOiAnZnJhbWUnLFxyXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXHJcblxyXG4gICAgSDE6ICdoMScsXHJcbiAgICBIMjogJ2gyJyxcclxuICAgIEgzOiAnaDMnLFxyXG4gICAgSDQ6ICdoNCcsXHJcbiAgICBINTogJ2g1JyxcclxuICAgIEg2OiAnaDYnLFxyXG4gICAgSEVBRDogJ2hlYWQnLFxyXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcclxuICAgIEhHUk9VUDogJ2hncm91cCcsXHJcbiAgICBIUjogJ2hyJyxcclxuICAgIEhUTUw6ICdodG1sJyxcclxuXHJcbiAgICBJOiAnaScsXHJcbiAgICBJTUc6ICdpbWcnLFxyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBJTlBVVDogJ2lucHV0JyxcclxuICAgIElGUkFNRTogJ2lmcmFtZScsXHJcbiAgICBJU0lOREVYOiAnaXNpbmRleCcsXHJcblxyXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcclxuXHJcbiAgICBMQUJFTDogJ2xhYmVsJyxcclxuICAgIExJOiAnbGknLFxyXG4gICAgTElOSzogJ2xpbmsnLFxyXG4gICAgTElTVElORzogJ2xpc3RpbmcnLFxyXG5cclxuICAgIE1BSU46ICdtYWluJyxcclxuICAgIE1BTElHTk1BUks6ICdtYWxpZ25tYXJrJyxcclxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcclxuICAgIE1BVEg6ICdtYXRoJyxcclxuICAgIE1FTlU6ICdtZW51JyxcclxuICAgIE1FTlVJVEVNOiAnbWVudWl0ZW0nLFxyXG4gICAgTUVUQTogJ21ldGEnLFxyXG4gICAgTUdMWVBIOiAnbWdseXBoJyxcclxuICAgIE1JOiAnbWknLFxyXG4gICAgTU86ICdtbycsXHJcbiAgICBNTjogJ21uJyxcclxuICAgIE1TOiAnbXMnLFxyXG4gICAgTVRFWFQ6ICdtdGV4dCcsXHJcblxyXG4gICAgTkFWOiAnbmF2JyxcclxuICAgIE5PQlI6ICdub2JyJyxcclxuICAgIE5PRlJBTUVTOiAnbm9mcmFtZXMnLFxyXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxyXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXHJcblxyXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcclxuICAgIE9MOiAnb2wnLFxyXG4gICAgT1BUR1JPVVA6ICdvcHRncm91cCcsXHJcbiAgICBPUFRJT046ICdvcHRpb24nLFxyXG5cclxuICAgIFA6ICdwJyxcclxuICAgIFBBUkFNOiAncGFyYW0nLFxyXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcclxuICAgIFBSRTogJ3ByZScsXHJcblxyXG4gICAgUlA6ICdycCcsXHJcbiAgICBSVDogJ3J0JyxcclxuICAgIFJVQlk6ICdydWJ5JyxcclxuXHJcbiAgICBTOiAncycsXHJcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxyXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxyXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcclxuICAgIFNPVVJDRTogJ3NvdXJjZScsXHJcbiAgICBTTUFMTDogJ3NtYWxsJyxcclxuICAgIFNQQU46ICdzcGFuJyxcclxuICAgIFNUUklLRTogJ3N0cmlrZScsXHJcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxyXG4gICAgU1RZTEU6ICdzdHlsZScsXHJcbiAgICBTVUI6ICdzdWInLFxyXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxyXG4gICAgU1VQOiAnc3VwJyxcclxuXHJcbiAgICBUQUJMRTogJ3RhYmxlJyxcclxuICAgIFRCT0RZOiAndGJvZHknLFxyXG4gICAgVEVNUExBVEU6ICd0ZW1wbGF0ZScsXHJcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcclxuICAgIFRGT09UOiAndGZvb3QnLFxyXG4gICAgVEQ6ICd0ZCcsXHJcbiAgICBUSDogJ3RoJyxcclxuICAgIFRIRUFEOiAndGhlYWQnLFxyXG4gICAgVElUTEU6ICd0aXRsZScsXHJcbiAgICBUUjogJ3RyJyxcclxuICAgIFRSQUNLOiAndHJhY2snLFxyXG4gICAgVFQ6ICd0dCcsXHJcblxyXG4gICAgVTogJ3UnLFxyXG4gICAgVUw6ICd1bCcsXHJcblxyXG4gICAgU1ZHOiAnc3ZnJyxcclxuXHJcbiAgICBWQVI6ICd2YXInLFxyXG5cclxuICAgIFdCUjogJ3dicicsXHJcblxyXG4gICAgWE1QOiAneG1wJ1xyXG59O1xyXG5cclxudmFyIFNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7fTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFERFJFU1NdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFQUExFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJUSUNMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVNJREVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VGT05UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CR1NPVU5EXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlVUVE9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DRU5URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERVRBSUxTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRExdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklFTERTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR0NBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR1VSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9PVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT1JNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgxXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg0XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFRNTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSUZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTUddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklOUFVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JU0lOREVYXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElOS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElTVElOR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFJTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFSUVVFRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVUlURU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FVEFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5BVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9GUkFNRVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QQVJBTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUExBSU5URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VDVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VMRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TT1VSQ0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNUWUxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVU1NQVJZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQUJMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URU1QTEFURV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVYVEFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRGT09UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJBQ0tdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlVMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5XQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlhNUF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1JXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1PXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1TXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLkFOTk9UQVRJT05fWE1MXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR10gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuRk9SRUlHTl9PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuREVTQ10gPSB0cnVlO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9ICdcXHVGRkZEJztcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVFMgPSB7XHJcbiAgICBFT0Y6IC0xLFxyXG4gICAgTlVMTDogMHgwMCxcclxuICAgIFRBQlVMQVRJT046IDB4MDksXHJcbiAgICBDQVJSSUFHRV9SRVRVUk46IDB4MEQsXHJcbiAgICBMSU5FX0ZFRUQ6IDB4MEEsXHJcbiAgICBGT1JNX0ZFRUQ6IDB4MEMsXHJcbiAgICBTUEFDRTogMHgyMCxcclxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXHJcbiAgICBRVU9UQVRJT05fTUFSSzogMHgyMixcclxuICAgIE5VTUJFUl9TSUdOOiAweDIzLFxyXG4gICAgQU1QRVJTQU5EOiAweDI2LFxyXG4gICAgQVBPU1RST1BIRTogMHgyNyxcclxuICAgIEhZUEhFTl9NSU5VUzogMHgyRCxcclxuICAgIFNPTElEVVM6IDB4MkYsXHJcbiAgICBESUdJVF8wOiAweDMwLFxyXG4gICAgRElHSVRfOTogMHgzOSxcclxuICAgIFNFTUlDT0xPTjogMHgzQixcclxuICAgIExFU1NfVEhBTl9TSUdOOiAweDNDLFxyXG4gICAgRVFVQUxTX1NJR046IDB4M0QsXHJcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzRSxcclxuICAgIFFVRVNUSU9OX01BUks6IDB4M0YsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0E6IDB4NDEsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1g6IDB4NTgsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1o6IDB4NUEsXHJcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXHJcbiAgICBMQVRJTl9TTUFMTF9BOiAweDYxLFxyXG4gICAgTEFUSU5fU01BTExfRjogMHg2NixcclxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXHJcbiAgICBMQVRJTl9TTUFMTF9aOiAweDdBLFxyXG4gICAgQk9NOiAweEZFRkYsXHJcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4RkZGRFxyXG59O1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcclxuICAgIERBU0hfREFTSF9TVFJJTkc6IFsweDJELCAweDJEXSwgLy8tLVxyXG4gICAgRE9DVFlQRV9TVFJJTkc6IFsweDQ0LCAweDRGLCAweDQzLCAweDU0LCAweDU5LCAweDUwLCAweDQ1XSwgLy9ET0NUWVBFXHJcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDVCLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDVCXSwgLy9bQ0RBVEFbXHJcbiAgICBDREFUQV9FTkRfU1RSSU5HOiBbMHg1RCwgMHg1RCwgMHgzRV0sIC8vXV0+XHJcbiAgICBTQ1JJUFRfU1RSSU5HOiBbMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NF0sIC8vc2NyaXB0XHJcbiAgICBQVUJMSUNfU1RSSU5HOiBbMHg1MCwgMHg1NSwgMHg0MiwgMHg0QywgMHg0OSwgMHg0M10sIC8vUFVCTElDXHJcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0RF0gLy9TWVNURU1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBvcHRPYmopIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhvcHRPYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xyXG4gICAgfSwge30pO1xyXG59O1xyXG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNlciA9IHJlcXVpcmUoJy4uL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpLFxyXG4gICAgUGFyc2luZ1VuaXQgPSByZXF1aXJlKCcuL3BhcnNpbmdfdW5pdCcpO1xyXG5cclxuLy9BUElcclxuZXhwb3J0cy5wYXJzZURvY3VtZW50ID0gZnVuY3Rpb24gKGh0bWwsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpLFxyXG4gICAgICAgIHBhcnNpbmdVbml0ID0gbmV3IFBhcnNpbmdVbml0KHBhcnNlcik7XHJcblxyXG4gICAgLy9OT1RFOiBvdmVycmlkZSBwYXJzZXIgbG9vcCBtZXRob2RcclxuICAgIHBhcnNlci5fcnVuUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFwYXJzaW5nVW5pdC5zdXNwZW5kZWQgJiYgIXRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICBwYXJzaW5nVW5pdC5jYWxsYmFjayh0aGlzLmRvY3VtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiB3YWl0IHdoaWxlIHBhcnNlckNvbnRyb2xsZXIgd2lsbCBiZSBhZG9wdGVkIGJ5IGNhbGxpbmcgY29kZSwgdGhlblxyXG4gICAgLy9zdGFydCBwYXJzaW5nXHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzZXIucGFyc2UoaHRtbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2luZ1VuaXQ7XHJcbn07XHJcblxyXG5leHBvcnRzLnBhcnNlSW5uZXJIdG1sID0gZnVuY3Rpb24gKGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50KTtcclxufTtcbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWtiMjAxTDI1dlpHVmZiVzlrZFd4bGN5OXdZWEp6WlRVdmJHbGlMMnB6Wkc5dEwycHpaRzl0WDNCaGNuTmxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJbmRYTmxJSE4wY21samRDYzdYSEpjYmx4eVhHNTJZWElnVUdGeWMyVnlJRDBnY21WeGRXbHlaU2duTGk0dmRISmxaVjlqYjI1emRISjFZM1JwYjI0dmNHRnljMlZ5Snlrc1hISmNiaUFnSUNCUVlYSnphVzVuVlc1cGRDQTlJSEpsY1hWcGNtVW9KeTR2Y0dGeWMybHVaMTkxYm1sMEp5azdYSEpjYmx4eVhHNHZMMEZRU1Z4eVhHNWxlSEJ2Y25SekxuQmhjbk5sUkc5amRXMWxiblFnUFNCbWRXNWpkR2x2YmlBb2FIUnRiQ3dnZEhKbFpVRmtZWEIwWlhJcElIdGNjbHh1SUNBZ0lDOHZUazlVUlRvZ2RHaHBjeUJ6YUc5MWJHUWdZbVVnY21WbGJuUnlZVzUwTENCemJ5QjNaU0JqY21WaGRHVWdibVYzSUhCaGNuTmxjaUJvWlhKbFhISmNiaUFnSUNCMllYSWdjR0Z5YzJWeUlEMGdibVYzSUZCaGNuTmxjaWgwY21WbFFXUmhjSFJsY2lrc1hISmNiaUFnSUNBZ0lDQWdjR0Z5YzJsdVoxVnVhWFFnUFNCdVpYY2dVR0Z5YzJsdVoxVnVhWFFvY0dGeWMyVnlLVHRjY2x4dVhISmNiaUFnSUNBdkwwNVBWRVU2SUc5MlpYSnlhV1JsSUhCaGNuTmxjaUJzYjI5d0lHMWxkR2h2WkZ4eVhHNGdJQ0FnY0dGeWMyVnlMbDl5ZFc1UVlYSnphVzVuVEc5dmNDQTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQndZWEp6YVc1blZXNXBkQzV3WVhKemFXNW5URzl2Y0V4dlkyc2dQU0IwY25WbE8xeHlYRzVjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVhCaGNuTnBibWRWYm1sMExuTjFjM0JsYm1SbFpDQW1KaUFoZEdocGN5NXpkRzl3Y0dWa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbDlwZEdWeVlYUmxVR0Z5YzJsdVoweHZiM0FvS1R0Y2NseHVYSEpjYmlBZ0lDQWdJQ0FnY0dGeWMybHVaMVZ1YVhRdWNHRnljMmx1WjB4dmIzQk1iMk5ySUQwZ1ptRnNjMlU3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbk4wYjNCd1pXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhjbk5wYm1kVmJtbDBMbU5oYkd4aVlXTnJLSFJvYVhNdVpHOWpkVzFsYm5RcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1WEhKY2JpQWdJQ0F2TDA1UFZFVTZJSGRoYVhRZ2QyaHBiR1VnY0dGeWMyVnlRMjl1ZEhKdmJHeGxjaUIzYVd4c0lHSmxJR0ZrYjNCMFpXUWdZbmtnWTJGc2JHbHVaeUJqYjJSbExDQjBhR1Z1WEhKY2JpQWdJQ0F2TDNOMFlYSjBJSEJoY25OcGJtZGNjbHh1SUNBZ0lIQnliMk5sYzNNdWJtVjRkRlJwWTJzb1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhCaGNuTmxjaTV3WVhKelpTaG9kRzFzS1R0Y2NseHVJQ0FnSUgwcE8xeHlYRzVjY2x4dUlDQWdJSEpsZEhWeWJpQndZWEp6YVc1blZXNXBkRHRjY2x4dWZUdGNjbHh1WEhKY2JtVjRjRzl5ZEhNdWNHRnljMlZKYm01bGNraDBiV3dnUFNCbWRXNWpkR2x2YmlBb2FXNXVaWEpJZEcxc0xDQmpiMjUwWlhoMFJXeGxiV1Z1ZEN3Z2RISmxaVUZrWVhCMFpYSXBJSHRjY2x4dUlDQWdJQzh2VGs5VVJUb2dkR2hwY3lCemFHOTFiR1FnWW1VZ2NtVmxiblJ5WVc1MExDQnpieUIzWlNCamNtVmhkR1VnYm1WM0lIQmhjbk5sY2lCb1pYSmxYSEpjYmlBZ0lDQjJZWElnY0dGeWMyVnlJRDBnYm1WM0lGQmhjbk5sY2loMGNtVmxRV1JoY0hSbGNpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObGNpNXdZWEp6WlVaeVlXZHRaVzUwS0dsdWJtVnlTSFJ0YkN3Z1kyOXVkR1Y0ZEVWc1pXMWxiblFwTzF4eVhHNTlPeUpkZlE9PSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzaW5nVW5pdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLl9zdGF0ZUd1YXJkID0gZnVuY3Rpb24gKHN1c3BlbmQpIHtcclxuICAgIGlmICh0aGlzLnN1c3BlbmRlZCAmJiBzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIGVsc2UgaWYgKCF0aGlzLnN1c3BlbmRlZCAmJiAhc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHN1c3BlbmQ7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQoZmFsc2UpO1xyXG5cclxuICAgIC8vTk9URTogZG9uJ3QgZW50ZXIgcGFyc2luZyBsb29wIGlmIGl0IGlzIGxvY2tlZC4gV2l0aG91dCB0aGlzIGxvY2sgX3J1blBhcnNpbmdMb29wKCkgbWF5IGJlIGNhbGxlZFxyXG4gICAgLy93aGlsZSBwYXJzaW5nIGxvb3AgaXMgc3RpbGwgcnVubmluZy4gRS5nLiB3aGVuIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICBpZiAoIXRoaXMucGFyc2luZ0xvb3BMb2NrKVxyXG4gICAgICAgIHRoaXMucGFyc2VyLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvY3VtZW50V3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLnByZXByb2Nlc3Nvci53cml0ZShodG1sKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5oYW5kbGVTY3JpcHRzID0gZnVuY3Rpb24gKHNjcmlwdEhhbmRsZXIpIHtcclxuICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGVuY29kZUh0bWxFbnRpdGllczogdHJ1ZVxufTtcblxuLy9Fc2NhcGluZyByZWdleGVzXG52YXIgQU1QX1JFR0VYID0gLyYvZyxcbiAgICBOQlNQX1JFR0VYID0gL1xcdTAwYTAvZyxcbiAgICBET1VCTEVfUVVPVEVfUkVHRVggPSAvXCIvZyxcbiAgICBMVF9SRUdFWCA9IC88L2csXG4gICAgR1RfUkVHRVggPSAvPi9nO1xuXG4vL0VzY2FwZSBzdHJpbmdcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIsIGF0dHJNb2RlKSB7XG4gICAgc3RyID0gc3RyXG4gICAgICAgIC5yZXBsYWNlKEFNUF9SRUdFWCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2UoTkJTUF9SRUdFWCwgJyZuYnNwOycpO1xuXG4gICAgaWYgKGF0dHJNb2RlKVxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcblxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHJcbiAgICAgICAgICAgIC5yZXBsYWNlKExUX1JFR0VYLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZShHVF9SRUdFWCwgJyZndDsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5cbi8vRW5xdW90ZSBkb2N0eXBlIElEXG5cblxuXG4vL1NlcmlhbGl6ZXJcbnZhciBTZXJpYWxpemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xufTtcblxuXG4vL0FQSVxuU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB0aGlzLmh0bWwgPSAnJztcbiAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbn07XG5cblxuLy9JbnRlcm5hbHNcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDaGlsZE5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5vZGUpIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBjbkxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplRWxlbWVudChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplVGV4dE5vZGUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKSxcbiAgICAgICAgcXVhbGlmaWVkVG4gPSAobnMgPT09IE5TLkhUTUwgfHwgbnMgPT09IE5TLlNWRyB8fCBucyA9PT0gTlMuTUFUSE1MKSA/IHRuIDogKG5zICsgJzonICsgdG4pO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIHF1YWxpZmllZFRuO1xuICAgIHRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSk7XG4gICAgdGhpcy5odG1sICs9ICc+JztcblxuICAgIGlmICh0biAhPT0gJC5BUkVBICYmIHRuICE9PSAkLkJBU0UgJiYgdG4gIT09ICQuQkFTRUZPTlQgJiYgdG4gIT09ICQuQkdTT1VORCAmJiB0biAhPT0gJC5CUiAmJiB0biAhPT0gJC5CUiAmJlxuICAgICAgICB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuRU1CRUQgJiYgdG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuSFIgJiYgdG4gIT09ICQuSU1HICYmIHRuICE9PSAkLklOUFVUICYmXG4gICAgICAgIHRuICE9PSAkLktFWUdFTiAmJiB0biAhPT0gJC5MSU5LICYmIHRuICE9PSAkLk1FTlVJVEVNICYmIHRuICE9PSAkLk1FVEEgJiYgdG4gIT09ICQuUEFSQU0gJiYgdG4gIT09ICQuU09VUkNFICYmXG4gICAgICAgIHRuICE9PSAkLlRSQUNLICYmIHRuICE9PSAkLldCUikge1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5QUkUgfHwgdG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuTElTVElORykge1xuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQobm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShmaXJzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQoZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFswXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZE5vZGVzSG9sZGVyID0gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhub2RlKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTtcblxuICAgICAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKGNoaWxkTm9kZXNIb2xkZXIpO1xuICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHF1YWxpZmllZFRuICsgJz4nO1xuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5vZGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLFxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGF0dHIudmFsdWUsIHRydWUpIDogYXR0ci52YWx1ZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJyAnO1xuXG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbDonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUxOUykge1xuICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ3htbG5zJylcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbG5zOic7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWExJTkspXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZXNwYWNlICsgJzonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIHRoaXMuaHRtbCArPSAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSksXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKSxcbiAgICAgICAgcGFyZW50VG4gPSB2b2lkIDA7XG5cbiAgICBpZiAocGFyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpKVxuICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuXG4gICAgaWYgKHBhcmVudFRuID09PSAkLlNUWUxFIHx8IHBhcmVudFRuID09PSAkLlNDUklQVCB8fCBwYXJlbnRUbiA9PT0gJC5YTVAgfHwgcGFyZW50VG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHwgcGFyZW50VG4gPT09ICQuTk9GUkFNRVMgfHwgcGFyZW50VG4gPT09ICQuUExBSU5URVhUIHx8IHBhcmVudFRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMuaHRtbCArPSBjb250ZW50O1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sICs9IHRoaXMub3B0aW9ucy5lbmNvZGVIdG1sRW50aXRpZXMgPyBlc2NhcGVTdHJpbmcoY29udGVudCwgZmFsc2UpIDogY29udGVudDtcbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpLFxuICAgICAgICBwdWJsaWNJZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkKG5vZGUpLFxuICAgICAgICBzeXN0ZW1JZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkKG5vZGUpO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIERvY3R5cGUuc2VyaWFsaXplQ29udGVudChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpICsgJz4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBUb2tlbml6ZXJQcm94eSA9IHJlcXVpcmUoJy4vdG9rZW5pemVyX3Byb3h5JyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKTtcblxuLy9EZWZhdWx0IG9wdGlvbnNcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2Vcbn07XG5cbi8vU2tpcHBpbmcgaGFuZGxlclxuZnVuY3Rpb24gc2tpcCgpIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuLy9TaW1wbGVBcGlQYXJzZXJcbnZhciBTaW1wbGVBcGlQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoYW5kbGVycywgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIGRvY3R5cGU6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmRvY3R5cGUpLFxuICAgICAgICBzdGFydFRhZzogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuc3RhcnRUYWcpLFxuICAgICAgICBlbmRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmVuZFRhZyksXG4gICAgICAgIHRleHQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnRleHQpLFxuICAgICAgICBjb21tZW50OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5jb21tZW50KVxuICAgIH07XG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl93cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgdmFyIHBhcnNlciA9IHRoaXM7XG5cbiAgICBoYW5kbGVyID0gaGFuZGxlciB8fCBza2lwO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChwYXJzZXIuY3VycmVudFRva2VuTG9jYXRpb24pO1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseShoYW5kbGVyLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vQVBJXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgdG9rZW4gPSBudWxsO1xuXG4gICAgdGhpcy5fcmVzZXQoaHRtbCk7XG5cbiAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXJQcm94eS5nZXROZXh0VG9rZW4oKTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9ICh0aGlzLnBlbmRpbmdUZXh0IHx8ICcnKSArIHRva2VuLmNoYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0UGVuZGluZ1RleHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU4pO1xufTtcblxuLy9JbnRlcm5hbHNcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLnN0YXJ0VGFnKHRva2VuLnRhZ05hbWUsIHRva2VuLmF0dHJzLCB0b2tlbi5zZWxmQ2xvc2luZyk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5lbmRUYWcodG9rZW4udGFnTmFtZSk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5jb21tZW50KHRva2VuLmRhdGEpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZG9jdHlwZSh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpO1xuXG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdGhpcy50b2tlbml6ZXJQcm94eSA9IG5ldyBUb2tlbml6ZXJQcm94eShodG1sLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSBudWxsO1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fZW1pdFBlbmRpbmdUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMudGV4dCh0aGlzLnBlbmRpbmdUZXh0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XG4gICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG5cbi8vVG9rZW5pemVyIHByb3h5XG4vL05PVEU6IHRoaXMgcHJveHkgc2ltdWxhdGVzIGFkanVzdG1lbnQgb2YgdGhlIFRva2VuaXplciB3aGljaCBwZXJmb3JtZWQgYnkgc3RhbmRhcmQgcGFyc2VyIGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbi5cbnZhciBUb2tlbml6ZXJQcm94eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrID0gW107XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCA9IC0xO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG51bGw7XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gZmFsc2U7XG59O1xuXG4vL0FQSVxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFRhZ1Rva2VuKHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVFbmRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gJiYgdGhpcy5pbkZvcmVpZ25Db250ZW50KSB7XG4gICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xuICAgICAgICB0b2tlbi5jaGFycyA9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn07XG5cbi8vTmFtZXNwYWNlIHN0YWNrIG11dGF0aW9uc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnRlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wKys7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wdXNoKG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBuYW1lc3BhY2UgIT09IE5TLkhUTUw7XG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wLS07XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wb3AoKTtcblxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcF07XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG4vL1Rva2VuIGhhbmRsZXJzXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2Vuc3VyZVRva2VuaXplck1vZGUgPSBmdW5jdGlvbiAodG4pIHtcbiAgICBpZiAodG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuVElUTEUpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLklGUkFNRSB8fCB0biA9PT0gJC5YTVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcbiAgICB9XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2hhbmRsZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgdGhpcy5fZW50ZXJOYW1lc3BhY2UoTlMuU1ZHKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLk1BVEhNTCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmNhdXNlc0V4aXQodG9rZW4pKVxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuXG4gICAgICAgICAgICBlbHNlIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLkhUTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZW5zdXJlVG9rZW5pemVyTW9kZSh0bik7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB2YXIgcHJldmlvdXNOcyA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcCAtIDFdO1xuXG4gICAgICAgIC8vTk9URTogY2hlY2sgZm9yIGV4aXQgZnJvbSBpbnRlZ3JhdGlvbiBwb2ludFxuICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcykgfHxcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLkRBVEE7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoKHRuID09PSAkLlNWRyAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLlNWRykgfHxcbiAgICAgICAgICAgICAodG4gPT09ICQuTUFUSCAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLk1BVEhNTCkpXG4gICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKHRva2VuaXplcikge1xyXG4gICAgLy9OT1RFOiBvYnRhaW4gVG9rZW5pemVyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXHJcbiAgICB2YXIgdG9rZW5pemVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG9rZW5pemVyKTtcclxuXHJcbiAgICB0b2tlbml6ZXIudG9rZW5TdGFydExvYyA9IC0xO1xyXG5cclxuICAgIC8vTk9URTogYWRkIGxvY2F0aW9uIGluZm8gYnVpbGRlciBtZXRob2RcclxuICAgIHRva2VuaXplci5fYXR0YWNoTG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgdG9rZW4ubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnRva2VuU3RhcnRMb2MsXHJcbiAgICAgICAgICAgIGVuZDogLTFcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGNyZWF0aW9uIG1ldGhvZHMgYW5kIGF0dGFjaCBsb2NhdGlvbiBvYmplY3RzXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlU3RhcnRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUVuZFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUVuZFRhZ1Rva2VuLmNhbGwodGhpcywgdGFnTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDb21tZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZURvY3R5cGVUb2tlbiA9IGZ1bmN0aW9uIChkb2N0eXBlTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlRG9jdHlwZVRva2VuLmNhbGwodGhpcywgZG9jdHlwZU5hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUNoYXJhY3RlclRva2VuLmNhbGwodGhpcywgdHlwZSwgY2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggdG9rZW4gZW1pc3Npb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgZW5kIGxvY2F0aW9uXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXHJcbiAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbi5zdGFydDtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zICsgMTtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fZW1pdEN1cnJlbnRUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGNoYXJhY3RlciB0b2tlbiBhbmQgaXQncyBsb2NhdGlvbiB3YXNuJ3Qgc2V0IGluIHRoZSBfZW1pdEN1cnJlbnRUb2tlbigpLFxyXG4gICAgICAgIC8vdGhlbiBzZXQgaXQncyBsb2NhdGlvbiBhdCB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IG5lZWQgdG8gaW5jcmVtZW50IHByZXByb2Nlc3NvciBwb3NpdGlvbiwgc2luY2UgY2hhcmFjdGVyIHRva2VuXHJcbiAgICAgICAgICAgIC8vZW1pc3Npb24gaXMgYWx3YXlzIGZvcmNlZCBieSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRva2VuIGhlcmUuXHJcbiAgICAgICAgICAgIC8vU28sIHdlIGFscmVhZHkgaGF2ZSBhZHZhbmNlZCBwb3NpdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCBpbml0aWFsIHN0YXRlcyBmb3IgZWFjaCBtb2RlIHRvIG9idGFpbiB0b2tlbiBzdGFydCBwb3NpdGlvblxyXG4gICAgT2JqZWN0LmtleXModG9rZW5pemVyUHJvdG8uTU9ERSlcclxuXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobW9kZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplclByb3RvLk1PREVbbW9kZU5hbWVdO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xyXG4gICAgICAgICAgICB0b2tlbml6ZXJbc3RhdGVdID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuU3RhcnRMb2MgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XHJcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXJQcm90b1tzdGF0ZV0uY2FsbCh0aGlzLCBjcCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vTk9URTogdGhpcyBmaWxlIGNvbnRhaW5zIGF1dG8gZ2VuZXJhdGVkIHRyaWUgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCBmb3IgbmFtZWQgZW50aXR5IHJlZmVyZW5jZXMgY29uc3VtcHRpb25cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzIGFuZFxyXG4vL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzLmh0bWwjbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMpXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMHg0MToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxOTNdfX0sIGM6IFsxOTNdfX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNThdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxOTRdfX0sIGM6IFsxOTRdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQwXX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk4XX19LCBjOiBbMTk4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkyXX19LCBjOiBbMTkyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxM119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNTZdfX19fX19fX19LCAweDREOiB7bDogezB4NTA6IHtsOiB7MHgzQjoge2M6IFszOF19fSwgYzogWzM4XX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MzVdfX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0Njoge2w6IHsweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODI4OV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk3XX19LCBjOiBbMTk3XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTk1XX19LCBjOiBbMTk1XX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxOTZdfX0sIGM6IFsxOTZdfX19fX19fSxcclxuICAgIDB4NjE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjI1XX19LCBjOiBbMjI1XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU5XX19fX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODc2Nl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2N119fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NzY2LCA4MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIyNl19fSwgYzogWzIyNl19fX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX0sIGM6IFsxODBdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcyXX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjMwXX19LCBjOiBbMjMwXX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs4Mjg5XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNF19fSwgYzogWzIyNF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzM6IHtsOiB7MHg3OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODUwMV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDVdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU3XX19fX19LCAweDZDOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDgxNV19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM3XX19fX19fX0sIDB4M0I6IHtjOiBbODc0M119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg0MF19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwODQyXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODczNl19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjBdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM2XX19fX19LCAweDZEOiB7bDogezB4NzM6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDY2NF19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDY2NV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDY2Nl19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY2N119fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2OF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDY2OV19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY3MF19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsxMDY3MV19fX19fSwgMHgzQjoge2M6IFs4NzM3XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzVdfSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg5NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODczOF19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzE5N119fX19fSwgMHg3QToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwODRdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NjNdfX19fX19fX19LCAweDNCOiB7YzogWzg3NzZdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc3OF19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsyMjldfX0sIGM6IFsyMjldfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTBdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX0sIDB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgxXX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyN119fSwgYzogWzIyN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjI4XX19LCBjOiBbMjI4XX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY5XX19fX19fX19fX19LFxyXG4gICAgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5MDldfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5M119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjVdfSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk2NV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MV19LCAweDc0OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0Ml19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzgwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDczXX19fX19LCAweDY0OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NTddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjcyXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwMTRdfX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDZdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODUwMl19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5NV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYxXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU2XX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTA5XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDdBOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkyNTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDMxOiB7bDogezB4MzI6IHtsOiB7MHgzQjoge2M6IFs5NjE4XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTddfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTldfX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA4XX19fX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNjEsIDg0MjFdfSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDEsIDg0MjFdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NzZdfX19fX19fSwgMHg0RToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0N119fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4NjldfSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDRdfX19fX19fX19LCAweDc4OiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA2OTddfX19fX19fSwgMHg2NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTQ4OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU3XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk0ODRdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1NF19fX19fSwgMHg0NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTU1OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NTVdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk0NzJdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk1MTZdfX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbOTU3M119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTI0XX19fSwgMHg1NToge2w6IHsweDNCOiB7YzogWzk1NzZdfX19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTUyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTcyXX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzRdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3NV19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc3XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjRdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0OTZdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDkyXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjBdfX19fX0sIDB4NTU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NjRdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2NV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTYxXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjJdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NDc0XX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTMyXX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1NzhdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTUwOF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTY5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1MDBdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2Nl19fX19fSwgMHg1Njoge2w6IHsweDNCOiB7YzogWzk1NTNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk1NzldfX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU4MF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTcwXX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NzFdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2N119fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTY4XX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTY2XX19LCBjOiBbMTY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTFdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODI3MV19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2OTNdfX19LCAweDNCOiB7YzogWzkyXX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDE4NF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODIyNl19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MjZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19LFxyXG4gICAgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODNdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDFdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1N119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE0XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjFdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX0sXHJcbiAgICAweDQzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2Ml19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTE0XX0sIDB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDY5OiB7bDogezB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5M119fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk5XX19LCBjOiBbMTk5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjZdfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2M119fX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzVdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX19fSwgMHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg2OF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MV19fX19fX19LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NTA6IHtsOiB7MHg1OToge2w6IHsweDNCOiB7YzogWzE2OV19fSwgYzogWzE2OV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjZdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NDM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19LCAweDNCOiB7YzogWzg5MTVdfX19fX19fSxcclxuICAgIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjYzXX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODIwXX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI3XX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyM119fX19fX19LCAweDNCOiB7YzogWzg3NDVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxNl19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NSwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODI1N119fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODI5XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2OV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzFdfX0sIGM6IFsyMzFdfX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNjVdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOF19LCAweDczOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzMl19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI2N119fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTg0XX19LCBjOiBbMTg0XX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTYyXX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fX19fX19fX19fX0sIGM6IFsxNjJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Nl19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk1XX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDAzXX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjddfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzEwXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTFdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4NThdfX19fX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX19LCAweDUzOiB7bDogezB4M0I6IHtjOiBbOTQxNl19fX19fX19fX19fSwgMHgzQjoge2M6IFs5Njc1XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDY5MV19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjkwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI3XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyN119fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs1OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs0NF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjRdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MDVdfSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyOF19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX19fX19fX19fSwgMHg3ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxXX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ4XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNjldfSwgMHg3Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3MV19fX19fX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjI5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTAwMDddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NTldfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYxXX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjBdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDNdfX19fX19fX19LCAweDc1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTQ5XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzBdfSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTU3XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODIyXX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNl19fX19fX19LCAweDNCOiB7YzogWzg3NDZdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODIxXX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NiwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMxXX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDU1Nl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODkyN119fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY0XX19LCBjOiBbMTY0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMF19fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTNdfX19fX19fX19LCAweDc5OiB7bDogezB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs5MDA1XX19fX19fX19fX19fX0sXHJcbiAgICAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODUwNF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMDhdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4NjddfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fSwgMHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNzFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Nl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19LCAweDNCOiB7YzogWzg1MThdfSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTc2XX19LCBjOiBbMTc2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjczXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5N119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODY0M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTAwXX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk0Nl19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTAzXX19fX19fX19fX19fX19fX0sIGM6IFsyNDddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA2XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTczXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODc2MF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NjVdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODY0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3Ml19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTNdfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwOV19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3NDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzNdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ1XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA3XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2Ml19fX19fX19fX19fX19LCAweDdBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzldfX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjVdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA5XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDRdfX19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2ODoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA1MTNdfX19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzExXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3MV19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNzI5XX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjNdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDEyXX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3ODRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTVdfX19fX19fSwgMHgzQjoge2M6IFs4NTk1XX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjkzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzc4NV19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3Nl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MF19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgyXX19fX19fX0sIDB4M0I6IHtjOiBbODYzN119fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkxXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODNdfX19fX19fSwgMHgzQjoge2M6IFs4NjQxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjhdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjddfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzJdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyOV19fX19fX19LCAweDVBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzldfX19fX19fX19LFxyXG4gICAgMHg0NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDFdfX0sIGM6IFsyMDFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODJdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwMl19fSwgYzogWzIwMl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3Ml19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAwXX19LCBjOiBbMjAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzRdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0RToge2w6IHsweDQ3OiB7bDogezB4M0I6IHtjOiBbMzMwXX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNF19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkxN119fX19fX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NjldfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MF19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTZdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwODY3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOV19fX19fSwgMHg1NDoge2w6IHsweDQ4OiB7bDogezB4M0I6IHtjOiBbMjA4XX19LCBjOiBbMjA4XX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDNdfX0sIGM6IFsyMDNdfX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzNdfX0sIGM6IFsyMzNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYyXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODNdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzNF19fSwgYzogWzIzNF19LCAweDNCOiB7YzogWzg3OTBdfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDFdfX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3MV19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg1XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fSwgMHg2Njoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODZdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5OF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTA2XX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzJdfX0sIGM6IFsyMzJdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDRdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkwNV19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxOTFdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NjddfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDkwM119fX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI3NV19fX19fX19LCAweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzg3MDldfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzgxOTZdfX19LCAweDM0OiB7bDogezB4M0I6IHtjOiBbODE5N119fX19fSwgMHgzQjoge2M6IFs4MTk1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzMV19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTRdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTE3XX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzIzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg2NV19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NDldfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NDldfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzkwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzYxXX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzEwODcyXX19fX19fX19fX19LCAweDc2OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzI1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA5XX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUxXX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzI0MF19fSwgYzogWzI0MF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjM1XX19LCBjOiBbMjM1XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODM2NF19fX19fX19LCAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMzXX19fX19LCAweDY5OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTJdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzY0MjU5XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1Nl19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI2MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1N119fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIsIDEwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzN119fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OF19fX19fX19LCAweDc0OiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk2NDldfX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzQwMl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1MV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTY5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbMTg5XX19LCBjOiBbMTg5XX0sIDB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMxXX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzE4OF19fSwgYzogWzE4OF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzM119fX0sIDB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM3XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1MzldfX19fX0sIDB4MzI6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzg1MzJdfX19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNF19fX19fSwgMHgzMzoge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbMTkwXX19LCBjOiBbMTkwXX0sIDB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM1XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDBdfX19fX0sIDB4MzQ6IHtsOiB7MHgzNToge2w6IHsweDNCOiB7YzogWzg1MzZdfX19fX0sIDB4MzU6IHtsOiB7MHgzNjoge2w6IHsweDNCOiB7YzogWzg1MzhdfX19LCAweDM4OiB7bDogezB4M0I6IHtjOiBbODU0MV19fX19fSwgMHgzNzoge2w6IHsweDM4OiB7bDogezB4M0I6IHtjOiBbODU0Ml19fX19fX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjYwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk1XX19fX19fX19fSxcclxuICAgIDB4NDY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDczXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNV19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fX19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk3XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX0sXHJcbiAgICAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzUwMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ3XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODZdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjNdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwN119fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjFdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg4MF19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODJdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODg0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMywgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDBdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA3XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Ml19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAwXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODgxMV19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg1MDNdfX19fX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA5MTddfX19LCAweDNCOiB7YzogWzg4MjNdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk4XX19fSwgMHg2QToge2w6IHsweDNCOiB7YzogWzEwOTE2XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODkwXX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM1XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTJdfX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU4XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5NF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg3NF19fX19fX19LCAweDNCOiB7YzogWzYyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOV19fX19fX19LCAweDZDOiB7bDogezB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDVdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNl19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fSwgMHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19fX19fX19fX19LCBjOiBbNjJdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5LCA2NTAyNF19fX19fX19fX0sXHJcbiAgICAweDQ3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTVdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk4OF19fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjg2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyOTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0M119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODhdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc0XX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyN119fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNl19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwN119fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MTRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTcwXX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2Ml19fSwgYzogWzYyXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19LFxyXG4gICAgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NF19fX19fSwgMHg0MToge2w6IHsweDUyOiB7bDogezB4NDQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5Ml19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4N0E6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NEM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzXX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19LCAweDZDOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxODldfX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOThdfX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTY4XX19fX19fX0sIDB4M0I6IHtjOiBbODU5Nl19LCAweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjldfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMzBdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg4OV19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAxXX19fX19LCAweDZCOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MzNdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDNdfX19fX19fSwgMHg2RDoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NjNdfX19fX19fX19LCAweDZGOiB7bDogezB4NkI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1M119fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk3XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyOTVdfX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Mjoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNTldfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODIwOF19fX19fX19fX19fX19LFxyXG4gICAgMHg0OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDVdfX0sIGM6IFsyMDVdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjA2XX19LCBjOiBbMjA2XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMDRdfX19fX19fSwgMHg0NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ1XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwNF19fSwgYzogWzIwNF19fX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDZdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk4XX19fX19LCAweDY3OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDQ5OiB7bDogezB4M0I6IHtjOiBbODUyMF19fX19fX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NDY1XX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OF19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQ3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODI5MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODI5MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyNV19fX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIwN119fSwgYzogWzIwN119fX19fX19LFxyXG4gICAgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzddfX0sIGM6IFsyMzddfX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODI5MV19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzOF19fSwgYzogWzIzOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODBdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3N119fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxNjFdfX0sIGM6IFsxNjFdfX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIzNl19fSwgYzogWzIzNl19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NTIwXX0sIDB4Njk6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODQ4OV19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk5XX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODddfX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbNDM3XX19fX19fX19fSwgMHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODcxMl19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MzRdfSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDcxN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ3XX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg5MF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA3NzVdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDVdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE5MV19fSwgYzogWzE5MV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk4XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0OV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1M119fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTQ4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4OTQ3XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjkwXX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzOV19fSwgYzogWzIzOV19fX19fX19LFxyXG4gICAgMHg0QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ5XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzddfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTczXX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjhdfX19fX19fX19fX0sXHJcbiAgICAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMDldfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODFdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwM119fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzU2N119fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU1XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDhdfX19fX19fX19fX0sXHJcbiAgICAweDRCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjJdfX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTBdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjFdfX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc0XX19fX19fX19fSxcclxuICAgIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzExXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzEyXX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTNdfX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDAwXX19fX19fX19fSxcclxuICAgIDB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIzXX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjc2XX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0MV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxNzFdfX0sIGM6IFsxNzFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyN119fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjVdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MTddfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUzXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjFdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyM119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTI1LCA2NTAyNF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzVdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM5XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjM3XX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxOF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTZdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OF19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgzXX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUwXX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjBdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTcxXX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjZdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDRdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYzN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDddfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Nl19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMl19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkyMF19fX19fSwgMHgzQjoge2M6IFsxMDg3N119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc5XX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDg4MV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4ODNdfX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIyLCA2NTAyNF19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg5OV19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODVdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fSwgMHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODgyMl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MThdfX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDZdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk3XX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjM3XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2MzZdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjAyXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA0XX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEzXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX0sIDB4M0I6IHtjOiBbODgxMF19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjAzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzIwXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTEzNl19fX19fX19fX0sIDB4M0I6IHtjOiBbOTEzNl19fX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4OV19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODldfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMF19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTAyMzZdfX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjIwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MjldfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTddfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk3XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDRdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzI3XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTVdfX19fX19fX19LCAweDdBOiB7bDogezB4M0I6IHtjOiBbOTY3NF19LCAweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY3NF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzQwXX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjQzXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTFdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA2XX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODk1XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODI0OV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5M119fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5NV19fX19fX19LCAweDcxOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs5MV19fX0sIDB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMTZdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIyXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE4XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzNdfX19fX19fSwgMHgzQjoge2M6IFs2MF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MThdfX19fX19fSwgMHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNF19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc1XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDZdfX19fX19fX19fSwgYzogWzYwXX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk4XX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOCwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjI6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIzXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMThdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzE3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUxXX19fX19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODVdfX19fX19fSwgMHgzQjoge2M6IFs4NjQzXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxMl19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY3XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwM119fX19fX19LCAweDNCOiB7YzogWzg4ODJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkyXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODRdfX19fX19fSwgMHgzQjoge2M6IFs4NjM5XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc4XX19fX19fX0sIDB4M0I6IHtjOiBbODYzNl19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDczOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkyMl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDZdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MTNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzldfX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzM119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMF19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMxOV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzFdfX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNF19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszMjFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2MF19fSwgYzogWzYwXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19LFxyXG4gICAgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE3NV19fSwgYzogWzE3NV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDAxNl19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTRdfSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NjQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDc5M119fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYyXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM3XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNl19fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODQ4N119fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4MV19fSwgYzogWzE4MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzQyXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTJdfX19fX19fSwgMHgzQjoge2M6IFs4NzM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19LCBjOiBbMTgzXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fSwgMHgzQjoge2M6IFs4NzIyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzYwXX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc5NF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTcxXX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NzFdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNThdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMl19fX19fSwgMHg3NDoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTZdfSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODg4XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fSxcclxuICAgIDB4NEQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA1MDFdfX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI0XX19fX19LFxyXG4gICAgMHg2RToge2w6IHsweDYxOiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxMV19fX19fX19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzI0XX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODczNiwgODQwMl19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzddfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0LCA4MjRdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5LCA4MjRdfX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzMyOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzddfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk4MzhdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX19fSwgMHgzQjoge2M6IFs5ODM4XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX0sIGM6IFsxNjBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODE5XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4Nzc1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NjEsIDgyNF19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjExXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzJdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2M119fX19fX19LCAweDNCOiB7YzogWzg4MDBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0LCA4MjRdfX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwN119fX19fSwgMHg2Nzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgxNV19fX19fX19LCAweDQ3OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIxLCA4MjRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODQwMl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODI0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTk0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzg3MTVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg5NTRdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUzXX19fX19fX0sIDB4NjQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjldfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgxNl19LCAweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDYsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg5NDBdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMCwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTAsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNzJdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxM119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDksIDgyNF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1MywgODI0XX19fSwgMHg3Njoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxM119fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4OTUxXX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg5NTBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTZdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1OF19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTU3XX19fX19fX19fX0sIGM6IFsxNzJdfX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQyXX19fX19fX19fX19LCAweDNCOiB7YzogWzg3NDJdfSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTEwMDUsIDg0MjFdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2LCA4MjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOF19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwNTQ3LCA4MjRdfX19LCAweDNCOiB7YzogWzg2MDNdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDUsIDgyNF19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDNdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQxXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwM119fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19LCAweDcxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk0OSwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDBdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODM3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MCwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDFdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDFdfX0sIGM6IFsyNDFdfX19fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODgyNF19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkzOF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3XX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFszNV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0NzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODE5OV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MSwgODQwMl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3N119fX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MDUsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjIsIDg0MDJdfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwMF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwNzE4XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OThdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDQsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjAsIDg0MDJdfSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0LCA4NDAyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OTldfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4ODUsIDg0MDJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NCwgODQwMl19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzhdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3OV19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzFdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2Ml19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzVdfX19fX19fX19fX19fSxcclxuICAgIDB4NEU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzIzXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTNdfX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg0RDoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTBdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTBdfX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgxXX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzRdfX19fX19fSwgMHg2Rjoge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4Mjg4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OF19LCAweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4MTNdfX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTNdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDBdfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDhdfX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxN119fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIxXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MiwgODI0XX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwMywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbODkzOF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxNl19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgxMCwgODI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0LCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDQsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzldfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDcsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OCwgODI0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNCwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgzM119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzEsIDgyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzJdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3NV19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwOV19fSwgYzogWzIwOV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MjVdfX19fX0sXHJcbiAgICAweDRGOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMV19fSwgYzogWzIxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTJdfX0sIGM6IFsyMTJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU0XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzZdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzhdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMF19fSwgYzogWzIxMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzJdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTI3XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODM2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzhdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyMTZdfX0sIGM6IFsyMTZdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTNdfX0sIGM6IFsyMTNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjE0XX19LCBjOiBbMjE0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTgyXX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTE4MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDNdfX0sIGM6IFsyNDNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1OV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjQ0XX19LCBjOiBbMjQ0XX0sIDB4M0I6IHtjOiBbODg1OF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODYxXX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzddfX19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDgwOF19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1N119fX19fSwgMHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjg0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM5XX19fX19fX19fSwgMHg2Njoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg3XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDhdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzMxXX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQyXX19LCBjOiBbMjQyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4OV19fX19fSwgMHg2ODoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc3XX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg2XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2ODNdfX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI1NF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODhdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzNdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjldfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTU5XX19fX19fX19fSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjc4XX19fSwgMHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU0XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjgxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX0sIDB4M0I6IHtjOiBbODc0NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODUwMF19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19fX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzE3MF19fSwgYzogWzE3MF19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTg2XX19LCBjOiBbMTg2XX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzOF19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MzldfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0M119fX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDhdfX0sIGM6IFsyNDhdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1Nl19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDVdfX0sIGM6IFsyNDVdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA2XX19fX19LCAweDNCOiB7YzogWzg4NTVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjQ2XX19LCBjOiBbMjQ2XX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAyMV19fX19fX19fX19fSxcclxuICAgIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODJdfSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fSwgYzogWzE4Ml19LCAweDNCOiB7YzogWzg3NDFdfSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5NV19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg3XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszN119fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQ2XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI0MF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX0sIDB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4MjQxXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwOV19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2MF19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODkxNl19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg0NjNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjJdfX19fX19fSwgMHg2Qjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODddfX19fX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODZdfX19fX19fSwgMHgzQjoge2M6IFs0M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNzg5XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjZdfX19LCAweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxNzddfX0sIGM6IFsxNzddfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNzkwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Nzoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTA3OTFdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE3N119fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3M119fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjFdfX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTYzXX19LCBjOiBbMTYzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI2XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjddfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMF19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzFdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDJdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM3XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzNdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fSwgMHg2Njoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTc4XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5NzldfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3MzNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA1XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY4XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAwXX19fX19fX19fX19fX0sXHJcbiAgICAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2XX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgzXX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzRdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjhdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDREOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2MF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3M119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MzldfSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI2XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0M119fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19LCAweDNCOiB7YzogWzg3NTldfX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzldfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzZdfX19fX19fSxcclxuICAgIDB4NTE6IHtsOiB7MHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg0XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODBdfX19fX19fSwgMHg1NToge2w6IHsweDRGOiB7bDogezB4NTQ6IHtsOiB7MHgzQjoge2M6IFszNF19fSwgYzogWzM0XX19fX19fX0sXHJcbiAgICAweDcxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2Ml19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjc5XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNl19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzRdfX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNjNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjRdfX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NSwgODE3XX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDFdfX19fX19fX19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NV19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDJdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTg3XX19LCBjOiBbMTg3XX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA2MTNdfX19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4Njc3XX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI4XX19fX19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0N119fX0sIDB4M0I6IHtjOiBbODU5NF19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyNl19fX19fSwgMHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1NjVdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MTJdfX19fX19fSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYxMV19fX19fSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3NThdfSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk5XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTNdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzZdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM4XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjQwXX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDNdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg4XX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUxXX19fX19LCAweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMV19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODYyN119fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzddfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY0NV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIxXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzFdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTExXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk2XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjQxXX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2NDBdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjA0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzk2MV19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODY0MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2NDBdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNzMwXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA3XX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzddfX19fX19fX19LCAweDNCOiB7YzogWzkxMzddfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5MF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMl19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MzBdfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjNdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDVdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MV19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0NF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzBdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDddfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI1XX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTNdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTZdfX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbMTA3MDJdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjAwXX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4NDc4XX19fX19LFxyXG4gICAgMHg1Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxOV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOF19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUxOF19fX19fX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzQ0XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM0Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU2XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzkyOV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE3XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3N119fX19fX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDQzOiB7bDogezB4NjU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODldfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MV19fX19fX19LCAweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjZdfSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4N119fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0XX19fX19fX0sIDB4M0I6IHtjOiBbODg4M119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODhdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MF19fX19fX19LCAweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzldfX19fX19fSwgMHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDQ5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2MDhdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc5OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNzQwXX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Ml19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5NDBdfSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODZdfX19fX0sIDB4NDg6IHtsOiB7MHg0Mzoge2w6IHsweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Ml19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTMxXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NDY6IHtsOiB7MHg1NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY4XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOF19fX19fX19LCAweDcxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX0sIDB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg1MV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4Ml19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODkxMl19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgzOF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxM119LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzldfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTNdfX19fX19fX19fX19fSxcclxuICAgIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ3XX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxOF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI4XX0sIDB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzUxXX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMyXX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNDldfX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fSwgMHgzQjoge2M6IFs4OTAxXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg1NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAwXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjRdfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY3XX19LCBjOiBbMTY3XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbNTldfX19fX0sIDB4NzM6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzN119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDM4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMl19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs5ODM5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk3XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk2XX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzE3M119fSwgYzogWzE3M119fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2Ml19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODU4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA5MTBdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTEyXX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDldfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTExXX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc0XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3ODhdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTBdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODAzXX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk5NV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MjJdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNCwgNjUwMjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjNdfX19fX0sIDB4M0I6IHtjOiBbMTA2OTJdfX19LCAweDNCOiB7YzogWzQ3XX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjRdfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUxXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUxLCA2NTAyNF19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUyLCA2NTAyNF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0OV19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQ5XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fSwgMHgzQjoge2M6IFs5NjMzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDhdfX19fX0sIDB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODkwMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzM0XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzE3NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0MV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDldfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgzOF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ1XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0Ml19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY1XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI3XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs5ODM0XX19fX19LCAweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzQjoge2M6IFsxODVdfX0sIGM6IFsxODVdfSwgMHgzMjoge2w6IHsweDNCOiB7YzogWzE3OF19fSwgYzogWzE3OF19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbMTc5XX19LCBjOiBbMTc5XX0sIDB4M0I6IHtjOiBbODgzNV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQyXX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY4XX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0OF19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDE4NV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjddfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTldfX19fX19fX19LCAweDZEOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDZdfX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5NDRdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzVdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgzOV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTBdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk1Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjRdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjZdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAxXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjVdfX19fX19fSwgMHg2RToge2w6IHsweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM4XX19fX19fX19fX19LCAweDdBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjIzXX19LCBjOiBbMjIzXX19fX19fX19fSxcclxuICAgIDB4NTQ6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MzJdfX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Nl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTRdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1OF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg3XX19fX19LCAweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMF19fX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3LCA4MjAyXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NEY6IHtsOiB7MHg1Mjoge2w6IHsweDRFOiB7bDogezB4M0I6IHtjOiBbMjIyXX19LCBjOiBbMjIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzFdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3M119fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM5XX19fX19fX0sIDB4NTI6IHtsOiB7MHg0MToge2w6IHsweDQ0OiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODNdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNThdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Ml19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM1XX19fX19fX19fX19LFxyXG4gICAgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTgyXX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk2NF19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1N119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDExXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5ODFdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExM119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX0sIDB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1Ml19LCAweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fSwgMHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI1NF19fSwgYzogWzI1NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MDFdfX19fX0sIDB4M0I6IHtjOiBbODg2NF19fX0sIDB4M0I6IHtjOiBbMjE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgwMF19fX19LCBjOiBbMjE1XX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX0sIDB4NzA6IHtsOiB7MHg2Mjoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MDE0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTNdfX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjVdfSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDk3MF19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0ODJdfX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUzXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5Nl19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NTddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk3MDhdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgxMF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA3MDFdfX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDgxMV19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4N0E6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MTg2XX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDldfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NF19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNTldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2OToge2w6IHsweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxOF19fSwgYzogWzIxOF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA3XX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM4XX19fX19LCAweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2NF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIxOV19fSwgYzogWzIxOV19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg4XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTddfX0sIGM6IFsyMTddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzYyXX19fX19fX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4M119fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MV19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OV19LCAweDUwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxNF19fX19fX19LCAweDNCOiB7YzogWzg1OTNdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ1XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjA2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzhdfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MzNdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTNdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjZdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjIwXX19LCBjOiBbMjIwXX19fX19fX0sXHJcbiAgICAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1MF19fSwgYzogWzI1MF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjVdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNTFdfX0sIGM6IFsyNTFdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkxXX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzY5XX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ5XX19LCBjOiBbMjQ5XX19fX19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NV19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYzOV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODhdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIwXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2M119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTY4XX19LCBjOiBbMTY4XX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzOV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODQ2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NV19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTc4XX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDhdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk4OV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTg5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzRdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzM2N119fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk3MjFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMF19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI1Ml19fSwgYzogWzI1Ml19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2M119fX19fX19fX19fX19fX0sXHJcbiAgICAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjUyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDMsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk4NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2Nl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODg5MV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5NF19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk0Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTVdfX19fX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQyLCA2NTAyNF19fX19fX19LCAweDcwOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU2LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3QToge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY1MF19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODddfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Ml19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzNdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTgyXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIxNF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODIxNF19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODczOV19fX19fX19LCAweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDA3Ml19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg5XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NV19fX19fX19LCAweDc2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc0XX19fX19fX19fX19fX0sXHJcbiAgICAweDU3OiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODZdfX19fX19fX19LFxyXG4gICAgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzczXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NDddfX19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5M119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTZdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NjhdfSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3NjhdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDEyXX19fX19fX19fSxcclxuICAgIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk4XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzk3MTFdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OV19fX19fX19LCAweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExN119fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTU4XX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODk1NV19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NTJdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY5XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxM119fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5N119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk2XX19fX19fX19fX19fX0sXHJcbiAgICAweDU4OiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzkyNl19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg3XX19fX19fX19fSxcclxuICAgIDB4NTk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjIxXX19LCBjOiBbMjIxXX19fX19fX19fSwgMHg0MToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcxXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjddfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Ml19fX19fSwgMHg0OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMxXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg4XX19fX19fX0sIDB4NTU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MF19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM3Nl19fX19fX19fX0sXHJcbiAgICAweDc5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1M119fSwgYzogWzI1M119fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5OV19fX19fSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY1XX19LCBjOiBbMTY1XX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE4XX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTFdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTRdfX19fX19fSwgMHg3NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAyXX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTVdfX0sIGM6IFsyNTVdfX19fX19fSxcclxuICAgIDB4NUE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc3XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0N119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszNzldfX19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg1Nzoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0ODhdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Nl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODldfX19fX19fX19LFxyXG4gICAgMHg3QToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNzhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM4Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM4MF19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUwXX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOV19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc4XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2OV19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE3MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxNV19fX19fX19LCAweDc3OiB7bDogezB4NkE6IHtsOiB7MHgzQjoge2M6IFs4MjA1XX19fSwgMHg2RToge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNF19fX19fX19fX1cclxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFM7XG5cbi8vVXRpbHNcblxuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcbn1cblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIGNwMSA+PSAweEQ4MDAgJiYgY3AxIDw9IDB4REJGRiAmJiBjcDIgPj0gMHhEQzAwICYmIGNwMiA8PSAweERGRkY7XG59XG5cbmZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AxLCBjcDIpIHtcbiAgICByZXR1cm4gKGNwMSAtIDB4RDgwMCkgKiAweDQwMCArIDB4MjQwMCArIGNwMjtcbn1cblxuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG52YXIgUHJlcHJvY2Vzc29yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMud3JpdGUoaHRtbCk7XG5cbiAgICAvL05PVEU6IG9uZSBsZWFkaW5nIFUrRkVGRiBCWVRFIE9SREVSIE1BUksgY2hhcmFjdGVyIG11c3QgYmUgaWdub3JlZCBpZiBhbnkgYXJlIHByZXNlbnQgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICB0aGlzLnBvcyA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KDApID09PSAkLkJPTSA/IDAgOiAtMTtcblxuICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgaWYgKHRoaXMuaHRtbCkge1xuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBodG1sICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEsIHRoaXMuaHRtbC5sZW5ndGgpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcblxuXG4gICAgdGhpcy5sYXN0Q2hhclBvcyA9IHRoaXMuaHRtbC5sZW5ndGggLSAxO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcysrO1xuXG4gICAgaWYgKHRoaXMucG9zID4gdGhpcy5sYXN0Q2hhclBvcylcbiAgICAgICAgcmV0dXJuICQuRU9GO1xuXG4gICAgdmFyIGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgLy9OT1RFOiBhbnkgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgYSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVyXG4gICAgLy9tdXN0IGJlIGlnbm9yZWQuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcbiAgICB9XG5cbiAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgIGlmIChjcCA9PT0gJC5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJC5MSU5FX0ZFRUQ7XG4gICAgfVxuXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBwZXJmb3JtIGNoZWNrIGlmIHRoZSBjb2RlIHBvaW50IGluIHRoZSBhbGxvd2VkIHJhbmdlIHRoYXQgY292ZXJzIG1vc3QgY29tbW9uXG4gICAgLy9IVE1MIGlucHV0IChlLmcuIEFTQ0lJIGNvZGVzKSB0byBhdm9pZCBwZXJmb3JtYW5jZS1jb3N0IG9wZXJhdGlvbnMgZm9yIGhpZ2gtcmFuZ2UgY29kZSBwb2ludHMuXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCA/IHRoaXMuX3Byb2Nlc3NIaWdoUmFuZ2VDb2RlUG9pbnQoY3ApIDogY3A7XG59O1xuXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XG4gICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmxhc3RDaGFyUG9zKSB7XG4gICAgICAgIHZhciBuZXh0Q3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuXG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIoY3AsIG5leHRDcCkpIHtcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyLiBQZWVrIHBhaXIgY2hhcmFjdGVyIGFuZCByZWNhbGN1bGF0ZSBjb2RlIHBvaW50LlxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGNwID0gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcblxuICAgICAgICAgICAgLy9OT1RFOiBhZGQgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQoY3ApKVxuICAgICAgICBjcCA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuXG4gICAgcmV0dXJuIGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fYWRkR2FwID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5yZXRyZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMuZ2FwU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgfVxuXG4gICAgdGhpcy5wb3MtLTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKSxcclxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIE5BTUVEX0VOVElUWV9UUklFID0gcmVxdWlyZSgnLi9uYW1lZF9lbnRpdHlfdHJpZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUyxcclxuICAgICQkID0gVU5JQ09ERS5DT0RFX1BPSU5UX1NFUVVFTkNFUztcclxuXHJcbi8vUmVwbGFjZW1lbnQgY29kZSBwb2ludHMgZm9yIG51bWVyaWMgZW50aXRpZXNcclxudmFyIE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UUyA9IHtcclxuICAgIDB4MDA6IDB4RkZGRCwgMHgwRDogMHgwMDBELCAweDgwOiAweDIwQUMsIDB4ODE6IDB4MDA4MSwgMHg4MjogMHgyMDFBLCAweDgzOiAweDAxOTIsIDB4ODQ6IDB4MjAxRSxcclxuICAgIDB4ODU6IDB4MjAyNiwgMHg4NjogMHgyMDIwLCAweDg3OiAweDIwMjEsIDB4ODg6IDB4MDJDNiwgMHg4OTogMHgyMDMwLCAweDhBOiAweDAxNjAsIDB4OEI6IDB4MjAzOSxcclxuICAgIDB4OEM6IDB4MDE1MiwgMHg4RDogMHgwMDhELCAweDhFOiAweDAxN0QsIDB4OEY6IDB4MDA4RiwgMHg5MDogMHgwMDkwLCAweDkxOiAweDIwMTgsIDB4OTI6IDB4MjAxOSxcclxuICAgIDB4OTM6IDB4MjAxQywgMHg5NDogMHgyMDFELCAweDk1OiAweDIwMjIsIDB4OTY6IDB4MjAxMywgMHg5NzogMHgyMDE0LCAweDk4OiAweDAyREMsIDB4OTk6IDB4MjEyMixcclxuICAgIDB4OUE6IDB4MDE2MSwgMHg5QjogMHgyMDNBLCAweDlDOiAweDAxNTMsIDB4OUQ6IDB4MDA5RCwgMHg5RTogMHgwMTdFLCAweDlGOiAweDAxNzhcclxufTtcclxuXHJcbi8vU3RhdGVzXHJcbnZhciBEQVRBX1NUQVRFID0gJ0RBVEFfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURScsXHJcbiAgICBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURScsXHJcbiAgICBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJyxcclxuICAgIFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJyxcclxuICAgIEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJyxcclxuICAgIFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURScsXHJcbiAgICBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnLFxyXG4gICAgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJyxcclxuICAgIENPTU1FTlRfRU5EX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9FTkRfREFTSF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9TVEFURSA9ICdDT01NRU5UX0VORF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9CQU5HX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0JBTkdfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TVEFURSA9ICdET0NUWVBFX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBET0NUWVBFX05BTUVfU1RBVEUgPSAnRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFID0gJ0JFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBCT0dVU19ET0NUWVBFX1NUQVRFID0gJ0JPR1VTX0RPQ1RZUEVfU1RBVEUnLFxyXG4gICAgQ0RBVEFfU0VDVElPTl9TVEFURSA9ICdDREFUQV9TRUNUSU9OX1NUQVRFJztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkRJR0lUXzAgJiYgY3AgPD0gJC5ESUdJVF85O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpVXBwZXIoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgaXNBc2NpaVVwcGVyKGNwKSB8fCBpc0FzY2lpTG93ZXIoY3ApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RpZ2l0KGNwLCBpc0hleCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgKGlzSGV4ICYmICgoY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX0YpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REZGRiB8fCBjcCA+IDB4MTBGRkZGO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCArIDB4MDAyMDtcclxufVxyXG5cclxuLy9OT1RFOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBvbmx5IGNoYXJhY3RlcnMgZnJvbSBCTVAgc3Vic2V0LlxyXG4vL1NvLCB3ZSBuZWVkIHRvIHdvcmthcm91bmQgdGhpcyBtYW51YWxseS5cclxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcclxuZnVuY3Rpb24gdG9DaGFyKGNwKSB7XHJcbiAgICBpZiAoY3AgPD0gMHhGRkZGKVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcclxuXHJcbiAgICBjcCAtPSAweDEwMDAwO1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3AgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgfCBjcCAmIDB4M0ZGKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbn1cclxuXHJcbi8vVG9rZW5pemVyXHJcbnZhciBUb2tlbml6ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGh0bWwpO1xyXG5cclxuICAgIHRoaXMudG9rZW5RdWV1ZSA9IFtdO1xyXG5cclxuICAgIHRoaXMuYWxsb3dDREFUQSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MgPSAwO1xyXG5cclxuICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSBudWxsO1xyXG5cclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9ICFvcHRpb25zLmRlY29kZUh0bWxFbnRpdGllcztcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHR5cGVzXHJcblRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gPSAnQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOID0gJ1dISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiA9ICdTVEFSVF9UQUdfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4gPSAnQ09NTUVOVF9UT0tFTic7XHJcblRva2VuaXplci5ET0NUWVBFX1RPS0VOID0gJ0RPQ1RZUEVfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XHJcblxyXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblRva2VuaXplci5NT0RFID0gVG9rZW5pemVyLnByb3RvdHlwZS5NT0RFID0ge1xyXG4gICAgREFUQTogREFUQV9TVEFURSxcclxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxyXG4gICAgUkFXVEVYVDogUkFXVEVYVF9TVEFURSxcclxuICAgIFNDUklQVF9EQVRBOiBTQ1JJUFRfREFUQV9TVEFURSxcclxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXHJcbn07XHJcblxyXG4vL1N0YXRpY1xyXG5Ub2tlbml6ZXIuZ2V0VG9rZW5BdHRyID0gZnVuY3Rpb24gKHRva2VuLCBhdHRyTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IGF0dHJOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4uYXR0cnNbaV0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCB0b2tlblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy50b2tlblF1ZXVlLmxlbmd0aClcclxuICAgICAgICB0aGlzW3RoaXMuc3RhdGVdKHRoaXMuX2NvbnN1bWUoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xyXG59O1xyXG5cclxuLy9Db25zdW1wdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcysrO1xyXG4gICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zLS07XHJcbiAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWVTZXZlcmFsID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICB3aGlsZSAoY291bnQtLSlcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX3JlY29uc3VtZUluU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoID0gZnVuY3Rpb24gKHBhdHRlcm4sIHN0YXJ0Q3AsIGNhc2VTZW5zaXRpdmUpIHtcclxuICAgIHZhciByb2xsYmFja1BvcyA9IHRoaXMuY29uc3VtcHRpb25Qb3MsXHJcbiAgICAgICAgaXNNYXRjaCA9IHRydWUsXHJcbiAgICAgICAgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm5Qb3MgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBwYXR0ZXJuQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZm9yICg7IHBhdHRlcm5Qb3MgPCBwYXR0ZXJuTGVuZ3RoOyBwYXR0ZXJuUG9zKyspIHtcclxuICAgICAgICBpZiAocGF0dGVyblBvcyA+IDApXHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG5cclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xyXG5cclxuICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNNYXRjaClcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKHRoaXMuY29uc3VtcHRpb25Qb3MgLSByb2xsYmFja1Bvcyk7XHJcblxyXG4gICAgcmV0dXJuIGlzTWF0Y2g7XHJcbn07XHJcblxyXG4vL0xvb2thaGVhZFxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sb29rYWhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcbi8vVGVtcCBidWZmZXJcclxuVG9rZW5pemVyLnByb3RvdHlwZS5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcEJ1ZmYubGVuZ3RoICE9PSAkJC5TQ1JJUFRfU1RSSU5HLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRlbXBCdWZmLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vVG9rZW4gY3JlYXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5idWlsZFN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgaWdub3JlZDogZmFsc2UsXHJcbiAgICAgICAgYXR0cnM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lRmlyc3RDaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkRW5kVGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4sXHJcbiAgICAgICAgZGF0YTogJydcclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTixcclxuICAgICAgICBuYW1lOiBkb2N0eXBlTmFtZUZpcnN0Q2ggfHwgJycsXHJcbiAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpY0lkOiBudWxsLFxyXG4gICAgICAgIHN5c3RlbUlkOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgY2hhcnM6IGNoXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLy9UYWcgYXR0cmlidXRlc1xyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVBdHRyID0gZnVuY3Rpb24gKGF0dHJOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcclxuICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNEdXBsaWNhdGVBdHRyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgIT09IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sZWF2ZUF0dHJOYW1lID0gZnVuY3Rpb24gKHRvU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSB0b1N0YXRlO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEdXBsaWNhdGVBdHRyKCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcclxufTtcclxuXHJcbi8vQXBwcm9wcmlhdGUgZW5kIHRhZyB0b2tlblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2FwcHJvcHJpYXRlLWVuZC10YWctdG9rZW4pXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGVtaXNzaW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgLy9OT1RFOiBzdG9yZSBlbWl0ZWQgc3RhcnQgdGFnJ3MgdGFnTmFtZSB0byBkZXRlcm1pbmUgaXMgdGhlIGZvbGxvd2luZyBlbmQgdGFnIHRva2VuIGlzIGFwcHJvcHJpYXRlLlxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRFT0ZUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcclxuICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHt0eXBlOiBUb2tlbml6ZXIuRU9GX1RPS0VOfSk7XHJcbn07XHJcblxyXG4vL0NoYXJhY3RlcnMgZW1pc3Npb25cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXHJcbi8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxyXG4vL0lmIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdyb3VwLCBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcclxuLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXHJcbi8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxyXG4vLzEpTlVMTF9DSEFSQUNURVJfVE9LRU4gLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXHJcbi8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcclxuLy8zKUNIQVJBQ1RFUl9UT0tFTiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSAhPT0gdHlwZSlcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICB2YXIgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdHlwZSA9IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIHRvQ2hhcihjcCkpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFNldmVyYWxDb2RlUG9pbnRzID0gZnVuY3Rpb24gKGNvZGVQb2ludHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xyXG59O1xyXG5cclxuLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXHJcbi8vU28gd2UgY2FuIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDaGFyID0gZnVuY3Rpb24gKGNoKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiwgY2gpO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXIgcmVmZXJlbmNlIHRva2VuaXphdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChpc0hleCkge1xyXG4gICAgdmFyIGRpZ2l0cyA9ICcnLFxyXG4gICAgICAgIG5leHRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgZGlnaXRzICs9IHRvQ2hhcih0aGlzLl9jb25zdW1lKCkpO1xyXG4gICAgICAgIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG4gICAgfSB3aGlsZSAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbG9va2FoZWFkKCkgPT09ICQuU0VNSUNPTE9OKVxyXG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENwID0gcGFyc2VJbnQoZGlnaXRzLCBpc0hleCA/IDE2IDogMTApLFxyXG4gICAgICAgIHJlcGxhY2VtZW50ID0gTlVNRVJJQ19FTlRJVFlfUkVQTEFDRU1FTlRTW3JlZmVyZW5jZWRDcF07XHJcblxyXG4gICAgaWYgKHJlcGxhY2VtZW50KVxyXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChyZWZlcmVuY2VkQ3ApKVxyXG4gICAgICAgIHJldHVybiAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gcmVmZXJlbmNlZENwO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKHN0YXJ0Q3AsIGluQXR0cikge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gbnVsbCxcclxuICAgICAgICBlbnRpdHlDb2RlUG9pbnRzQ291bnQgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBsZWFmID0gTkFNRURfRU5USVRZX1RSSUVbY3BdLFxyXG4gICAgICAgIGNvbnN1bWVkQ291bnQgPSAxLFxyXG4gICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKDsgbGVhZiAmJiBjcCAhPT0gJC5FT0Y7IGNwID0gdGhpcy5fY29uc3VtZSgpLCBjb25zdW1lZENvdW50KyssIGxlYWYgPSBsZWFmLmwgJiYgbGVhZi5sW2NwXSkge1xyXG4gICAgICAgIGlmIChsZWFmLmMpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBuYW1lZCByZWZlcmVuY2UgbWF0Y2guIEJ1dCB3ZSBkb24ndCBzdG9wIGxvb2t1cCBhdCB0aGlzIHBvaW50LFxyXG4gICAgICAgICAgICAvL2JlY2F1c2UgbG9uZ2VyIG1hdGNoZXMgc3RpbGwgY2FuIGJlIGZvdW5kIChlLmcuICcmbm90JyBhbmQgJyZub3RpbjsnKSBleGNlcHQgdGhlIGNhc2VcclxuICAgICAgICAgICAgLy90aGVuIGZvdW5kIG1hdGNoIGlzIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9uLlxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQ29kZVBvaW50cyA9IGxlYWYuYztcclxuICAgICAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gY29uc3VtZWRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcclxuICAgICAgICAgICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFzZW1pY29sb25UZXJtaW5hdGVkKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogdW5jb25zdW1lIGV4Y2VzcyAoZS5nLiAnaXQnIGluICcmbm90aXQnKVxyXG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQgLSBlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBJZiB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBiZWluZyBjb25zdW1lZCBhcyBwYXJ0IG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgIC8vaXMgZWl0aGVyIGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSkgb3IgYW4gYWxwaGFudW1lcmljIEFTQ0lJIGNoYXJhY3RlciwgdGhlbiwgZm9yIGhpc3RvcmljYWxcclxuICAgICAgICAgICAgLy9yZWFzb25zLCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hdGNoZWQgYWZ0ZXIgdGhlIFUrMDAyNiBBTVBFUlNBTkQgY2hhcmFjdGVyICgmKSBtdXN0IGJlXHJcbiAgICAgICAgICAgIC8vdW5jb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgIC8vSG93ZXZlciwgaWYgdGhpcyBuZXh0IGNoYXJhY3RlciBpcyBpbiBmYWN0IGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSksIHRoZW4gdGhpcyBpcyBhXHJcbiAgICAgICAgICAgIC8vcGFyc2UgZXJyb3IsIGJlY2F1c2Ugc29tZSBsZWdhY3kgdXNlciBhZ2VudHMgd2lsbCBtaXNpbnRlcnByZXQgdGhlIG1hcmt1cCBpbiB0aG9zZSBjYXNlcy5cclxuICAgICAgICAgICAgLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG4gICAgICAgICAgICBpZiAoaW5BdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGVudGl0eUNvZGVQb2ludHNDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZWZlcmVuY2VkQ29kZVBvaW50cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nIHx8IGlzV2hpdGVzcGFjZShzdGFydENwKSB8fCBzdGFydENwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgc3RhcnRDcCA9PT0gJC5BTVBFUlNBTkQgfHwgc3RhcnRDcCA9PT0gdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwIHx8IHN0YXJ0Q3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgLy9OT1RFOiBub3QgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBObyBjaGFyYWN0ZXJzIGFyZSBjb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoc3RhcnRDcCA9PT0gJC5OVU1CRVJfU0lHTikge1xyXG4gICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIG51bWVyaWMgZW50aXR5IGNhbmRpZGF0ZSwgbm93IHdlIHNob3VsZCBkZXRlcm1pbmUgaWYgaXQncyBoZXggb3IgZGVjaW1hbFxyXG4gICAgICAgIHZhciBpc0hleCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5MQVRJTl9TTUFMTF9YIHx8IG5leHRDcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgICAgICBpc0hleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdCB0aGlzIGlzIGEgbnVtZXJpYyBlbnRpdHkgZm9yIHN1cmUsIHNvIHdlIGNvbnN1bWUgaXRcclxuICAgICAgICBpZiAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKVxyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NvbnN1bWVOdW1lcmljRW50aXR5KGlzSGV4KV07XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL05PVEU6IG90aGVyd2lzZSB0aGlzIGlzIGEgYm9ndXMgbnVtYmVyIGVudGl0eSBhbmQgYSBwYXJzZSBlcnJvci4gVW5jb25zdW1lIHRoZSBudW1iZXIgc2lnblxyXG4gICAgICAgICAgICAvL2FuZCB0aGUgJ3gnLWNoYXJhY3RlciBpZiBhcHByb3ByaWF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChpc0hleCA/IDIgOiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3VtZU5hbWVkRW50aXR5KHN0YXJ0Q3AsIGluQXR0cik7XHJcbn07XHJcblxyXG4vL1N0YXRlIG1hY2hpbmVcclxudmFyIF8gPSBUb2tlbml6ZXIucHJvdG90eXBlO1xyXG5cclxuLy8xMi4yLjQuMSBEYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bREFUQV9TVEFURV0gPSBmdW5jdGlvbiBkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluRGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zIFJDREFUQSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJblJjZGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gUkNEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gdm9pZCAwO1xyXG5cclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlZENvZGVQb2ludHMpXHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHJlZmVyZW5jZWRDb2RlUG9pbnRzKTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignJicpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUgUkFXVEVYVCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42IFNjcmlwdCBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNyBQTEFJTlRFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tQTEFJTlRFWFRfU1RBVEVdID0gZnVuY3Rpb24gcGxhaW50ZXh0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjggVGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiB0YWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVFU1RJT05fTUFSSykge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuOSBFbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tFTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gZW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTAgVGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiB0YWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTEgUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJjZGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMiBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMyBSQ0RBVEEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTQgUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE1IFJBV1RFWFQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE2IFJBV1RFWFQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTcgU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTggU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xOSBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yMCBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjEgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjIgU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjMgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNCBTY3JpcHQgZGF0YSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNSBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjYgU2NyaXB0IGRhdGEgZXNjYXBlZCBlbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI3IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI4IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpID8gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjkgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMSBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMiBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzQgQmVmb3JlIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzUgQXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzYgQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzcgQmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOIHx8IGNwID09PSAkLkdSQVZFX0FDQ0VOVCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM4IEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gJC5RVU9UQVRJT05fTUFSSztcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzkgQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuQVBPU1RST1BIRTtcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDAgQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVVbnF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuR1JFQVRFUl9USEFOX1NJR047XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgICAgICBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MSBDaGFyYWN0ZXIgcmVmZXJlbmNlIGluIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VkQ29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIocmVmZXJlbmNlZENvZGVQb2ludHNbaV0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSAnJic7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDIgQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQzIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFXSA9IGZ1bmN0aW9uIHNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCT0dVU19DT01NRU5UX1NUQVRFXSA9IGZ1bmN0aW9uIGJvZ3VzQ29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBjcCA9PT0gJC5OVUxMID8gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIgOiB0b0NoYXIoY3ApO1xyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ1IE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gbWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBUlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRPQ1RZUEVfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dDREFUQSAmJiB0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ2IENvbW1lbnQgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ3IENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40OCBDb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDkgQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUwIENvbW1lbnQgZW5kIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9FTkRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTEgQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZEJhbmdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MiBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU0IERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTUgQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlBVQkxJQ19TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU2IEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTcgQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTggRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41OSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjAgQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MSBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdID0gZnVuY3Rpb24gYmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1N0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjIgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MyBCZWZvcmUgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NCBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY1IERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NiBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NyBCb2d1cyBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0RvY3R5cGVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY4IENEQVRBIHNlY3Rpb24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDREFUQV9TRUNUSU9OX1NUQVRFXSA9IGZ1bmN0aW9uIGNkYXRhU2VjdGlvblN0YXRlKGNwKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfRU5EX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxyXG4gICAgICAgIHF1aXJrc01vZGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcclxuICAgICAgICBhdHRyczogYXR0cnMsXHJcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXHJcbiAgICAgICAgY2hpbGROb2RlczogW10sXHJcbiAgICAgICAgcGFyZW50Tm9kZTogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRvY3R5cGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXHJcbiAgICAgICAgICAgIHN5c3RlbUlkOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5zZXRRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcclxufTtcclxuXHJcbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcclxuXHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xyXG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIHZhciByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjaXBpZW50Tm9kZS5hdHRycy5sZW5ndGg7IGkrKylcclxuICAgICAgICByZWNpcGllbnRBdHRyc01hcC5wdXNoKHJlY2lwaWVudE5vZGUuYXR0cnNbaV0ubmFtZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnRBdHRyc01hcC5pbmRleE9mKGF0dHJzW2pdLm5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRycy5wdXNoKGF0dHJzW2pdKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgdHJhdmVyc2luZ1xyXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmF0dHJzO1xyXG59O1xyXG5cclxuLy9Ob2RlIGRhdGFcclxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2VVUkk7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xyXG4gICAgcmV0dXJuIHRleHROb2RlLnZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5zeXN0ZW1JZDtcclxufTtcclxuXHJcbi8vTm9kZSB0eXBlc1xyXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUudGFnTmFtZTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyk7XG5cbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxudmFyIG5vZGVUeXBlcyA9IHtcbiAgICBlbGVtZW50OiAxLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGE6IDQsXG4gICAgY29tbWVudDogOFxufTtcblxudmFyIG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMgPSB7XG4gICAgdGFnTmFtZTogJ25hbWUnLFxuICAgIGNoaWxkTm9kZXM6ICdjaGlsZHJlbicsXG4gICAgcGFyZW50Tm9kZTogJ3BhcmVudCcsXG4gICAgcHJldmlvdXNTaWJsaW5nOiAncHJldicsXG4gICAgbmV4dFNpYmxpbmc6ICduZXh0JyxcbiAgICBub2RlVmFsdWU6ICdkYXRhJ1xufTtcblxuLy9Ob2RlXG52YXIgTm9kZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxufTtcblxuTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlblswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICBnZXQgbGFzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gbm9kZVR5cGVzW3RoaXMudHlwZV0gfHwgbm9kZVR5cGVzLmVsZW1lbnQ7XG4gICAgfVxufTtcblxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbc2hvcnRoYW5kXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXNbc2hvcnRoYW5kXSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuXG5cbi8vTm9kZSBjb25zdHJ1Y3Rpb25cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPVxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICB2YXIgYXR0cmlicyA9IHt9LFxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlID0ge30sXG4gICAgICAgIGF0dHJpYnNQcmVmaXggPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBhdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgYXR0cmlic1ByZWZpeFthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogdGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ3N0eWxlJyA/IHRhZ05hbWUgOiAndGFnJyxcbiAgICAgICAgbmFtZTogdGFnTmFtZSxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VVUkksXG4gICAgICAgIGF0dHJpYnM6IGF0dHJpYnMsXG4gICAgICAgICd4LWF0dHJpYnNOYW1lc3BhY2UnOiBhdHRyaWJzTmFtZXNwYWNlLFxuICAgICAgICAneC1hdHRyaWJzUHJlZml4JzogYXR0cmlic1ByZWZpeCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cblxuLy9UcmVlIG11dGF0aW9uXG5leHBvcnRzLnNldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uIChkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgdmFyIGRhdGEgPSBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSxcbiAgICAgICAgZG9jdHlwZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ10gPSBzeXN0ZW1JZDtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIG5ldyBOb2RlKHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgICAgbmFtZTogJyFkb2N0eXBlJyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcbiAgICAgICAgICAgICd4LXB1YmxpY0lkJzogcHVibGljSWQsXG4gICAgICAgICAgICAneC1zeXN0ZW1JZCc6IHN5c3RlbUlkXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICAgIGRvY3VtZW50LnF1aXJrc01vZGUgPSB0cnVlO1xufTtcblxuZXhwb3J0cy5pc1F1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcbn07XG5cbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIHZhciBwcmV2ID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XG4gICAgbmV3Tm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xufTtcblxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmRleE9mKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VOb2RlLnByZXYgPSBuZXdOb2RlO1xuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIHZhciBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKG5vZGUpLFxuICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldixcbiAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cbiAgICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcblxuICAgICAgICBpZiAocHJldilcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG5cbiAgICAgICAgaWYgKG5leHQpXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuXG4gICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0ID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbn07XG5cbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLy9UcmVlIHRyYXZlcnNpbmdcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5bMF07XG59O1xuXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnQ7XG59O1xuXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0ckxpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZS5hdHRyaWJzKSB7XG4gICAgICAgIGlmIChub2RlLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGF0dHJMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW25hbWVdLFxuICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZVsneC1hdHRyaWJzUHJlZml4J11bbmFtZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJMaXN0O1xufTtcblxuXG4vL05vZGUgZGF0YVxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XG4gICAgcmV0dXJuIHRleHROb2RlLmRhdGE7XG59O1xuXG5leHBvcnRzLmdldENvbW1lbnROb2RlQ29udGVudCA9IGZ1bmN0aW9uIChjb21tZW50Tm9kZSkge1xuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXTtcbn07XG5cblxuLy9Ob2RlIHR5cGVzXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZXh0Jztcbn07XG5cbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIG5vZGUubmFtZSA9PT0gJyFkb2N0eXBlJztcbn07XG5cbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEhbm9kZS5hdHRyaWJzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vQ29uc3RcclxudmFyIE5PQUhfQVJLX0NBUEFDSVRZID0gMztcclxuXHJcbi8vTGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzXHJcbnZhciBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gW107XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbiAgICB0aGlzLmJvb2ttYXJrID0gbnVsbDtcclxufTtcclxuXHJcbi8vRW50cnkgdHlwZXNcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSA9ICdNQVJLRVJfRU5UUlknO1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSA9ICdFTEVNRU5UX0VOVFJZJztcclxuXHJcbi8vTm9haCBBcmsncyBjb25kaXRpb25cclxuLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xyXG4vL2xpZ2h0d2VpZ2h0IGhldXJpc3RpY3Mgd2l0aG91dCB0aG9yb3VnaCBhdHRyaWJ1dGVzIGNoZWNrLlxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyA9IGZ1bmN0aW9uIChuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmxlbmd0aCA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xyXG4gICAgICAgIHZhciBuZUF0dHJzTGVuZ3RoID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KSxcclxuICAgICAgICAgICAgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZW50cnkuZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSAmJlxyXG4gICAgICAgICAgICAgICAgZWxlbWVudEF0dHJzLmxlbmd0aCA9PT0gbmVBdHRyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtpZHg6IGksIGF0dHJzOiBlbGVtZW50QXR0cnN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSA/IFtdIDogY2FuZGlkYXRlcztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24gPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50KSxcclxuICAgICAgICBjTGVuZ3RoID0gY2FuZGlkYXRlcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGNMZW5ndGgpIHtcclxuICAgICAgICB2YXIgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lQXR0cnNMZW5ndGggPSBuZUF0dHJzLmxlbmd0aCxcclxuICAgICAgICAgICAgbmVBdHRyc01hcCA9IHt9O1xyXG5cclxuICAgICAgICAvL05PVEU6IGJ1aWxkIGF0dHJzIG1hcCBmb3IgdGhlIG5ldyBlbGVtZW50IHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZUF0dHIgPSBuZUF0dHJzW2ldO1xyXG5cclxuICAgICAgICAgICAgbmVBdHRyc01hcFtuZUF0dHIubmFtZV0gPSBuZUF0dHIudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNMZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNBdHRyID0gY2FuZGlkYXRlc1tqXS5hdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmVBdHRyc01hcFtjQXR0ci5uYW1lXSAhPT0gY0F0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjTGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL05PVEU6IHJlbW92ZSBib3R0b21tb3N0IGNhbmRpZGF0ZXMgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGNMZW5ndGggLSAxOyBpID49IE5PQUhfQVJLX0NBUEFDSVRZIC0gMTsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoY2FuZGlkYXRlc1tpXS5pZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe3R5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUll9KTtcclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2hFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB0aGlzLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsgPSBmdW5jdGlvbiAoZWxlbWVudCwgdG9rZW4pIHtcclxuICAgIHZhciBib29rbWFya0lkeCA9IHRoaXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBmb3IgKDsgYm9va21hcmtJZHggPj0gMDsgYm9va21hcmtJZHgtLSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNbYm9va21hcmtJZHhdID09PSB0aGlzLmJvb2ttYXJrKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4ICsgMSwgMCwge1xyXG4gICAgICAgIHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZLFxyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2ldID09PSBlbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmNsZWFyVG9MYXN0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1NlYXJjaFxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVudHJ5LmVsZW1lbnQpID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZICYmIGVudHJ5LmVsZW1lbnQgPT0gZWxlbWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBPcGVuRWxlbWVudFN0YWNrID0gcmVxdWlyZSgnLi9vcGVuX2VsZW1lbnRfc3RhY2snKSxcbiAgICBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTO1xuXG5cbmZ1bmN0aW9uIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIGNsb3NpbmdUb2tlbiwgdHJlZUFkYXB0ZXIpIHtcbiAgICB2YXIgbG9jID0gZWxlbWVudC5fX2xvY2F0aW9uO1xuXG4gICAgaWYgKCFsb2MpXG4gICAgICAgIHJldHVybjtcblxuICAgIGlmICghbG9jLnN0YXJ0VGFnKSB7XG4gICAgICAgIGxvYy5zdGFydFRhZyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBsb2Muc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGxvYy5lbmRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2luZ1Rva2VuLmxvY2F0aW9uKSB7XG4gICAgICAgIHZhciB0biA9IHRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICAvLyBOT1RFOiBGb3IgY2FzZXMgbGlrZSA8cD4gPHA+IDwvcD4gLSBGaXJzdCAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZyBhbmRcbiAgICAgICAgICAgIC8vIGZvciBjYXNlcyBsaWtlIDx0ZD4gPHA+IDwvdGQ+IC0gJ3AnIGNsb3NlcyB3aXRob3V0IGEgY2xvc2luZyB0YWdcbiAgICAgICAgICAgIGlzQ2xvc2luZ0VuZFRhZyA9IGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG4gPT09IGNsb3NpbmdUb2tlbi50YWdOYW1lO1xuXG4gICAgICAgIGlmIChpc0Nsb3NpbmdFbmRUYWcpIHtcbiAgICAgICAgICAgIGxvYy5lbmRUYWcgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsb2MuZW5kID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uLmVuZDtcbiAgICB9XG59XG5cbi8vTk9URTogcGF0Y2ggb3BlbiBlbGVtZW50cyBzdGFjaywgc28gd2UgY2FuIGFzc2lnbiBlbmQgbG9jYXRpb24gZm9yIHRoZSBlbGVtZW50c1xuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XG4gICAgdmFyIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wLmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pXG4gICAgICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLml0ZW1zW2ldLCBwYXJzZXIuY3VycmVudFRva2VuLCB0cmVlQWRhcHRlcik7XG5cbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnJlbW92ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgdmFyIHBhcnNlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcnNlciksXG4gICAgICAgIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG5cbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Jlc2V0LmNhbGwodGhpcywgaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgcGF0Y2hPcGVuRWxlbWVudHNTdGFjayh0aGlzLm9wZW5FbGVtZW50cywgcGFyc2VyKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCB8fFxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuQk9EWSAmJiB0aGlzLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHRva2VuLCB0cmVlQWRhcHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0RvY3R5cGVcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBwYXJzZXJQcm90by5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxuICAgICAgICAgICAgY25MZW5ndGggPSBkb2N1bWVudENoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnRDaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9FbGVtZW50c1xuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgLy9TbyB3ZSB3aWxsIHVzZSB0b2tlbiBsb2NhdGlvbiBzdG9yZWQgaW4gdGhpcyBtZXRob2RzIGZvciB0aGUgZWxlbWVudC5cbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHBhcnNlclByb3RvLl9hdHRhY2hFbGVtZW50VG9UcmVlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHBhcnNlci5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydFRlbXBsYXRlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcblxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy9Db21tZW50c1xuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgIH07XG5cbiAgICAvL1RleHRcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbjtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBoYXNGb3N0ZXJQYXJlbnQgPSB0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpLFxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIHRleHROb2RlSWR4ID0gaGFzRm9zdGVyUGFyZW50ICYmIHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cbiAgICAgICAgaWYgKHRleHROb2RlLl9fbG9jYXRpb24pXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxuICAgIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QnKSxcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL01pc2MgY29uc3RhbnRzXG52YXIgU0VBUkNIQUJMRV9JTkRFWF9ERUZBVUxUX1BST01QVCA9ICdUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAnLFxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxuICAgIEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSU5JVElBTF9NT0RFID0gJ0lOSVRJQUxfTU9ERScsXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxuICAgIElOX0hFQURfTU9ERSA9ICdJTl9IRUFEX01PREUnLFxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxuICAgIFRFWFRfTU9ERSA9ICdURVhUX01PREUnLFxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXG4gICAgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERScsXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxuICAgIElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJyxcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXG4gICAgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnLFxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXG4gICAgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJyxcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG52YXIgSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQID0ge307XG5cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEJPRFldID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DQVBUSU9OXSA9IElOX0NBUFRJT05fTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkJPRFldID0gSU5fQk9EWV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcblxuLy9UZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzd2l0Y2ggbWFwXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xuXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ0FQVElPTl0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URk9PVF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRSXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xuXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXG52YXIgXyA9IHt9O1xuXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBkb2N0eXBlSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcblxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcblxuX1tCRUZPUkVfSEVBRF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcblxuX1tJTl9IRUFEX01PREVdID0ge307XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XG5cbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xuXG5fW0lOX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tURVhUX01PREVdID0ge307XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGV4dDtcblxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9UQUJMRV9URVhUX01PREVdID0ge307XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xuXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fUk9XX01PREVdID0ge307XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DRUxMX01PREVdID0ge307XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNlbGw7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XG5cbl9bQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHk7XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcbiAgICAgICAgYXR0cnMgPSBbXTtcblxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IEFUVFJTLkFDVElPTixcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpbmRleFByb21wdCA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLlBST01QVCk7XG5cbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaXNpbmRleEF0dHJzID0gaXNpbmRleFN0YXJ0VGFnVG9rZW4uYXR0cnMsXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNpbmRleEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IEFUVFJTLk5BTUUgJiYgbmFtZSAhPT0gQVRUUlMuQUNUSU9OICYmIG5hbWUgIT09IEFUVFJTLlBST01QVClcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xuICAgIH1cblxuICAgIGlucHV0QXR0cnMucHVzaCh7XG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXG4gICAgICAgIHZhbHVlOiBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUVcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEF0dHJzO1xufVxuXG4vL1BhcnNlclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcbn07XG5cbi8vQVBJXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHJldHVybiBkb2N1bWVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICBmcmFnbWVudENvbnRleHQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5URU1QTEFURSwgTlMuSFRNTCwgW10pO1xuXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcblxuICAgIHRoaXMuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB0aGlzLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHZhciByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb2N1bWVudE1vY2spLFxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xufTtcblxuLy9SZXNldCBzdGF0ZVxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAnJztcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG5cbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbn07XG5cbi8vUGFyc2luZyBsb29wXG5QYXJzZXIucHJvdG90eXBlLl9pdGVyYXRlUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcblxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuc3RvcHBlZClcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XG59O1xuXG4vL1RleHQgcGFyc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcbiAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufTtcblxuLy9GcmFnbWVudCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XG4gICAgICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0IDpcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB9IHdoaWxlIChub2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn07XG5cbi8vVHJlZSBtdXRhdGlvblxuUGFyc2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKHRtcGwpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgdmFyIGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTtcblxuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICB9XG59O1xuXG4vL1Rva2VuIHByb2Nlc3NpbmdcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcblxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0NoYXJhY3RlclRva2VuID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXG4gICAgICAgIGlzTWF0aE1MVGV4dFN0YXJ0VGFnID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xuXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZVN0YXJ0VGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xuICAgIHJldHVybiBmYWtlVG9rZW47XG59O1xuXG4vL0ludGVncmF0aW9uIHBvaW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSxcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycyk7XG59O1xuXG4vL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB1bm9wZW5JZHg7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy9DbG9zZSBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VUYWJsZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xufTtcblxuLy9JbnNlcnRpb24gbW9kZXNcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AsIGxhc3QgPSBmYWxzZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgbGFzdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcblxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuaGVhZEVsZW1lbnQgPyBBRlRFUl9IRUFEX01PREUgOiBCRUZPUkVfSEVBRF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcbiAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoYW5jZXN0b3IpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wdXNoVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbW9kZTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3BvcFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1t0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3BdO1xufTtcblxuLy9Gb3N0ZXIgcGFyZW50aW5nXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2F0aW9uID0ge1xuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG5cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcblxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50VGV4dCA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICBlbHNlXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChsb2NhdGlvbi5wYXJlbnQsIGNoYXJzKTtcbn07XG5cbi8vU3BlY2lhbCBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xufTtcblxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcblxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG5cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcbiAgICAgICAgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLFxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBQV9JTk5FUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG5cbiAgICAgICAgLy9OT1RFOiBzdG9yZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcblxuICAgICAgICB2YXIgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGNvbW1vbkFuY2VzdG9yKSlcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbnMsIHRva2VuLmF0dHJzKTtcblxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcblxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG59XG5cbi8vQWxnb3JpdGhtIGVudHJ5IHBvaW50XG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG5cblxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaWdub3JlVG9rZW4ocCwgdG9rZW4pIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLzEyLjIuNS40LjEgVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcbiAgICAgICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjIgVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNCBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuQ09NTUFORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XG5cbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TVFlMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG5cbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCh0b2tlbi50YWdOYW1lID09PSAkLkxJICYmIHRuID09PSAkLkxJKSB8fFxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRuICE9PSAkLkFERFJFU1MgJiYgdG4gIT09ICQuRElWICYmIHRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufVxuXG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XG4gICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuTEFCRUwpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkxBQkVMKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcbn1cblxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGlmIChwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9DQVBUSU9OX01PREUgfHxcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xufVxuXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG5cbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICBlbHNlXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG59XG5cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXG4gICAgICAgICAgICAgICAgYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxuICAgICAgICAgICAgICAgIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcbiAgICAgICAgICAgICAgICBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgICAgICAgICBzdmdTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXG4gICAgICAgICAgICAgICAgbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcbiAgICAgICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxuICAgICAgICAgICAgICAgIGlzaW5kZXhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXG4gICAgICAgICAgICAgICAgbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJPRFkpO1xuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5MSSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPiAtMSlcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5cblxuZnVuY3Rpb24gZW9mSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XG59XG5cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xufVxuXG5mdW5jdGlvbiB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UQUJMRSk7XG5cbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5UUilcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVClcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cblxuLy8xMi4yLjUuNC4xMCBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4xMSBUaGUgXCJpbiBjYXB0aW9uXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xMiBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNPTEdST1VQKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5cbi8vMTIuMi41LjQuMTUgVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcblxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQgfHwgdG4gPT09ICQuS0VZR0VOIHx8IHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgdmFyIHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0sXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OICYmIHByZXZPcGVuRWxlbWVudFRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE3IFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE4IFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cblxuLy8xMi4yLjUuNC4xOSBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcblxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREU7XG59XG5cbi8vMTIuMi41LjQuMjIgVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwLm9wZW5FbGVtZW50cy5jdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pha2VhcmNoaWJhbGQvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMi4zLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5ID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkY3VzdG9tU2NoZWR1bGVyRm47XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuXSA9IGNhbGxiYWNrO1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2xpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKyAxXSA9IGFyZztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKz0gMjtcbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID09PSAyKSB7XG4gICAgICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAgICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAgICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcChhc2FwRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwID0gYXNhcEZuO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgfHwge307XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbiAgICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAvLyBub2RlXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCkge1xuICAgICAgdmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAgICAgLy8gc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW5zdGVhZFxuICAgICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14oPzooXFxkKylcXC4pPyg/OihcXGQrKVxcLik/KFxcKnxcXGQrKSQvKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJzaW9uWzJdID09PSAnMTAnKSB7XG4gICAgICAgIG5leHRUaWNrID0gc2V0SW1tZWRpYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBuZXh0VGljayhsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0eFxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB3ZWIgd29ya2VyXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoLCAxKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2goKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW47IGkrPTIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldO1xuICAgICAgICB2YXIgYXJnID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV07XG5cbiAgICAgICAgY2FsbGJhY2soYXJnKTtcblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByID0gcmVxdWlyZTtcbiAgICAgICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaDtcbiAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKCkge31cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCA9IDE7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICAgICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkge1xuICAgICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGhlbiA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4obWF5YmVUaGVuYWJsZSk7XG5cbiAgICAgICAgaWYgKHRoZW4gPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuXG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQ7XG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgICAgIHZhciBsZW5ndGggPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0aW9uO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHZhciBoYXNDYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICAgICAgdmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDtcblxuICAgICAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgICAgIHZhbHVlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoZW51bWVyYXRvci5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcbiAgICAgICAgZW51bWVyYXRvci5faW5wdXQgICAgID0gaW5wdXQ7XG4gICAgICAgIGVudW1lcmF0b3IubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGVudW1lcmF0b3IuX2luaXQoKTtcblxuICAgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7XG4gICAgICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl92YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoaW5wdXQpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgbGVuZ3RoICA9IGVudW1lcmF0b3IubGVuZ3RoO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG4gICAgICB2YXIgaW5wdXQgICA9IGVudW1lcmF0b3IuX2lucHV0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkge1xuICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxsO1xuICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG4gICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsKGVudHJpZXMpIHtcbiAgICAgIHJldHVybiBuZXcgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQodGhpcywgZW50cmllcykucHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2UoZW50cmllcykge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgZnVuY3Rpb24gb25GdWxmaWxsbWVudCh2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlKG9iamVjdCkge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmU7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3QocmVhc29uKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2U7XG4gICAgLyoqXG4gICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gICAgICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gICAgICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICAgICAgVGVybWlub2xvZ3lcbiAgICAgIC0tLS0tLS0tLS0tXG5cbiAgICAgIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gICAgICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gICAgICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgICAgIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gICAgICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gICAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gICAgICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICAgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gICAgICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gICAgICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgICAgIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgICAgIEJhc2ljIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tXG5cbiAgICAgIGBgYGpzXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBvbiBzdWNjZXNzXG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgICAgIC8vIG9uIGZhaWx1cmVcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9KTtcblxuICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgLy8gb24gcmVqZWN0aW9uXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBZHZhbmNlZCBVc2FnZTpcbiAgICAgIC0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gICAgICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgICAgIGBgYGpzXG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgICAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICAgICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgICAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQGNsYXNzIFByb21pc2VcbiAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAY29uc3RydWN0b3JcbiAgICAqL1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgICB0aGlzLl9pZCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyKys7XG4gICAgICB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wICE9PSByZXNvbHZlcikge1xuICAgICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihyZXNvbHZlcikpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLmFsbCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZXNvbHZlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZWplY3QgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldFNjaGVkdWxlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXI7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldEFzYXAgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fYXNhcCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwO1xuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLFxuXG4gICAgLyoqXG4gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQ2hhaW5pbmdcbiAgICAgIC0tLS0tLS0tXG5cbiAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gICAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIHJlamVjdGVkLCBgcmVhc29uYCB3aWxsIGJlICdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jy5cbiAgICAgIH0pO1xuICAgICAgYGBgXG4gICAgICBJZiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIGRvZXMgbm90IHNwZWNpZnkgYSByZWplY3Rpb24gaGFuZGxlciwgcmVqZWN0aW9uIHJlYXNvbnMgd2lsbCBiZSBwcm9wYWdhdGVkIGZ1cnRoZXIgZG93bnN0cmVhbS5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBc3NpbWlsYXRpb25cbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgICAgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlIGluIHRoZVxuICAgICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgZnVsZmlsbHMsIHdlJ2xsIGhhdmUgdGhlIHZhbHVlIGhlcmVcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgU2ltcGxlIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgICAgLS0tLS0tLS0tLS0tLS1cblxuICAgICAgU3luY2hyb25vdXMgRXhhbXBsZVxuXG4gICAgICBgYGBqYXZhc2NyaXB0XG4gICAgICB2YXIgYXV0aG9yLCBib29rcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgICBib29rcyAgPSBmaW5kQm9va3NCeUF1dGhvcihhdXRob3IpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG5cbiAgICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuXG4gICAgICB9XG5cbiAgICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZEF1dGhvcigpLlxuICAgICAgICB0aGVuKGZpbmRCb29rc0J5QXV0aG9yKS5cbiAgICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAbWV0aG9kIHRoZW5cbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICB0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudC5fcmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9LFxuXG4gICAgLyoqXG4gICAgICBgY2F0Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdoaWNoIG1ha2VzIGl0IHRoZSBzYW1lXG4gICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3luY2hyb25vdXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRBdXRob3IoKTtcbiAgICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9XG5cbiAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXNcbiAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCBjYXRjaFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICAgKi9cbiAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbCgpIHtcbiAgICAgIHZhciBsb2NhbDtcblxuICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gc2VsZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgICAgaWYgKFAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKSA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2NhbC5Qcm9taXNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQ7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJHBvbHlmaWxsO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2UgPSB7XG4gICAgICAnUHJvbWlzZSc6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0LFxuICAgICAgJ3BvbHlmaWxsJzogbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0XG4gICAgfTtcblxuICAgIC8qIGdsb2JhbCBkZWZpbmU6dHJ1ZSBtb2R1bGU6dHJ1ZSB3aW5kb3c6IHRydWUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlOyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7XG4gICAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbJ0VTNlByb21pc2UnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0KCk7XG59KS5jYWxsKHRoaXMpO1xuXG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5bGN6WXRjSEp2YldselpTOWthWE4wTDJWek5pMXdjbTl0YVhObExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9oWEc0Z0tpQkFiM1psY25acFpYY2daWE0yTFhCeWIyMXBjMlVnTFNCaElIUnBibmtnYVcxd2JHVnRaVzUwWVhScGIyNGdiMllnVUhKdmJXbHpaWE12UVNzdVhHNGdLaUJBWTI5d2VYSnBaMmgwSUVOdmNIbHlhV2RvZENBb1l5a2dNakF4TkNCWlpXaDFaR0VnUzJGMGVpd2dWRzl0SUVSaGJHVXNJRk4wWldaaGJpQlFaVzV1WlhJZ1lXNWtJR052Ym5SeWFXSjFkRzl5Y3lBb1EyOXVkbVZ5YzJsdmJpQjBieUJGVXpZZ1FWQkpJR0o1SUVwaGEyVWdRWEpqYUdsaVlXeGtLVnh1SUNvZ1FHeHBZMlZ1YzJVZ0lDQk1hV05sYm5ObFpDQjFibVJsY2lCTlNWUWdiR2xqWlc1elpWeHVJQ29nSUNBZ0lDQWdJQ0FnSUNCVFpXVWdhSFIwY0hNNkx5OXlZWGN1WjJsMGFIVmlkWE5sY21OdmJuUmxiblF1WTI5dEwycGhhMlZoY21Ob2FXSmhiR1F2WlhNMkxYQnliMjFwYzJVdmJXRnpkR1Z5TDB4SlEwVk9VMFZjYmlBcUlFQjJaWEp6YVc5dUlDQWdNaTR6TGpCY2JpQXFMMXh1WEc0b1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ1hDSjFjMlVnYzNSeWFXTjBYQ0k3WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNSdlltcGxZM1JQY2taMWJtTjBhVzl1S0hncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnZUNBOVBUMGdKMloxYm1OMGFXOXVKeUI4ZkNBb2RIbHdaVzltSUhnZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUhnZ0lUMDlJRzUxYkd3cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWg0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pXOW1JSGdnUFQwOUlDZG1kVzVqZEdsdmJpYzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JwYzAxaGVXSmxWR2hsYm1GaWJHVW9lQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFI1Y0dWdlppQjRJRDA5UFNBbmIySnFaV04wSnlBbUppQjRJQ0U5UFNCdWRXeHNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtkWFJwYkhNa0pGOXBjMEZ5Y21GNU8xeHVJQ0FnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlU0E5SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZUNrZ1BUMDlJQ2RiYjJKcVpXTjBJRUZ5Y21GNVhTYzdYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRjlwYzBGeWNtRjVJRDBnUVhKeVlYa3VhWE5CY25KaGVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNScGMwRnljbUY1SUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlVHRjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHeGxiaUE5SURBN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IwYjFOMGNtbHVaeUE5SUh0OUxuUnZVM1J5YVc1bk8xeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZG1WeWRIaE9aWGgwTzF4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZM1Z6ZEc5dFUyTm9aV1IxYkdWeVJtNDdYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFnUFNCbWRXNWpkR2x2YmlCaGMyRndLR05oYkd4aVlXTnJMQ0JoY21jcElIdGNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1J4ZFdWMVpWdHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdVhTQTlJR05oYkd4aVlXTnJPMXh1SUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMnhwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLeUF4WFNBOUlHRnlaenRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLejBnTWp0Y2JpQWdJQ0FnSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdUlEMDlQU0F5S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxtSUd4bGJpQnBjeUF5TENCMGFHRjBJRzFsWVc1eklIUm9ZWFFnZDJVZ2JtVmxaQ0IwYnlCelkyaGxaSFZzWlNCaGJpQmhjM2x1WXlCbWJIVnphQzVjYmlBZ0lDQWdJQ0FnTHk4Z1NXWWdZV1JrYVhScGIyNWhiQ0JqWVd4c1ltRmphM01nWVhKbElIRjFaWFZsWkNCaVpXWnZjbVVnZEdobElIRjFaWFZsSUdseklHWnNkWE5vWldRc0lIUm9aWGxjYmlBZ0lDQWdJQ0FnTHk4Z2QybHNiQ0JpWlNCd2NtOWpaWE56WldRZ1lua2dkR2hwY3lCbWJIVnphQ0IwYUdGMElIZGxJR0Z5WlNCelkyaGxaSFZzYVc1bkxseHVJQ0FnSUNBZ0lDQnBaaUFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JtYkhWemFDazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pITmphR1ZrZFd4bFJteDFjMmdvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWElvYzJOb1pXUjFiR1ZHYmlrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKR04xYzNSdmJWTmphR1ZrZFd4bGNrWnVJRDBnYzJOb1pXUjFiR1ZHYmp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2MyVjBRWE5oY0NoaGMyRndSbTRwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3SUQwZ1lYTmhjRVp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZbkp2ZDNObGNsZHBibVJ2ZHlBOUlDaDBlWEJsYjJZZ2QybHVaRzkzSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnUHlCM2FXNWtiM2NnT2lCMWJtUmxabWx1WldRN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JpY205M2MyVnlSMnh2WW1Gc0lEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdKeWIzZHpaWEpYYVc1a2IzY2dmSHdnZTMwN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JDY205M2MyVnlUWFYwWVhScGIyNVBZbk5sY25abGNpQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaWNtOTNjMlZ5UjJ4dlltRnNMazExZEdGMGFXOXVUMkp6WlhKMlpYSWdmSHdnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHSnliM2R6WlhKSGJHOWlZV3d1VjJWaVMybDBUWFYwWVhScGIyNVBZbk5sY25abGNqdGNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdselRtOWtaU0E5SUhSNWNHVnZaaUJ3Y205alpYTnpJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUI3ZlM1MGIxTjBjbWx1Wnk1allXeHNLSEJ5YjJObGMzTXBJRDA5UFNBblcyOWlhbVZqZENCd2NtOWpaWE56WFNjN1hHNWNiaUFnSUNBdkx5QjBaWE4wSUdadmNpQjNaV0lnZDI5eWEyVnlJR0oxZENCdWIzUWdhVzRnU1VVeE1GeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElnUFNCMGVYQmxiMllnVldsdWREaERiR0Z0Y0dWa1FYSnlZWGtnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzF3YjNKMFUyTnlhWEIwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlaY2JpQWdJQ0FnSUhSNWNHVnZaaUJOWlhOellXZGxRMmhoYm01bGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjN1hHNWNiaUFnSUNBdkx5QnViMlJsWEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVNWxlSFJVYVdOcktDa2dlMXh1SUNBZ0lDQWdkbUZ5SUc1bGVIUlVhV05ySUQwZ2NISnZZMlZ6Y3k1dVpYaDBWR2xqYXp0Y2JpQWdJQ0FnSUM4dklHNXZaR1VnZG1WeWMybHZiaUF3TGpFd0xuZ2daR2x6Y0d4aGVYTWdZU0JrWlhCeVpXTmhkR2x2YmlCM1lYSnVhVzVuSUhkb1pXNGdibVY0ZEZScFkyc2dhWE1nZFhObFpDQnlaV04xY25OcGRtVnNlVnh1SUNBZ0lDQWdMeThnYzJWMFNXMXRaV1JwWVhSbElITm9iM1ZzWkNCaVpTQjFjMlZrSUdsdWMzUmxZV1FnYVc1emRHVmhaRnh1SUNBZ0lDQWdkbUZ5SUhabGNuTnBiMjRnUFNCd2NtOWpaWE56TG5abGNuTnBiMjV6TG01dlpHVXViV0YwWTJnb0wxNG9Qem9vWEZ4a0t5bGNYQzRwUHlnL09paGNYR1FyS1Z4Y0xpay9LRnhjS254Y1hHUXJLU1F2S1R0Y2JpQWdJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0habGNuTnBiMjRwSUNZbUlIWmxjbk5wYjI1Yk1WMGdQVDA5SUNjd0p5QW1KaUIyWlhKemFXOXVXekpkSUQwOVBTQW5NVEFuS1NCN1hHNGdJQ0FnSUNBZ0lHNWxlSFJVYVdOcklEMGdjMlYwU1cxdFpXUnBZWFJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCdVpYaDBWR2xqYXloc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtabXgxYzJncE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QjJaWEowZUZ4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVldaWEowZUZScGJXVnlLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtkbVZ5ZEhoT1pYaDBLR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSbWJIVnphQ2s3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdsMFpYSmhkR2x2Ym5NZ1BTQXdPMXh1SUNBZ0lDQWdkbUZ5SUc5aWMyVnlkbVZ5SUQwZ2JtVjNJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSQ2NtOTNjMlZ5VFhWMFlYUnBiMjVQWW5ObGNuWmxjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1pteDFjMmdwTzF4dUlDQWdJQ0FnZG1GeUlHNXZaR1VnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZVWlhoMFRtOWtaU2duSnlrN1hHNGdJQ0FnSUNCdlluTmxjblpsY2k1dlluTmxjblpsS0c1dlpHVXNJSHNnWTJoaGNtRmpkR1Z5UkdGMFlUb2dkSEoxWlNCOUtUdGNibHh1SUNBZ0lDQWdjbVYwZFhKdUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0J1YjJSbExtUmhkR0VnUFNBb2FYUmxjbUYwYVc5dWN5QTlJQ3NyYVhSbGNtRjBhVzl1Y3lBbElESXBPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUIzWldJZ2QyOXlhMlZ5WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVMWxjM05oWjJWRGFHRnVibVZzS0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR05vWVc1dVpXd2dQU0J1WlhjZ1RXVnpjMkZuWlVOb1lXNXVaV3dvS1R0Y2JpQWdJQ0FnSUdOb1lXNXVaV3d1Y0c5eWRERXViMjV0WlhOellXZGxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ1kyaGhibTVsYkM1d2IzSjBNaTV3YjNOMFRXVnpjMkZuWlNnd0tUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTENBeEtUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSeGRXVjFaU0E5SUc1bGR5QkJjbkpoZVNneE1EQXdLVHRjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrWm14MWMyZ29LU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnNaVzQ3SUdrclBUSXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHTmhiR3hpWVdOcklEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMmxkTzF4dUlDQWdJQ0FnSUNCMllYSWdZWEpuSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSEYxWlhWbFcya3JNVjA3WEc1Y2JpQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb1lYSm5LVHRjYmx4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjWFZsZFdWYmFWMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnhkV1YxWlZ0cEt6RmRJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtiR1Z1SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWFIwWlcxd2RGWmxjblJsZUNncElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnlJRDBnY21WeGRXbHlaVHRjYmlBZ0lDQWdJQ0FnZG1GeUlIWmxjblI0SUQwZ2NpZ25kbVZ5ZEhnbktUdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhabGNuUjRUbVY0ZENBOUlIWmxjblI0TG5KMWJrOXVURzl2Y0NCOGZDQjJaWEowZUM1eWRXNVBia052Ym5SbGVIUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZFhObFZtVnlkSGhVYVcxbGNpZ3BPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2RYTmxVMlYwVkdsdFpXOTFkQ2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUR0Y2JpQWdJQ0F2THlCRVpXTnBaR1VnZDJoaGRDQmhjM2x1WXlCdFpYUm9iMlFnZEc4Z2RYTmxJSFJ2SUhSeWFXZG5aWEpwYm1jZ2NISnZZMlZ6YzJsdVp5QnZaaUJ4ZFdWMVpXUWdZMkZzYkdKaFkydHpPbHh1SUNBZ0lHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2FYTk9iMlJsS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IxYzJWT1pYaDBWR2xqYXlncE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKRUp5YjNkelpYSk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtTQjdYRzRnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJOb1pXUjFiR1ZHYkhWemFDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlUxbGMzTmhaMlZEYUdGdWJtVnNLQ2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1luSnZkM05sY2xkcGJtUnZkeUE5UFQwZ2RXNWtaV1pwYm1Wa0lDWW1JSFI1Y0dWdlppQnlaWEYxYVhKbElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoZEhSbGJYQjBWbVZ5ZEdWNEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLQ2tnZTMxY2JseHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SElDQWdQU0IyYjJsa0lEQTdYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSQ0E5SURFN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUlDQTlJREk3WEc1Y2JpQWdJQ0IyWVhJZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1IwVlVYMVJJUlU1ZlJWSlNUMUlnUFNCdVpYY2diR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtSWEp5YjNKUFltcGxZM1FvS1R0Y2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhObGJHWkdkV3hzWm1sc2JHMWxiblFvS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGUjVjR1ZGY25KdmNpaGNJbGx2ZFNCallXNXViM1FnY21WemIyeDJaU0JoSUhCeWIyMXBjMlVnZDJsMGFDQnBkSE5sYkdaY0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1kyRnVibTkwVW1WMGRYSnVUM2R1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlVlWEJsUlhKeWIzSW9KMEVnY0hKdmJXbHpaWE1nWTJGc2JHSmhZMnNnWTJGdWJtOTBJSEpsZEhWeWJpQjBhR0YwSUhOaGJXVWdjSEp2YldselpTNG5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm5aWFJVYUdWdUtIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y205dGFYTmxMblJvWlc0N1hHNGdJQ0FnSUNCOUlHTmhkR05vS0dWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkVkRlZGOVVTRVZPWDBWU1VrOVNMbVZ5Y205eUlEMGdaWEp5YjNJN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSSFJWUmZWRWhGVGw5RlVsSlBVanRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUjBjbmxVYUdWdUtIUm9aVzRzSUhaaGJIVmxMQ0JtZFd4bWFXeHNiV1Z1ZEVoaGJtUnNaWElzSUhKbGFtVmpkR2x2YmtoaGJtUnNaWElwSUh0Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJSFJvWlc0dVkyRnNiQ2gyWVd4MVpTd2dablZzWm1sc2JHMWxiblJJWVc1a2JHVnlMQ0J5WldwbFkzUnBiMjVJWVc1a2JHVnlLVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29aU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JvWVc1a2JHVkdiM0psYVdkdVZHaGxibUZpYkdVb2NISnZiV2x6WlN3Z2RHaGxibUZpYkdVc0lIUm9aVzRwSUh0Y2JpQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWE5oY0NobWRXNWpkR2x2Ymlod2NtOXRhWE5sS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6WldGc1pXUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWeWNtOXlJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrZEhKNVZHaGxiaWgwYUdWdUxDQjBhR1Z1WVdKc1pTd2dablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2MyVmhiR1ZrS1NCN0lISmxkSFZ5YmpzZ2ZWeHVJQ0FnSUNBZ0lDQWdJSE5sWVd4bFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSb1pXNWhZbXhsSUNFOVBTQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WemIyeDJaU2h3Y205dGFYTmxMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE5sWVd4bFpDa2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJQ0FnSUNCelpXRnNaV1FnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0FnSUgwc0lDZFRaWFIwYkdVNklDY2dLeUFvY0hKdmJXbHpaUzVmYkdGaVpXd2dmSHdnSnlCMWJtdHViM2R1SUhCeWIyMXBjMlVuS1NrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0NGelpXRnNaV1FnSmlZZ1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnpaV0ZzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCbGNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwc0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVTkzYmxSb1pXNWhZbXhsS0hCeWIyMXBjMlVzSUhSb1pXNWhZbXhsS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hsYm1GaWJHVXVYM04wWVhSbElEMDlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JHVlV4R1NVeE1SVVFwSUh0Y2JpQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1puVnNabWxzYkNod2NtOXRhWE5sTENCMGFHVnVZV0pzWlM1ZmNtVnpkV3gwS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaGxibUZpYkdVdVgzTjBZWFJsSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkR2hsYm1GaWJHVXVYM0psYzNWc2RDazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnpkV0p6WTNKcFltVW9kR2hsYm1GaWJHVXNJSFZ1WkdWbWFXNWxaQ3dnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHaGhibVJzWlUxaGVXSmxWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLRzFoZVdKbFZHaGxibUZpYkdVdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUhCeWIyMXBjMlV1WTI5dWMzUnlkV04wYjNJcElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWthR0Z1Wkd4bFQzZHVWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMllYSWdkR2hsYmlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHZGxkRlJvWlc0b2JXRjVZbVZVYUdWdVlXSnNaU2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvWlc0Z1BUMDlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0xtVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBhR1Z1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0d4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWgwYUdWdUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVVp2Y21WcFoyNVVhR1Z1WVdKc1pTaHdjbTl0YVhObExDQnRZWGxpWlZSb1pXNWhZbXhsTENCMGFHVnVLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVWdQVDA5SUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J6Wld4bVJuVnNiR1pwYkd4dFpXNTBLQ2twTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRzlpYW1WamRFOXlSblZ1WTNScGIyNG9kbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2hoYm1Sc1pVMWhlV0psVkdobGJtRmliR1VvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphRkpsYW1WamRHbHZiaWh3Y205dGFYTmxLU0I3WEc0Z0lDQWdJQ0JwWmlBb2NISnZiV2x6WlM1ZmIyNWxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTl0YVhObExsOXZibVZ5Y205eUtIQnliMjFwYzJVdVgzSmxjM1ZzZENrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJnb2NISnZiV2x6WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWm5Wc1ptbHNiQ2h3Y205dGFYTmxMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdhV1lnS0hCeWIyMXBjMlV1WDNOMFlYUmxJQ0U5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSUVJVNUVTVTVIS1NCN0lISmxkSFZ5YmpzZ2ZWeHVYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMFlYUmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFTzF4dVhHNGdJQ0FnSUNCcFppQW9jSEp2YldselpTNWZjM1ZpYzJOeWFXSmxjbk11YkdWdVozUm9JQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaGMyRndLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEIxWW14cGMyZ3NJSEJ5YjIxcGMyVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBaFBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJSEJ5YjIxcGMyVXVYM04wWVhSbElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVa1ZLUlVOVVJVUTdYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQnlaV0Z6YjI0N1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoYzJGd0tHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJoU1pXcGxZM1JwYjI0c0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWtnZTF4dUlDQWdJQ0FnZG1GeUlITjFZbk5qY21saVpYSnpJRDBnY0dGeVpXNTBMbDl6ZFdKelkzSnBZbVZ5Y3p0Y2JpQWdJQ0FnSUhaaGNpQnNaVzVuZEdnZ1BTQnpkV0p6WTNKcFltVnljeTVzWlc1bmRHZzdYRzVjYmlBZ0lDQWdJSEJoY21WdWRDNWZiMjVsY25KdmNpQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFGMGdQU0JqYUdsc1pEdGNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFDQXJJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSRjBnUFNCdmJrWjFiR1pwYkd4dFpXNTBPMXh1SUNBZ0lDQWdjM1ZpYzJOeWFXSmxjbk5iYkdWdVozUm9JQ3NnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVJkSUNBOUlHOXVVbVZxWldOMGFXOXVPMXh1WEc0Z0lDQWdJQ0JwWmlBb2JHVnVaM1JvSUQwOVBTQXdJQ1ltSUhCaGNtVnVkQzVmYzNSaGRHVXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphQ3dnY0dGeVpXNTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUndkV0pzYVhOb0tIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIWmhjaUJ6ZFdKelkzSnBZbVZ5Y3lBOUlIQnliMjFwYzJVdVgzTjFZbk5qY21saVpYSnpPMXh1SUNBZ0lDQWdkbUZ5SUhObGRIUnNaV1FnUFNCd2NtOXRhWE5sTGw5emRHRjBaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tITjFZbk5qY21saVpYSnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2V5QnlaWFIxY200N0lIMWNibHh1SUNBZ0lDQWdkbUZ5SUdOb2FXeGtMQ0JqWVd4c1ltRmpheXdnWkdWMFlXbHNJRDBnY0hKdmJXbHpaUzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUhOMVluTmpjbWxpWlhKekxteGxibWQwYURzZ2FTQXJQU0F6S1NCN1hHNGdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ2MzVmljMk55YVdKbGNuTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05ySUQwZ2MzVmljMk55YVdKbGNuTmJhU0FySUhObGRIUnNaV1JkTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYUdsc1pDa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWRtOXJaVU5oYkd4aVlXTnJLSE5sZEhSc1pXUXNJR05vYVd4a0xDQmpZV3hzWW1GamF5d2daR1YwWVdsc0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheWhrWlhSaGFXd3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMVluTmpjbWxpWlhKekxteGxibWQwYUNBOUlEQTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1JYSnliM0pQWW1wbFkzUW9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnljbTl5SUQwZ2JuVnNiRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVkZKWlgwTkJWRU5JWDBWU1VrOVNJRDBnYm1WM0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFVnljbTl5VDJKcVpXTjBLQ2s3WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1IwY25sRFlYUmphQ2hqWVd4c1ltRmpheXdnWkdWMFlXbHNLU0I3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRnNiR0poWTJzb1pHVjBZV2xzS1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdvWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlVVbGxmUTBGVVEwaGZSVkpTVDFJdVpYSnliM0lnUFNCbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1ZGSlpYME5CVkVOSVgwVlNVazlTTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2x1ZG05clpVTmhiR3hpWVdOcktITmxkSFJzWldRc0lIQnliMjFwYzJVc0lHTmhiR3hpWVdOckxDQmtaWFJoYVd3cElIdGNiaUFnSUNBZ0lIWmhjaUJvWVhORFlXeHNZbUZqYXlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOR2RXNWpkR2x2YmloallXeHNZbUZqYXlrc1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdVc0lHVnljbTl5TENCemRXTmpaV1ZrWldRc0lHWmhhV3hsWkR0Y2JseHVJQ0FnSUNBZ2FXWWdLR2hoYzBOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2RISjVRMkYwWTJnb1kyRnNiR0poWTJzc0lHUmxkR0ZwYkNrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSVVVsbGZRMEZVUTBoZlJWSlNUMUlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1ZV2xzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHVnljbTl5SUQwZ2RtRnNkV1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4xWTJObFpXUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9jSEp2YldselpTQTlQVDBnZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWTJGdWJtOTBVbVYwZFhKdVQzZHVLQ2twTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlHUmxkR0ZwYkR0Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZsWkdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVXVYM04wWVhSbElDRTlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JRUlU1RVNVNUhLU0I3WEc0Z0lDQWdJQ0FnSUM4dklHNXZiM0JjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYUdGelEyRnNiR0poWTJzZ0ppWWdjM1ZqWTJWbFpHVmtLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGMyOXNkbVVvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2htWVdsc1pXUXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9jMlYwZEd4bFpDQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoelpYUjBiR1ZrSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkbUZzZFdVcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWFYUnBZV3hwZW1WUWNtOXRhWE5sS0hCeWIyMXBjMlVzSUhKbGMyOXNkbVZ5S1NCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxjaWhtZFc1amRHbHZiaUJ5WlhOdmJIWmxVSEp2YldselpTaDJZV3gxWlNsN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lIMHNJR1oxYm1OMGFXOXVJSEpsYW1WamRGQnliMjFwYzJVb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtaVzUxYldWeVlYUnZjaVFrUlc1MWJXVnlZWFJ2Y2loRGIyNXpkSEoxWTNSdmNpd2dhVzV3ZFhRcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmx4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmFXNXpkR0Z1WTJWRGIyNXpkSEoxWTNSdmNpQTlJRU52Ym5OMGNuVmpkRzl5TzF4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1d2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNWZkbUZzYVdSaGRHVkpibkIxZENocGJuQjFkQ2twSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZhVzV3ZFhRZ0lDQWdJRDBnYVc1d2RYUTdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1YkdWdVozUm9JQ0FnSUNBOUlHbHVjSFYwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GMGIzSXVYMmx1YVhRb0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm1kV3htYVd4c0tHVnVkVzFsY21GMGIzSXVjSEp2YldselpTd2daVzUxYldWeVlYUnZjaTVmY21WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoZEc5eUxteGxibWQwYUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb0lIeDhJREE3WEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZaVzUxYldWeVlYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1Z1ZFcxbGNtRjBiM0l1WDNKbGJXRnBibWx1WnlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaGxiblZ0WlhKaGRHOXlMbkJ5YjIxcGMyVXNJR1Z1ZFcxbGNtRjBiM0l1WDNKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnlaV3BsWTNRb1pXNTFiV1Z5WVhSdmNpNXdjbTl0YVhObExDQmxiblZ0WlhKaGRHOXlMbDkyWVd4cFpHRjBhVzl1UlhKeWIzSW9LU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHVnVkVzFsY21GMGIzSWtKRVZ1ZFcxbGNtRjBiM0l1Y0hKdmRHOTBlWEJsTGw5MllXeHBaR0YwWlVsdWNIVjBJRDBnWm5WdVkzUnBiMjRvYVc1d2RYUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RYUnBiSE1rSkdselFYSnlZWGtvYVc1d2RYUXBPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1pXNTFiV1Z5WVhSdmNpUWtSVzUxYldWeVlYUnZjaTV3Y205MGIzUjVjR1V1WDNaaGJHbGtZWFJwYjI1RmNuSnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QkZjbkp2Y2lnblFYSnlZWGtnVFdWMGFHOWtjeUJ0ZFhOMElHSmxJSEJ5YjNacFpHVmtJR0Z1SUVGeWNtRjVKeWs3WEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JGYm5WdFpYSmhkRzl5TG5CeWIzUnZkSGx3WlM1ZmFXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmY21WemRXeDBJRDBnYm1WM0lFRnljbUY1S0hSb2FYTXViR1Z1WjNSb0tUdGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JrWldaaGRXeDBJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR1Z1ZFcxbGNtRjBiM0lrSkVWdWRXMWxjbUYwYjNJN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYMlZ1ZFcxbGNtRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR1Z1ZFcxbGNtRjBiM0lnUFNCMGFHbHpPMXh1WEc0Z0lDQWdJQ0IyWVhJZ2JHVnVaM1JvSUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb08xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc0Z0lDQWdJQ0IyWVhJZ2FXNXdkWFFnSUNBOUlHVnVkVzFsY21GMGIzSXVYMmx1Y0hWME8xeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2NISnZiV2x6WlM1ZmMzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGQkZUa1JKVGtjZ0ppWWdhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDJWaFkyaEZiblJ5ZVNocGJuQjFkRnRwWFN3Z2FTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSbGJuVnRaWEpoZEc5eUpDUkZiblZ0WlhKaGRHOXlMbkJ5YjNSdmRIbHdaUzVmWldGamFFVnVkSEo1SUQwZ1puVnVZM1JwYjI0b1pXNTBjbmtzSUdrcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmlBZ0lDQWdJSFpoY2lCaklEMGdaVzUxYldWeVlYUnZjaTVmYVc1emRHRnVZMlZEYjI1emRISjFZM1J2Y2p0Y2JseHVJQ0FnSUNBZ2FXWWdLR3hwWWlSbGN6WWtjSEp2YldselpTUjFkR2xzY3lRa2FYTk5ZWGxpWlZSb1pXNWhZbXhsS0dWdWRISjVLU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aVzUwY25rdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUdNZ0ppWWdaVzUwY25rdVgzTjBZWFJsSUNFOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlc1MGNua3VYMjl1WlhKeWIzSWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENobGJuUnllUzVmYzNSaGRHVXNJR2tzSUdWdWRISjVMbDl5WlhOMWJIUXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzZHBiR3hUWlhSMGJHVkJkQ2hqTG5KbGMyOXNkbVVvWlc1MGNua3BMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZjbVZ0WVdsdWFXNW5MUzA3WEc0Z0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzSmxjM1ZzZEZ0cFhTQTlJR1Z1ZEhKNU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYM05sZEhSc1pXUkJkQ0E5SUdaMWJtTjBhVzl1S0hOMFlYUmxMQ0JwTENCMllXeDFaU2tnZTF4dUlDQWdJQ0FnZG1GeUlHVnVkVzFsY21GMGIzSWdQU0IwYUdsek8xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc1Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBOVBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpXMWhhVzVwYm1jdExUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpYTjFiSFJiYVYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMDlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z1pXNTFiV1Z5WVhSdmNpNWZjbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pFVnVkVzFsY21GMGIzSXVjSEp2ZEc5MGVYQmxMbDkzYVd4c1UyVjBkR3hsUVhRZ1BTQm1kVzVqZEdsdmJpaHdjbTl0YVhObExDQnBLU0I3WEc0Z0lDQWdJQ0IyWVhJZ1pXNTFiV1Z5WVhSdmNpQTlJSFJvYVhNN1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaHdjbTl0YVhObExDQjFibVJsWm1sdVpXUXNJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSR1ZVeEdTVXhNUlVRc0lHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNJR1oxYm1OMGFXOXVLSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5elpYUjBiR1ZrUVhRb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1VrVktSVU5VUlVRc0lHa3NJSEpsWVhOdmJpazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkdGc2JDUWtZV3hzS0dWdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pHUmxabUYxYkhRb2RHaHBjeXdnWlc1MGNtbGxjeWt1Y0hKdmJXbHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKR0ZzYkNRa1lXeHNPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKaFkyVWtKSEpoWTJVb1pXNTBjbWxsY3lrZ2UxeHVJQ0FnSUNBZ0x5cHFjMmhwYm5RZ2RtRnNhV1IwYUdsek9uUnlkV1VnS2k5Y2JpQWdJQ0FnSUhaaGNpQkRiMjV6ZEhKMVkzUnZjaUE5SUhSb2FYTTdYRzVjYmlBZ0lDQWdJSFpoY2lCd2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb0lXeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOQmNuSmhlU2hsYm5SeWFXVnpLU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaGJpQmhjbkpoZVNCMGJ5QnlZV05sTGljcEtUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJzWlc1bmRHZ2dQU0JsYm5SeWFXVnpMbXhsYm1kMGFEdGNibHh1SUNBZ0lDQWdablZ1WTNScGIyNGdiMjVHZFd4bWFXeHNiV1Z1ZENoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnYjI1U1pXcGxZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnY0hKdmJXbHpaUzVmYzNSaGRHVWdQVDA5SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkZCRlRrUkpUa2NnSmlZZ2FTQThJR3hsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaERiMjV6ZEhKMVkzUnZjaTV5WlhOdmJIWmxLR1Z1ZEhKcFpYTmJhVjBwTENCMWJtUmxabWx1WldRc0lHOXVSblZzWm1sc2JHMWxiblFzSUc5dVVtVnFaV04wYVc5dUtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WVdObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtRmpaU1FrY21GalpUdGNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WlhOdmJIWmxKQ1J5WlhOdmJIWmxLRzlpYW1WamRDa2dlMXh1SUNBZ0lDQWdMeXBxYzJocGJuUWdkbUZzYVdSMGFHbHpPblJ5ZFdVZ0tpOWNiaUFnSUNBZ0lIWmhjaUJEYjI1emRISjFZM1J2Y2lBOUlIUm9hWE03WEc1Y2JpQWdJQ0FnSUdsbUlDaHZZbXBsWTNRZ0ppWWdkSGx3Wlc5bUlHOWlhbVZqZENBOVBUMGdKMjlpYW1WamRDY2dKaVlnYjJKcVpXTjBMbU52Ym5OMGNuVmpkRzl5SUQwOVBTQkRiMjV6ZEhKMVkzUnZjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjJKcVpXTjBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NISnZiV2x6WlNBOUlHNWxkeUJEYjI1emRISjFZM1J2Y2loc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLVHRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEpsYzI5c2RtVW9jSEp2YldselpTd2diMkpxWldOMEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd2NtOXRhWE5sTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZ6YjJ4MlpTUWtaR1ZtWVhWc2RDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpISmxjMjlzZG1Va0pISmxjMjlzZG1VN1hHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZxWldOMEpDUnlaV3BsWTNRb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBdkttcHphR2x1ZENCMllXeHBaSFJvYVhNNmRISjFaU0FxTDF4dUlDQWdJQ0FnZG1GeUlFTnZibk4wY25WamRHOXlJRDBnZEdocGN6dGNiaUFnSUNBZ0lIWmhjaUJ3Y205dGFYTmxJRDBnYm1WM0lFTnZibk4wY25WamRHOXlLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRzV2YjNBcE8xeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjSEp2YldselpUdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKbGFtVmpkQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKSEpsYW1WamRDUWtjbVZxWldOME8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmpiM1Z1ZEdWeUlEMGdNRHRjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzFKbGMyOXNkbVZ5S0NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaElISmxjMjlzZG1WeUlHWjFibU4wYVc5dUlHRnpJSFJvWlNCbWFYSnpkQ0JoY21kMWJXVnVkQ0IwYnlCMGFHVWdjSEp2YldselpTQmpiMjV6ZEhKMVkzUnZjaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzA1bGR5Z3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWENKR1lXbHNaV1FnZEc4Z1kyOXVjM1J5ZFdOMElDZFFjbTl0YVhObEp6b2dVR3hsWVhObElIVnpaU0IwYUdVZ0oyNWxkeWNnYjNCbGNtRjBiM0lzSUhSb2FYTWdiMkpxWldOMElHTnZibk4wY25WamRHOXlJR05oYm01dmRDQmlaU0JqWVd4c1pXUWdZWE1nWVNCbWRXNWpkR2x2Ymk1Y0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVN1hHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCUWNtOXRhWE5sSUc5aWFtVmpkSE1nY21Wd2NtVnpaVzUwSUhSb1pTQmxkbVZ1ZEhWaGJDQnlaWE4xYkhRZ2IyWWdZVzRnWVhONWJtTm9jbTl1YjNWeklHOXdaWEpoZEdsdmJpNGdWR2hsWEc0Z0lDQWdJQ0J3Y21sdFlYSjVJSGRoZVNCdlppQnBiblJsY21GamRHbHVaeUIzYVhSb0lHRWdjSEp2YldselpTQnBjeUIwYUhKdmRXZG9JR2wwY3lCZ2RHaGxibUFnYldWMGFHOWtMQ0IzYUdsamFGeHVJQ0FnSUNBZ2NtVm5hWE4wWlhKeklHTmhiR3hpWVdOcmN5QjBieUJ5WldObGFYWmxJR1ZwZEdobGNpQmhJSEJ5YjIxcGMyVW5jeUJsZG1WdWRIVmhiQ0IyWVd4MVpTQnZjaUIwYUdVZ2NtVmhjMjl1WEc0Z0lDQWdJQ0IzYUhrZ2RHaGxJSEJ5YjIxcGMyVWdZMkZ1Ym05MElHSmxJR1oxYkdacGJHeGxaQzVjYmx4dUlDQWdJQ0FnVkdWeWJXbHViMnh2WjNsY2JpQWdJQ0FnSUMwdExTMHRMUzB0TFMwdFhHNWNiaUFnSUNBZ0lDMGdZSEJ5YjIxcGMyVmdJR2x6SUdGdUlHOWlhbVZqZENCdmNpQm1kVzVqZEdsdmJpQjNhWFJvSUdFZ1lIUm9aVzVnSUcxbGRHaHZaQ0IzYUc5elpTQmlaV2hoZG1sdmNpQmpiMjVtYjNKdGN5QjBieUIwYUdseklITndaV05wWm1sallYUnBiMjR1WEc0Z0lDQWdJQ0F0SUdCMGFHVnVZV0pzWldBZ2FYTWdZVzRnYjJKcVpXTjBJRzl5SUdaMWJtTjBhVzl1SUhSb1lYUWdaR1ZtYVc1bGN5QmhJR0IwYUdWdVlDQnRaWFJvYjJRdVhHNGdJQ0FnSUNBdElHQjJZV3gxWldBZ2FYTWdZVzU1SUd4bFoyRnNJRXBoZG1GVFkzSnBjSFFnZG1Gc2RXVWdLR2x1WTJ4MVpHbHVaeUIxYm1SbFptbHVaV1FzSUdFZ2RHaGxibUZpYkdVc0lHOXlJR0VnY0hKdmJXbHpaU2t1WEc0Z0lDQWdJQ0F0SUdCbGVHTmxjSFJwYjI1Z0lHbHpJR0VnZG1Gc2RXVWdkR2hoZENCcGN5QjBhSEp2ZDI0Z2RYTnBibWNnZEdobElIUm9jbTkzSUhOMFlYUmxiV1Z1ZEM1Y2JpQWdJQ0FnSUMwZ1lISmxZWE52Ym1BZ2FYTWdZU0IyWVd4MVpTQjBhR0YwSUdsdVpHbGpZWFJsY3lCM2FIa2dZU0J3Y205dGFYTmxJSGRoY3lCeVpXcGxZM1JsWkM1Y2JpQWdJQ0FnSUMwZ1lITmxkSFJzWldSZ0lIUm9aU0JtYVc1aGJDQnlaWE4wYVc1bklITjBZWFJsSUc5bUlHRWdjSEp2YldselpTd2dablZzWm1sc2JHVmtJRzl5SUhKbGFtVmpkR1ZrTGx4dVhHNGdJQ0FnSUNCQklIQnliMjFwYzJVZ1kyRnVJR0psSUdsdUlHOXVaU0J2WmlCMGFISmxaU0J6ZEdGMFpYTTZJSEJsYm1ScGJtY3NJR1oxYkdacGJHeGxaQ3dnYjNJZ2NtVnFaV04wWldRdVhHNWNiaUFnSUNBZ0lGQnliMjFwYzJWeklIUm9ZWFFnWVhKbElHWjFiR1pwYkd4bFpDQm9ZWFpsSUdFZ1puVnNabWxzYkcxbGJuUWdkbUZzZFdVZ1lXNWtJR0Z5WlNCcGJpQjBhR1VnWm5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0J6ZEdGMFpTNGdJRkJ5YjIxcGMyVnpJSFJvWVhRZ1lYSmxJSEpsYW1WamRHVmtJR2hoZG1VZ1lTQnlaV3BsWTNScGIyNGdjbVZoYzI5dUlHRnVaQ0JoY21VZ2FXNGdkR2hsWEc0Z0lDQWdJQ0J5WldwbFkzUmxaQ0J6ZEdGMFpTNGdJRUVnWm5Wc1ptbHNiRzFsYm5RZ2RtRnNkV1VnYVhNZ2JtVjJaWElnWVNCMGFHVnVZV0pzWlM1Y2JseHVJQ0FnSUNBZ1VISnZiV2x6WlhNZ1kyRnVJR0ZzYzI4Z1ltVWdjMkZwWkNCMGJ5QXFjbVZ6YjJ4MlpTb2dZU0IyWVd4MVpTNGdJRWxtSUhSb2FYTWdkbUZzZFdVZ2FYTWdZV3h6YnlCaFhHNGdJQ0FnSUNCd2NtOXRhWE5sTENCMGFHVnVJSFJvWlNCdmNtbG5hVzVoYkNCd2NtOXRhWE5sSjNNZ2MyVjBkR3hsWkNCemRHRjBaU0IzYVd4c0lHMWhkR05vSUhSb1pTQjJZV3gxWlNkelhHNGdJQ0FnSUNCelpYUjBiR1ZrSUhOMFlYUmxMaUFnVTI4Z1lTQndjbTl0YVhObElIUm9ZWFFnS25KbGMyOXNkbVZ6S2lCaElIQnliMjFwYzJVZ2RHaGhkQ0J5WldwbFkzUnpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJ5WldwbFkzUXNJR0Z1WkNCaElIQnliMjFwYzJVZ2RHaGhkQ0FxY21WemIyeDJaWE1xSUdFZ2NISnZiV2x6WlNCMGFHRjBJR1oxYkdacGJHeHpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJtZFd4bWFXeHNMbHh1WEc1Y2JpQWdJQ0FnSUVKaGMybGpJRlZ6WVdkbE9seHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCMllYSWdjSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sS0daMWJtTjBhVzl1S0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnZiaUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9kbUZzZFdVcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2NtVnFaV04wS0hKbFlYTnZiaWs3WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2NISnZiV2x6WlM1MGFHVnVLR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWjFiR1pwYkd4dFpXNTBYRzRnSUNBZ0lDQjlMQ0JtZFc1amRHbHZiaWh5WldGemIyNHBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2IyNGdjbVZxWldOMGFXOXVYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJR0JnWUZ4dVhHNGdJQ0FnSUNCQlpIWmhibU5sWkNCVmMyRm5aVHBjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFMwdExWeHVYRzRnSUNBZ0lDQlFjbTl0YVhObGN5QnphR2x1WlNCM2FHVnVJR0ZpYzNSeVlXTjBhVzVuSUdGM1lYa2dZWE41Ym1Ob2NtOXViM1Z6SUdsdWRHVnlZV04wYVc5dWN5QnpkV05vSUdGelhHNGdJQ0FnSUNCZ1dFMU1TSFIwY0ZKbGNYVmxjM1JnY3k1Y2JseHVJQ0FnSUNBZ1lHQmdhbk5jYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR2RsZEVwVFQwNG9kWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpaHlaWE52YkhabExDQnlaV3BsWTNRcGUxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCNGFISWdQU0J1WlhjZ1dFMU1TSFIwY0ZKbGNYVmxjM1FvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJSGhvY2k1dmNHVnVLQ2RIUlZRbkxDQjFjbXdwTzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlVnUFNCb1lXNWtiR1Z5TzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV5WlhOd2IyNXpaVlI1Y0dVZ1BTQW5hbk52YmljN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSjBGalkyVndkQ2NzSUNkaGNIQnNhV05oZEdsdmJpOXFjMjl1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGJtUW9LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lHWjFibU4wYVc5dUlHaGhibVJzWlhJb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1eVpXRmtlVk4wWVhSbElEMDlQU0IwYUdsekxrUlBUa1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YzNSaGRIVnpJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSFJvYVhNdWNtVnpjRzl1YzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvSjJkbGRFcFRUMDQ2SUdBbklDc2dkWEpzSUNzZ0oyQWdabUZwYkdWa0lIZHBkR2dnYzNSaGRIVnpPaUJiSnlBcklIUm9hWE11YzNSaGRIVnpJQ3NnSjEwbktTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1oyVjBTbE5QVGlnbkwzQnZjM1J6TG1wemIyNG5LUzUwYUdWdUtHWjFibU4wYVc5dUtHcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiMjRnWm5Wc1ptbHNiRzFsYm5SY2JpQWdJQ0FnSUgwc0lHWjFibU4wYVc5dUtISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ2YmlCeVpXcGxZM1JwYjI1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRlZ1YkdsclpTQmpZV3hzWW1GamEzTXNJSEJ5YjIxcGMyVnpJR0Z5WlNCbmNtVmhkQ0JqYjIxd2IzTmhZbXhsSUhCeWFXMXBkR2wyWlhNdVhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JRY205dGFYTmxMbUZzYkNoYlhHNGdJQ0FnSUNBZ0lHZGxkRXBUVDA0b0p5OXdiM04wY3ljcExGeHVJQ0FnSUNBZ0lDQm5aWFJLVTA5T0tDY3ZZMjl0YldWdWRITW5LVnh1SUNBZ0lDQWdYU2t1ZEdobGJpaG1kVzVqZEdsdmJpaDJZV3gxWlhNcGUxeHVJQ0FnSUNBZ0lDQjJZV3gxWlhOYk1GMGdMeThnUFQ0Z2NHOXpkSE5LVTA5T1hHNGdJQ0FnSUNBZ0lIWmhiSFZsYzFzeFhTQXZMeUE5UGlCamIyMXRaVzUwYzBwVFQwNWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdWek8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUdOc1lYTnpJRkJ5YjIxcGMyVmNiaUFnSUNBZ0lFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlISmxjMjlzZG1WeVhHNGdJQ0FnSUNCVmMyVm1kV3dnWm05eUlIUnZiMnhwYm1jdVhHNGdJQ0FnSUNCQVkyOXVjM1J5ZFdOMGIzSmNiaUFnSUNBcUwxeHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLSEpsYzI5c2RtVnlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXBaQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JqYjNWdWRHVnlLeXM3WEc0Z0lDQWdJQ0IwYUdsekxsOXpkR0YwWlNBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lIUm9hWE11WDNKbGMzVnNkQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUhSb2FYTXVYM04xWW5OamNtbGlaWEp6SUQwZ1cxMDdYRzVjYmlBZ0lDQWdJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdJQ0U5UFNCeVpYTnZiSFpsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWh5WlhOdmJIWmxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa2JtVmxaSE5TWlhOdmJIWmxjaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0NFb2RHaHBjeUJwYm5OMFlXNWpaVzltSUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSdVpXVmtjMDVsZHlncE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrYVc1cGRHbGhiR2w2WlZCeWIyMXBjMlVvZEdocGN5d2djbVZ6YjJ4MlpYSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTG1Gc2JDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1eVlXTmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbUZqWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaWE52YkhabElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtVnpiMngyWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaV3BsWTNRZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNSeVpXcGxZM1FrSkdSbFptRjFiSFE3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRk5qYUdWa2RXeGxjaUE5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWEk3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRUZ6WVhBZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJWMFFYTmhjRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1ZllYTmhjQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3TzF4dVhHNGdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtKRkJ5YjIxcGMyVXVjSEp2ZEc5MGVYQmxJRDBnZTF4dUlDQWdJQ0FnWTI5dWMzUnlkV04wYjNJNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCVWFHVWdjSEpwYldGeWVTQjNZWGtnYjJZZ2FXNTBaWEpoWTNScGJtY2dkMmwwYUNCaElIQnliMjFwYzJVZ2FYTWdkR2h5YjNWbmFDQnBkSE1nWUhSb1pXNWdJRzFsZEdodlpDeGNiaUFnSUNBZ0lIZG9hV05vSUhKbFoybHpkR1Z5Y3lCallXeHNZbUZqYTNNZ2RHOGdjbVZqWldsMlpTQmxhWFJvWlhJZ1lTQndjbTl0YVhObEozTWdaWFpsYm5SMVlXd2dkbUZzZFdVZ2IzSWdkR2hsWEc0Z0lDQWdJQ0J5WldGemIyNGdkMmg1SUhSb1pTQndjbTl0YVhObElHTmhibTV2ZENCaVpTQm1kV3htYVd4c1pXUXVYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCbWFXNWtWWE5sY2lncExuUm9aVzRvWm5WdVkzUnBiMjRvZFhObGNpbDdYRzRnSUNBZ0lDQWdJQzh2SUhWelpYSWdhWE1nWVhaaGFXeGhZbXhsWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmloeVpXRnpiMjRwZTF4dUlDQWdJQ0FnSUNBdkx5QjFjMlZ5SUdseklIVnVZWFpoYVd4aFlteGxMQ0JoYm1RZ2VXOTFJR0Z5WlNCbmFYWmxiaUIwYUdVZ2NtVmhjMjl1SUhkb2VWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUTJoaGFXNXBibWRjYmlBZ0lDQWdJQzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJRlJvWlNCeVpYUjFjbTRnZG1Gc2RXVWdiMllnWUhSb1pXNWdJR2x6SUdsMGMyVnNaaUJoSUhCeWIyMXBjMlV1SUNCVWFHbHpJSE5sWTI5dVpDd2dKMlJ2ZDI1emRISmxZVzBuWEc0Z0lDQWdJQ0J3Y205dGFYTmxJR2x6SUhKbGMyOXNkbVZrSUhkcGRHZ2dkR2hsSUhKbGRIVnliaUIyWVd4MVpTQnZaaUIwYUdVZ1ptbHljM1FnY0hKdmJXbHpaU2R6SUdaMWJHWnBiR3h0Wlc1MFhHNGdJQ0FnSUNCdmNpQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2diM0lnY21WcVpXTjBaV1FnYVdZZ2RHaGxJR2hoYm1Sc1pYSWdkR2h5YjNkeklHRnVJR1Y0WTJWd2RHbHZiaTVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFhObGNpNXVZVzFsTzF4dUlDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0Z0tISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z0oyUmxabUYxYkhRZ2JtRnRaU2M3WEc0Z0lDQWdJQ0I5S1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeVRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QkpaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lIVnpaWEpPWVcxbFlDQjNhV3hzSUdKbElIUm9aU0IxYzJWeUozTWdibUZ0WlN3Z2IzUm9aWEozYVhObElHbDBYRzRnSUNBZ0lDQWdJQzh2SUhkcGJHd2dZbVVnWUNka1pXWmhkV3gwSUc1aGJXVW5ZRnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUdacGJtUlZjMlZ5S0NrdWRHaGxiaWhtZFc1amRHbHZiaUFvZFhObGNpa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFp2ZFc1a0lIVnpaWElzSUdKMWRDQnpkR2xzYkNCMWJtaGhjSEI1SnlrN1hHNGdJQ0FnSUNCOUxDQm1kVzVqZEdsdmJpQW9jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZR1pwYm1SVmMyVnlZQ0J5WldwbFkzUmxaQ0JoYm1RZ2QyVW5jbVVnZFc1b1lYQndlU2NwTzF4dUlDQWdJQ0FnZlNrdWRHaGxiaWhtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JtVjJaWElnY21WaFkyaGxaRnh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRnS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5QnBaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lISmxZWE52Ym1BZ2QybHNiQ0JpWlNBblJtOTFibVFnZFhObGNpd2dZblYwSUhOMGFXeHNJSFZ1YUdGd2NIa25MbHh1SUNBZ0lDQWdJQ0F2THlCSlppQmdabWx1WkZWelpYSmdJSEpsYW1WamRHVmtMQ0JnY21WaGMyOXVZQ0IzYVd4c0lHSmxJQ2RnWm1sdVpGVnpaWEpnSUhKbGFtVmpkR1ZrSUdGdVpDQjNaU2R5WlNCMWJtaGhjSEI1Snk1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzRnSUNBZ0lDQkpaaUIwYUdVZ1pHOTNibk4wY21WaGJTQndjbTl0YVhObElHUnZaWE1nYm05MElITndaV05wWm5rZ1lTQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2djbVZxWldOMGFXOXVJSEpsWVhOdmJuTWdkMmxzYkNCaVpTQndjbTl3WVdkaGRHVmtJR1oxY25Sb1pYSWdaRzkzYm5OMGNtVmhiUzVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VHVmtZV2R2WjJsallXeEZlR05sY0hScGIyNG9KMVZ3YzNSeVpXRnRJR1Z5Y205eUp5azdYRzRnSUNBZ0lDQjlLUzUwYUdWdUtHWjFibU4wYVc5dUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ1WlhabGNpQnlaV0ZqYUdWa1hHNGdJQ0FnSUNCOUtTNTBhR1Z1S0daMWJtTjBhVzl1SUNoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnVaWFpsY2lCeVpXRmphR1ZrWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmlBb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCZ1VHVmtaMkZuYjJOcFlXeEZlR05sY0hScGIyNWdJR2x6SUhCeWIzQmhaMkYwWldRZ1lXeHNJSFJvWlNCM1lYa2daRzkzYmlCMGJ5Qm9aWEpsWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkJjM05wYldsc1lYUnBiMjVjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFZ4dVhHNGdJQ0FnSUNCVGIyMWxkR2x0WlhNZ2RHaGxJSFpoYkhWbElIbHZkU0IzWVc1MElIUnZJSEJ5YjNCaFoyRjBaU0IwYnlCaElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQmpZVzRnYjI1c2VTQmlaVnh1SUNBZ0lDQWdjbVYwY21sbGRtVmtJR0Z6ZVc1amFISnZibTkxYzJ4NUxpQlVhR2x6SUdOaGJpQmlaU0JoWTJocFpYWmxaQ0JpZVNCeVpYUjFjbTVwYm1jZ1lTQndjbTl0YVhObElHbHVJSFJvWlZ4dUlDQWdJQ0FnWm5Wc1ptbHNiRzFsYm5RZ2IzSWdjbVZxWldOMGFXOXVJR2hoYm1Sc1pYSXVJRlJvWlNCa2IzZHVjM1J5WldGdElIQnliMjFwYzJVZ2QybHNiQ0IwYUdWdUlHSmxJSEJsYm1ScGJtZGNiaUFnSUNBZ0lIVnVkR2xzSUhSb1pTQnlaWFIxY201bFpDQndjbTl0YVhObElHbHpJSE5sZEhSc1pXUXVJRlJvYVhNZ2FYTWdZMkZzYkdWa0lDcGhjM05wYldsc1lYUnBiMjRxTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdabWx1WkZWelpYSW9LUzUwYUdWdUtHWjFibU4wYVc5dUlDaDFjMlZ5S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWFXNWtRMjl0YldWdWRITkNlVUYxZEdodmNpaDFjMlZ5S1R0Y2JpQWdJQ0FnSUgwcExuUm9aVzRvWm5WdVkzUnBiMjRnS0dOdmJXMWxiblJ6S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCMWMyVnlKM01nWTI5dGJXVnVkSE1nWVhKbElHNXZkeUJoZG1GcGJHRmliR1ZjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lFbG1JSFJvWlNCaGMzTnBiV3hwWVhSbFpDQndjbTl0YVhObElISmxhbVZqZEhNc0lIUm9aVzRnZEdobElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQjNhV3hzSUdGc2MyOGdjbVZxWldOMExseHVYRzRnSUNBZ0lDQmdZR0JxYzF4dUlDQWdJQ0FnWm1sdVpGVnpaWElvS1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjaWgxYzJWeUtUdGNiaUFnSUNBZ0lIMHBMblJvWlc0b1puVnVZM1JwYjI0Z0tHTnZiVzFsYm5SektTQjdYRzRnSUNBZ0lDQWdJQzh2SUVsbUlHQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjbUFnWm5Wc1ptbHNiSE1zSUhkbEoyeHNJR2hoZG1VZ2RHaGxJSFpoYkhWbElHaGxjbVZjYmlBZ0lDQWdJSDBzSUdaMWJtTjBhVzl1SUNoeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdTV1lnWUdacGJtUkRiMjF0Wlc1MGMwSjVRWFYwYUc5eVlDQnlaV3BsWTNSekxDQjNaU2RzYkNCb1lYWmxJSFJvWlNCeVpXRnpiMjRnYUdWeVpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnVTJsdGNHeGxJRVY0WVcxd2JHVmNiaUFnSUNBZ0lDMHRMUzB0TFMwdExTMHRMUzB0WEc1Y2JpQWdJQ0FnSUZONWJtTm9jbTl1YjNWeklFVjRZVzF3YkdWY2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdkbUZ5SUhKbGMzVnNkRHRjYmx4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdabWx1WkZKbGMzVnNkQ2dwTzF4dUlDQWdJQ0FnSUNBdkx5QnpkV05qWlhOelhHNGdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5Qm1ZV2xzZFhKbFhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdSWEp5WW1GamF5QkZlR0Z0Y0d4bFhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JtYVc1a1VtVnpkV3gwS0daMWJtTjBhVzl1S0hKbGMzVnNkQ3dnWlhKeUtYdGNiaUFnSUNBZ0lDQWdhV1lnS0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lGQnliMjFwYzJVZ1JYaGhiWEJzWlR0Y2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdabWx1WkZKbGMzVnNkQ2dwTG5Sb1pXNG9ablZ1WTNScGIyNG9jbVZ6ZFd4MEtYdGNiaUFnSUNBZ0lDQWdMeThnYzNWalkyVnpjMXh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLWHRjYmlBZ0lDQWdJQ0FnTHk4Z1ptRnBiSFZ5WlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdRV1IyWVc1alpXUWdSWGhoYlhCc1pWeHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzFjYmx4dUlDQWdJQ0FnVTNsdVkyaHliMjV2ZFhNZ1JYaGhiWEJzWlZ4dVhHNGdJQ0FnSUNCZ1lHQnFZWFpoYzJOeWFYQjBYRzRnSUNBZ0lDQjJZWElnWVhWMGFHOXlMQ0JpYjI5cmN6dGNibHh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ1lYVjBhRzl5SUQwZ1ptbHVaRUYxZEdodmNpZ3BPMXh1SUNBZ0lDQWdJQ0JpYjI5cmN5QWdQU0JtYVc1a1FtOXZhM05DZVVGMWRHaHZjaWhoZFhSb2IzSXBPMXh1SUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0I5SUdOaGRHTm9LSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlCbVlXbHNkWEpsWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JnWUdCY2JseHVJQ0FnSUNBZ1JYSnlZbUZqYXlCRmVHRnRjR3hsWEc1Y2JpQWdJQ0FnSUdCZ1lHcHpYRzVjYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR1p2ZFc1a1FtOXZhM01vWW05dmEzTXBJSHRjYmx4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWRXNWpkR2x2YmlCbVlXbHNkWEpsS0hKbFlYTnZiaWtnZTF4dVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnBibVJCZFhSb2IzSW9ablZ1WTNScGIyNG9ZWFYwYUc5eUxDQmxjbklwZTF4dUlDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1poYVd4MWNtVmNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1sdVpFSnZiMjlyYzBKNVFYVjBhRzl5S0dGMWRHaHZjaXdnWm5WdVkzUnBiMjRvWW05dmEzTXNJR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNobGNuSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzVnVaRUp2YjJ0ektHSnZiMnR6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNoeVpXRnpiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRkJ5YjIxcGMyVWdSWGhoYlhCc1pUdGNibHh1SUNBZ0lDQWdZR0JnYW1GMllYTmpjbWx3ZEZ4dUlDQWdJQ0FnWm1sdVpFRjFkR2h2Y2lncExseHVJQ0FnSUNBZ0lDQjBhR1Z1S0dacGJtUkNiMjlyYzBKNVFYVjBhRzl5S1M1Y2JpQWdJQ0FnSUNBZ2RHaGxiaWhtZFc1amRHbHZiaWhpYjI5cmN5bDdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ptOTFibVFnWW05dmEzTmNiaUFnSUNBZ0lIMHBMbU5oZEdOb0tHWjFibU4wYVc5dUtISmxZWE52YmlsN1hHNGdJQ0FnSUNBZ0lDOHZJSE52YldWMGFHbHVaeUIzWlc1MElIZHliMjVuWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkFiV1YwYUc5a0lIUm9aVzVjYmlBZ0lDQWdJRUJ3WVhKaGJTQjdSblZ1WTNScGIyNTlJRzl1Um5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0JBY0dGeVlXMGdlMFoxYm1OMGFXOXVmU0J2YmxKbGFtVmpkR1ZrWEc0Z0lDQWdJQ0JWYzJWbWRXd2dabTl5SUhSdmIyeHBibWN1WEc0Z0lDQWdJQ0JBY21WMGRYSnVJSHRRY205dGFYTmxmVnh1SUNBZ0lDb3ZYRzRnSUNBZ0lDQjBhR1Z1T2lCbWRXNWpkR2x2YmlodmJrWjFiR1pwYkd4dFpXNTBMQ0J2YmxKbGFtVmpkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0dGeVpXNTBJRDBnZEdocGN6dGNiaUFnSUNBZ0lDQWdkbUZ5SUhOMFlYUmxJRDBnY0dGeVpXNTBMbDl6ZEdGMFpUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFWlZURVpKVEV4RlJDQW1KaUFoYjI1R2RXeG1hV3hzYldWdWRDQjhmQ0J6ZEdGMFpTQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVFnSmlZZ0lXOXVVbVZxWldOMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCMllYSWdZMmhwYkdRZ1BTQnVaWGNnZEdocGN5NWpiMjV6ZEhKMVkzUnZjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J1YjI5d0tUdGNiaUFnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkQ0E5SUhCaGNtVnVkQzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCallXeHNZbUZqYXlBOUlHRnlaM1Z0Wlc1MGMxdHpkR0YwWlNBdElERmRPMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3S0daMWJtTjBhVzl1S0NsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JwYm5admEyVkRZV3hzWW1GamF5aHpkR0YwWlN3Z1kyaHBiR1FzSUdOaGJHeGlZV05yTENCeVpYTjFiSFFwTzF4dUlDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyaHBiR1E3WEc0Z0lDQWdJQ0I5TEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCZ1kyRjBZMmhnSUdseklITnBiWEJzZVNCemRXZGhjaUJtYjNJZ1lIUm9aVzRvZFc1a1pXWnBibVZrTENCdmJsSmxhbVZqZEdsdmJpbGdJSGRvYVdOb0lHMWhhMlZ6SUdsMElIUm9aU0J6WVcxbFhHNGdJQ0FnSUNCaGN5QjBhR1VnWTJGMFkyZ2dZbXh2WTJzZ2IyWWdZU0IwY25rdlkyRjBZMmdnYzNSaGRHVnRaVzUwTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdablZ1WTNScGIyNGdabWx1WkVGMWRHaHZjaWdwZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJOdmRXeGtiaWQwSUdacGJtUWdkR2hoZENCaGRYUm9iM0luS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdjM2x1WTJoeWIyNXZkWE5jYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHWnBibVJCZFhSb2IzSW9LVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQzh2SUhOdmJXVjBhR2x1WnlCM1pXNTBJSGR5YjI1blhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJR0Z6ZVc1aklIZHBkR2dnY0hKdmJXbHpaWE5jYmlBZ0lDQWdJR1pwYm1SQmRYUm9iM0lvS1M1allYUmphQ2htZFc1amRHbHZiaWh5WldGemIyNHBlMXh1SUNBZ0lDQWdJQ0F2THlCemIyMWxkR2hwYm1jZ2QyVnVkQ0IzY205dVoxeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUcxbGRHaHZaQ0JqWVhSamFGeHVJQ0FnSUNBZ1FIQmhjbUZ0SUh0R2RXNWpkR2x2Ym4wZ2IyNVNaV3BsWTNScGIyNWNiaUFnSUNBZ0lGVnpaV1oxYkNCbWIzSWdkRzl2YkdsdVp5NWNiaUFnSUNBZ0lFQnlaWFIxY200Z2UxQnliMjFwYzJWOVhHNGdJQ0FnS2k5Y2JpQWdJQ0FnSUNkallYUmphQ2M2SUdaMWJtTjBhVzl1S0c5dVVtVnFaV04wYVc5dUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5Sb1pXNG9iblZzYkN3Z2IyNVNaV3BsWTNScGIyNHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMDdYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSd2IyeDVabWxzYkNncElIdGNiaUFnSUNBZ0lIWmhjaUJzYjJOaGJEdGNibHh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJuYkc5aVlXd2dJVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkc5allXd2dQU0JuYkc5aVlXdzdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnpaV3htSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZZMkZzSUQwZ2MyVnNaanRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWpZV3dnUFNCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHdiMng1Wm1sc2JDQm1ZV2xzWldRZ1ltVmpZWFZ6WlNCbmJHOWlZV3dnYjJKcVpXTjBJR2x6SUhWdVlYWmhhV3hoWW14bElHbHVJSFJvYVhNZ1pXNTJhWEp2Ym0xbGJuUW5LVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJRSUQwZ2JHOWpZV3d1VUhKdmJXbHpaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tGQWdKaVlnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaeTVqWVd4c0tGQXVjbVZ6YjJ4MlpTZ3BLU0E5UFQwZ0oxdHZZbXBsWTNRZ1VISnZiV2x6WlYwbklDWW1JQ0ZRTG1OaGMzUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JzYjJOaGJDNVFjbTl0YVhObElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pHUmxabUYxYkhRN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkdSbFptRjFiSFFnUFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkhCdmJIbG1hV3hzTzF4dVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlVnUFNCN1hHNGdJQ0FnSUNBblVISnZiV2x6WlNjNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSa1pXWmhkV3gwTEZ4dUlDQWdJQ0FnSjNCdmJIbG1hV3hzSnpvZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSa1pXWmhkV3gwWEc0Z0lDQWdmVHRjYmx4dUlDQWdJQzhxSUdkc2IySmhiQ0JrWldacGJtVTZkSEoxWlNCdGIyUjFiR1U2ZEhKMVpTQjNhVzVrYjNjNklIUnlkV1VnS2k5Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdSbFptbHVaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJrWldacGJtVmJKMkZ0WkNkZEtTQjdYRzRnSUNBZ0lDQmtaV1pwYm1Vb1puVnVZM1JwYjI0b0tTQjdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RXMWtKQ1JGVXpaUWNtOXRhWE5sT3lCOUtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCdGIyUjFiR1VnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUcxdlpIVnNaVnNuWlhod2IzSjBjeWRkS1NCN1hHNGdJQ0FnSUNCdGIyUjFiR1ZiSjJWNGNHOXlkSE1uWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdkR2hwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTmJKMFZUTmxCeWIyMXBjMlVuWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnZiSGxtYVd4c0pDUmtaV1poZFd4MEtDazdYRzU5S1M1allXeHNLSFJvYVhNcE8xeHVYRzRpWFgwPSIsIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgRnJlZCBLLiBTY2hvdHQgPGZrc2Nob3R0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT5cbkNvcHlyaWdodCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpvb3N0LXdpbUBib2VrZXN0ZWlqbi5ubD5cbkNvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9yc29zIDxhcnBhZC5ib3Jzb3NAZ29vZ2xlbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmVzbGludCBuby11bmRlZmluZWQ6MCwgbm8tdXNlLWJlZm9yZS1kZWZpbmU6IDAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHN5bnRheCA9IHJlcXVpcmUoXCIuL2xpYi9zeW50YXhcIiksXG4gICAgdG9rZW5JbmZvID0gcmVxdWlyZShcIi4vbGliL3Rva2VuLWluZm9cIiksXG4gICAgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLXR5cGVzXCIpLFxuICAgIGFzdE5vZGVGYWN0b3J5ID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLWZhY3RvcnlcIiksXG4gICAgZGVmYXVsdEZlYXR1cmVzID0gcmVxdWlyZShcIi4vbGliL2ZlYXR1cmVzXCIpLFxuICAgIE1lc3NhZ2VzID0gcmVxdWlyZShcIi4vbGliL21lc3NhZ2VzXCIpLFxuICAgIFhIVE1MRW50aXRpZXMgPSByZXF1aXJlKFwiLi9saWIveGh0bWwtZW50aXRpZXNcIiksXG4gICAgU3RyaW5nTWFwID0gcmVxdWlyZShcIi4vbGliL3N0cmluZy1tYXBcIiksXG4gICAgY29tbWVudEF0dGFjaG1lbnQgPSByZXF1aXJlKFwiLi9saWIvY29tbWVudC1hdHRhY2htZW50XCIpO1xuXG52YXIgVG9rZW4gPSB0b2tlbkluZm8uVG9rZW4sXG4gICAgVG9rZW5OYW1lID0gdG9rZW5JbmZvLlRva2VuTmFtZSxcbiAgICBGbkV4cHJUb2tlbnMgPSB0b2tlbkluZm8uRm5FeHByVG9rZW5zLFxuICAgIFJlZ2V4ID0gc3ludGF4LlJlZ2V4LFxuICAgIFByb3BlcnR5S2luZCxcbiAgICBzb3VyY2UsXG4gICAgc3RyaWN0LFxuICAgIGluZGV4LFxuICAgIGxpbmVOdW1iZXIsXG4gICAgbGluZVN0YXJ0LFxuICAgIGxlbmd0aCxcbiAgICBsb29rYWhlYWQsXG4gICAgc3RhdGUsXG4gICAgZXh0cmE7XG5cblByb3BlcnR5S2luZCA9IHtcbiAgICBEYXRhOiAxLFxuICAgIEdldDogMixcbiAgICBTZXQ6IDRcbn07XG5cblxuLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLlxuLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0XG4vLyB0byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS5cbi8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuXG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBU1NFUlQ6IFwiICsgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyA3LjQgQ29tbWVudHNcblxuZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7XG4gICAgdmFyIGNvbW1lbnQ7XG5cbiAgICBhc3NlcnQodHlwZW9mIHN0YXJ0ID09PSBcIm51bWJlclwiLCBcIkNvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9uXCIpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0ZW4gdGhlIGNvbW1lbnRzXG4gICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLlxuICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHlcbiAgICAvLyBoYW5kbGVkIGl0LlxuICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUubGFzdENvbW1lbnRTdGFydCA9IHN0YXJ0O1xuXG4gICAgY29tbWVudCA9IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTtcbiAgICB9XG4gICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICBjb21tZW50LmxvYyA9IGxvYztcbiAgICB9XG4gICAgZXh0cmEuY29tbWVudHMucHVzaChjb21tZW50KTtcblxuICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgIGNvbW1lbnRBdHRhY2htZW50LmFkZENvbW1lbnQoY29tbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7XG4gICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50O1xuXG4gICAgc3RhcnQgPSBpbmRleCAtIG9mZnNldDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkQ29tbWVudChcIkxpbmVcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCk7XG4gICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9O1xuICAgICAgICBhZGRDb21tZW50KFwiTGluZVwiLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHtcbiAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgc3RhcnQgPSBpbmRleCAtIDI7XG4gICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7XG4gICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCBcIiovXCIuXG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KFwiQmxvY2tcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG5mdW5jdGlvbiBza2lwQ29tbWVudCgpIHtcbiAgICB2YXIgY2gsIHN0YXJ0O1xuXG4gICAgc3RhcnQgPSAoaW5kZXggPT09IDApO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgICAgICBpZiAoc3ludGF4LmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgXCIvXCJcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAgLy8gVSswMDJBIGlzIFwiKlwiXG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyBcIi1cIlxuICAgICAgICAgICAgLy8gVSswMDNFIGlzIFwiPlwiXG4gICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkge1xuICAgICAgICAgICAgICAgIC8vIFwiLS0+XCIgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyBcIjxcIlxuICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09IFwiIS0tXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgbGVuID0gKHByZWZpeCA9PT0gXCJ1XCIpID8gNCA6IDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgXCIwMTIzNDU2Nzg5YWJjZGVmXCIuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufVxuXG4vKipcbiAqIFNjYW5zIGFuIGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2UgZnJvbSBzb3VyY2UuIFRocm93cyBhblxuICogZXJyb3IgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5IG9yIGlmIHRoZSBjb2RlIHBvaW50IHZhbHVlIGlzIHRvbyBsYXJnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgY3JlYXRlZCBieSB0aGUgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgICB2YXIgY2gsIGNvZGUsIGN1MSwgY3UyO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGNvZGUgPSAwO1xuXG4gICAgLy8gQXQgbGVhc3Qgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC5cbiAgICBpZiAoY2ggPT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBcIjAxMjM0NTY3ODlhYmNkZWZcIi5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIC8vIFVURi0xNiBFbmNvZGluZ1xuICAgIGlmIChjb2RlIDw9IDB4RkZGRikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9XG4gICAgY3UxID0gKChjb2RlIC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwO1xuICAgIGN1MiA9ICgoY29kZSAtIDB4MTAwMDApICYgMTAyMykgKyAweERDMDA7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBjdTIpO1xufVxuXG5mdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHtcbiAgICB2YXIgY2gsIGlkO1xuXG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gY2g7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHN0YXJ0LCBjaDtcblxuICAgIHN0YXJ0ID0gaW5kZXgrKztcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICAgIHZhciBzdGFydCwgaWQsIHR5cGU7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTtcblxuICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci5cbiAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0tleXdvcmQoaWQsIHN0cmljdCwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDtcbiAgICB9IGVsc2UgaWYgKGlkID09PSBcIm51bGxcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVyYWw7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gXCJ0cnVlXCIgfHwgaWQgPT09IFwiZmFsc2VcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuXG4vLyA3LjcgUHVuY3R1YXRvcnNcblxuZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gICAgdmFyIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksXG4gICAgICAgIGNvZGUyLFxuICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLFxuICAgICAgICBjaDIsXG4gICAgICAgIGNoMyxcbiAgICAgICAgY2g0O1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICBjYXNlIDQwOiAgIC8vICggb3BlbiBicmFja2V0XG4gICAgICAgIGNhc2UgNDE6ICAgLy8gKSBjbG9zZSBicmFja2V0XG4gICAgICAgIGNhc2UgNTk6ICAgLy8gOyBzZW1pY29sb25cbiAgICAgICAgY2FzZSA0NDogICAvLyAsIGNvbW1hXG4gICAgICAgIGNhc2UgOTE6ICAgLy8gW1xuICAgICAgICBjYXNlIDkzOiAgIC8vIF1cbiAgICAgICAgY2FzZSA1ODogICAvLyA6XG4gICAgICAgIGNhc2UgNjM6ICAgLy8gP1xuICAgICAgICBjYXNlIDEyNjogIC8vIH5cbiAgICAgICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgMTIzOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlXG4gICAgICAgIGNhc2UgMTI1OiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZVxuICAgICAgICAgICAgKytpbmRleDtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNvZGUgPT09IDEyMykge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9va2FoZWFkMiBmdW5jdGlvbiBjYW4gY2F1c2UgdG9rZW5zIHRvIGJlIHNjYW5uZWQgdHdpY2UgYW5kIGluIGRvaW5nIHNvXG4gICAgICAgICAgICAvLyB3b3VsZCB3cmVjayB0aGUgY3VybHkgc3RhY2sgYnkgcHVzaGluZyB0aGUgc2FtZSB0b2tlbiBvbnRvIHRoZSBzdGFjayB0d2ljZS5cbiAgICAgICAgICAgIC8vIGN1cmx5TGFzdEluZGV4IGVuc3VyZXMgZWFjaCB0b2tlbiBpcyBwdXNoZWQgb3IgcG9wcGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgaWYgKGluZGV4ID4gc3RhdGUuY3VybHlMYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwie1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIC8vIFwiPVwiIChjaGFyICM2MSkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLlxuICAgICAgICAgICAgaWYgKGNvZGUyID09PSA2MSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OiAgLy8gJVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OiAgLy8gJlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOiAgLy8gKjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MzogIC8vICtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NTogIC8vIC1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzogIC8vIC9cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MDogIC8vIDxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MjogIC8vID5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5NDogIC8vIF5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8vIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDMzOiAvLyAhXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjE6IC8vID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA2MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGVlayBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICBjaDIgPSBzb3VyY2VbaW5kZXggKyAxXTtcbiAgICBjaDMgPSBzb3VyY2VbaW5kZXggKyAyXTtcbiAgICBjaDQgPSBzb3VyY2VbaW5kZXggKyAzXTtcblxuICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj5cIikge1xuICAgICAgICBpZiAoY2g0ID09PSBcIj1cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gNDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPlwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPj4+XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2gxID09PSBcIjxcIiAmJiBjaDIgPT09IFwiPFwiICYmIGNoMyA9PT0gXCI9XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI8PD1cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj1cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIj4+PVwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVGhlIC4uLiBvcGVyYXRvciAoc3ByZWFkLCByZXN0UGFyYW1zLCBKU1gsIGV0Yy4pXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5zcHJlYWQgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXMgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQgfHxcbiAgICAgICAgKGV4dHJhLmVjbWFGZWF0dXJlcy5qc3ggJiYgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUpXG4gICAgKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiLlwiICYmIGNoMiA9PT0gXCIuXCIgJiYgY2gzID09PSBcIi5cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCIuLi5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fFxuICAgIGlmIChjaDEgPT09IGNoMiAmJiAoXCIrLTw+JnxcIi5pbmRleE9mKGNoMSkgPj0gMCkpIHtcbiAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxICsgY2gyLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdGhlID0+IGZvciBhcnJvdyBmdW5jdGlvbnNcbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmFycm93RnVuY3Rpb25zKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiPVwiICYmIGNoMiA9PT0gXCI+XCIpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiPT5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcIjw+PSErLSolJnxeL1wiLmluZGV4T2YoY2gxKSA+PSAwKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiLlwiKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG4vLyA3LjguMyBOdW1lcmljIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChcIjB4XCIgKyBudW1iZXIsIDE2KSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIGNoLCBudW1iZXIgPSBcIlwiO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKGNoICE9PSBcIjBcIiAmJiBjaCAhPT0gXCIxXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gb25seSAwYiBvciAwQlxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cblxuICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHByZWZpeCwgc3RhcnQpIHtcbiAgICB2YXIgbnVtYmVyLCBvY3RhbDtcblxuICAgIGlmIChzeW50YXguaXNPY3RhbERpZ2l0KHByZWZpeCkpIHtcbiAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICBudW1iZXIgPSBcIjBcIiArIHNvdXJjZVtpbmRleCsrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvY3RhbCA9IGZhbHNlO1xuICAgICAgICArK2luZGV4O1xuICAgICAgICBudW1iZXIgPSBcIlwiO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKCFvY3RhbCAmJiBudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG9ubHkgMG8gb3IgME9cbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSxcbiAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkge1xuICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gXCIuXCIpLFxuICAgICAgICBcIk51bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludFwiKTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgbnVtYmVyID0gXCJcIjtcbiAgICBpZiAoY2ggIT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuXG4gICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggXCIweFwiLlxuICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggXCIwXCIuXG4gICAgICAgIGlmIChudW1iZXIgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwieFwiIHx8IGNoID09PSBcIlhcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYgc3RhcnRzIHdpdGggJzBiJ1xuICAgICAgICAgICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5iaW5hcnlMaXRlcmFscykge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gXCJiXCIgfHwgY2ggPT09IFwiQlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGV4dHJhLmVjbWFGZWF0dXJlcy5vY3RhbExpdGVyYWxzICYmIChjaCA9PT0gXCJvXCIgfHwgY2ggPT09IFwiT1wiKSkgfHwgc3ludGF4LmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFydHMgd2l0aCBcIjBcIiBzdWNoIGFzIFwiMDlcIiBpcyBpbGxlZ2FsLlxuICAgICAgICAgICAgaWYgKGNoICYmIHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIHdoaWxlIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcImVcIiB8fCBjaCA9PT0gXCJFXCIpIHtcbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCIrXCIgfHwgY2ggPT09IFwiLVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZSBhbmQgcmV0dXJuIGl0cyBzcGVjaWFsIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaCBUaGUgc3RhcnRpbmcgY2hhcmFjdGVyIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYW5kIGEgZmxhZ1xuICogaWYgdGhlIGVzY2FwZSBzZXF1ZW5jZSB3YXMgYW4gb2N0YWwuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpIHtcbiAgICB2YXIgY29kZSxcbiAgICAgICAgdW5lc2NhcGVkLFxuICAgICAgICByZXN0b3JlLFxuICAgICAgICBlc2NhcGVkQ2gsXG4gICAgICAgIG9jdGFsID0gZmFsc2U7XG5cbiAgICAvLyBBbiBlc2NhcGUgc2VxdWVuY2UgY2Fubm90IGJlIGVtcHR5XG4gICAgaWYgKCFjaCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInVcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAvLyBIYW5kbGUgRVM2IGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2VzLlxuICAgICAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgZXNjYXBlZENoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ1XCIgfHwgY2ggPT09IFwieFwiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBvdGhlciB1bmljb2RlIGFuZCBoZXggY29kZXMgbm9ybWFsbHlcbiAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTtcbiAgICAgICAgaWYgKHVuZXNjYXBlZCkge1xuICAgICAgICAgICAgZXNjYXBlZENoID0gdW5lc2NhcGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIm5cIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcblwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiclwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxyXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ0XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHRcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcImJcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcYlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiZlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxmXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHZcIjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgIGNvZGUgPSBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCk7XG5cbiAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuXG4gICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIDAsIDEsIDIsIDNcbiAgICAgICAgICAgIGlmIChcIjAxMjNcIi5pbmRleE9mKGNoKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWRDaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2g6IGVzY2FwZWRDaCxcbiAgICAgICAgb2N0YWw6IG9jdGFsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7XG4gICAgdmFyIHN0ciA9IFwiXCIsXG4gICAgICAgIGNoLFxuICAgICAgICBlc2NhcGVkU2VxdWVuY2UsXG4gICAgICAgIG9jdGFsID0gZmFsc2UsXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0LFxuICAgICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG5cbiAgICBhc3NlcnQoKHF1b3RlID09PSBcIidcIiB8fCBxdW90ZSA9PT0gXCJcXFwiXCIpLFxuICAgICAgICBcIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZVwiKTtcblxuICAgICsraW5kZXg7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICAgIHF1b3RlID0gXCJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBlc2NhcGVkU2VxdWVuY2UgPSBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpO1xuICAgICAgICAgICAgc3RyICs9IGVzY2FwZWRTZXF1ZW5jZS5jaDtcbiAgICAgICAgICAgIG9jdGFsID0gZXNjYXBlZFNlcXVlbmNlLm9jdGFsIHx8IG9jdGFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1b3RlICE9PSBcIlwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBzdHIsXG4gICAgICAgIG9jdGFsOiBvY3RhbCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbi8qKlxuICogU2NhbiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgcmV0dXJuIGEgdG9rZW4uIFRoaXMgc2NhbnMgYm90aCB0aGUgZmlyc3QgYW5kXG4gKiBzdWJzZXF1ZW50IHBpZWNlcyBvZiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBiYWNrdGlja1xuICogb3IgdGhlIGNsb3NpbmcgfSBoYXZlIGFscmVhZHkgYmVlbiBzY2FubmVkLlxuICogQHJldHVybnMge1Rva2VufSBUaGUgdGVtcGxhdGUgc3RyaW5nIHRva2VuLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2NhblRlbXBsYXRlKCkge1xuICAgIHZhciBjb29rZWQgPSBcIlwiLFxuICAgICAgICBjaCxcbiAgICAgICAgZXNjYXBlZFNlcXVlbmNlLFxuICAgICAgICBzdGFydCA9IGluZGV4LFxuICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2UsXG4gICAgICAgIHRhaWwgPSBmYWxzZSxcbiAgICAgICAgaGVhZCA9IChzb3VyY2VbaW5kZXhdID09PSBcImBcIik7XG5cbiAgICArK2luZGV4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gXCJgXCIpIHtcbiAgICAgICAgICAgIHRhaWwgPSB0cnVlO1xuICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCIkXCIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGVzY2FwZWRTZXF1ZW5jZSA9IHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCk7XG5cbiAgICAgICAgICAgIGlmIChlc2NhcGVkU2VxdWVuY2Uub2N0YWwpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvb2tlZCArPSBlc2NhcGVkU2VxdWVuY2UuY2g7XG5cbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBjb29rZWQgKz0gXCJcXG5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPiBzdGF0ZS5jdXJseUxhc3RJbmRleCkge1xuICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGlmICghdGFpbCkge1xuICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwidGVtcGxhdGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5UZW1wbGF0ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGNvb2tlZDogY29va2VkLFxuICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAtICgodGFpbCkgPyAxIDogMikpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRtcCA9IHBhdHRlcm4sXG4gICAgICAgIHZhbGlkRmxhZ3MgPSBcImdtc2lcIjtcblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhZRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwieVwiO1xuICAgIH1cblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhVRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwidVwiO1xuICAgIH1cblxuICAgIGlmICghUmVnRXhwKFwiXltcIiArIHZhbGlkRmxhZ3MgKyBcIl0qJFwiKS50ZXN0KGZsYWdzKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwRmxhZyk7XG4gICAgfVxuXG5cbiAgICBpZiAoZmxhZ3MuaW5kZXhPZihcInVcIikgPj0gMCkge1xuICAgICAgICAvLyBSZXBsYWNlIGVhY2ggYXN0cmFsIHN5bWJvbCBhbmQgZXZlcnkgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvblxuICAgICAgICAvLyByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG9ubHkgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGVcbiAgICAgICAgLy8gYC91YCBmbGFnLlxuICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgICAgICAvLyBuZWdhdGl2ZXMgaW4gdW5saWtlbHkgc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7NjF9LWJdYCBpcyBhXG4gICAgICAgIC8vIHBlcmZlY3RseSB2YWxpZCBwYXR0ZXJuIHRoYXQgaXMgZXF1aXZhbGVudCB0byBgW2EtYl1gLCBidXQgaXRcbiAgICAgICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIHRtcCA9IHRtcFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx1XFx7KFswLTlhLWZBLUZdKylcXH0vZywgZnVuY3Rpb24gKCQwLCAkMSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCgkMSwgMTYpIDw9IDB4MTBGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInhcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgXCJ4XCIpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgIHRyeSB7XG4gICAgICAgIFJlZ0V4cCh0bXApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgICAvLyBgbnVsbGAgaW4gY2FzZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZsYWdzIGl0XG4gICAgLy8gdXNlcy5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gICAgdmFyIGNoLCBzdHIsIGNsYXNzTWFya2VyLCB0ZXJtaW5hdGVkLCBib2R5O1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChjaCA9PT0gXCIvXCIsIFwiUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2hcIik7XG4gICAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgY2xhc3NNYXJrZXIgPSBmYWxzZTtcbiAgICB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjVcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICAgIGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogYm9keSxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkge1xuICAgIHZhciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTtcblxuICAgIHN0ciA9IFwiXCI7XG4gICAgZmxhZ3MgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmICghc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcXFxcIiAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcInVcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgICAgICAgICAgaWYgKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSBcIlxcXFx1XCI7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jlc3RvcmVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBcInVcIjtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXHVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBmbGFncyxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCB2YWx1ZTtcblxuICAgIGxvb2thaGVhZCA9IG51bGw7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7XG4gICAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTtcbiAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpO1xuXG4gICAgaWYgKGV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHtcbiAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjtcblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpO1xuICAgIGxvYy5lbmQgPSB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSBcIi9cIiBvciBcIi89XCJcbiAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSBcIlB1bmN0dWF0b3JcIikge1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gXCIvXCIgfHwgdG9rZW4udmFsdWUgPT09IFwiLz1cIikge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogXCJSZWd1bGFyRXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsXG4gICAgICAgICAgICByZWdleDogcmVnZXgucmVnZXgsXG4gICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLFxuICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkge1xuICAgIHZhciBwcmV2VG9rZW4sXG4gICAgICAgIGNoZWNrVG9rZW47XG4gICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ25cbiAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghcHJldlRva2VuKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLlxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJQdW5jdHVhdG9yXCIpIHtcbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09IFwiKVwiKSB7XG4gICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07XG4gICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09IFwiS2V5d29yZFwiICYmXG4gICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSBcImlmXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09IFwid2hpbGVcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJmb3JcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJ3aXRoXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLFxuICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09IFwiS2V5d29yZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpc1xuICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICB2YXIgY2gsXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCxcbiAgICAgICAgYWxsb3dUZW1wbGF0ZVN0cmluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMudGVtcGxhdGVTdHJpbmdzO1xuXG4gICAgLypcbiAgICAgKiBJZiBKU1ggaXNuJ3QgYWxsb3dlZCBvciBKU1ggaXMgYWxsb3dlZCBhbmQgd2UncmUgbm90IGluc2lkZSBhbiBKU1ggY2hpbGQsXG4gICAgICogdGhlbiBza2lwIGFueSBjb21tZW50cy5cbiAgICAgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uRU9GLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtpbmRleCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaWYgaW5zaWRlIGFuIEpTWCBjaGlsZCwgdGhlbiBhYm9ydCByZWd1bGFyIHRva2VuaXphdGlvblxuICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHJldHVybiBhZHZhbmNlSlNYQ2hpbGQoKTtcbiAgICB9XG5cbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7XG4gICAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7XG4gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuXG4gICAgaWYgKGNoID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7XG4gICAgICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWFRhZykge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dKU1ggJiYgc3RhdGUuaW5KU1hUYWcgJiYgc3ludGF4LmlzSlNYSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWElkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBUZW1wbGF0ZSBzdHJpbmdzIHN0YXJ0IHdpdGggYmFja3RpY2sgKFUrMDA5Nikgb3IgY2xvc2luZyBjdXJseSBicmFjZSAoMTI1KSBhbmQgYmFja3RpY2suXG4gICAgaWYgKGFsbG93VGVtcGxhdGVTdHJpbmdzKSB7XG5cbiAgICAgICAgLy8gdGVtcGxhdGUgc3RyaW5ncyBzdGFydCB3aXRoIGJhY2t0aWNrICg5Nikgb3Igb3BlbiBjdXJseSAoMTI1KSBidXQgb25seSBpZiB0aGUgb3BlblxuICAgICAgICAvLyBjdXJseSBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCBjdXJseSBmcm9tIGEgdGVtcGxhdGUuXG4gICAgICAgIGlmIChjaCA9PT0gOTYgfHwgKGNoID09PSAxMjUgJiYgc3RhdGUuY3VybHlTdGFja1tzdGF0ZS5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSBcInRlbXBsYXRlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWRcbiAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDJFKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgfVxuXG4gICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LlxuICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikge1xuICAgICAgICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHtcbiAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlLCBlbnRyeSxcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgbG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0b2tlbiA9IGFkdmFuY2UoKTtcbiAgICBsb2MuZW5kID0ge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgcmFuZ2UgPSBbdG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdXTtcbiAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKTtcbiAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByYW5nZTogcmFuZ2UsXG4gICAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9O1xuICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0ge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHRva2VuLnJlZ2V4LnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKGVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGxleCgpIHtcbiAgICB2YXIgdG9rZW47XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgdmFyIHBvcyxcbiAgICAgICAgbGluZSxcbiAgICAgICAgc3RhcnQ7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZDIoKSB7XG4gICAgdmFyIGFkdiwgcG9zLCBsaW5lLCBzdGFydCwgcmVzdWx0O1xuXG4gICAgLy8gSWYgd2UgYXJlIGNvbGxlY3RpbmcgdGhlIHRva2VucywgZG9uJ3QgZ3JhYiB0aGUgbmV4dCBvbmUgeWV0LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgYWR2ID0gKHR5cGVvZiBleHRyYS5hZHZhbmNlID09PSBcImZ1bmN0aW9uXCIpID8gZXh0cmEuYWR2YW5jZSA6IGFkdmFuY2U7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIC8vIFNjYW4gZm9yIHRoZSBuZXh0IGltbWVkaWF0ZSB0b2tlbi5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAobG9va2FoZWFkID09PSBudWxsKSB7XG4gICAgICAgIGxvb2thaGVhZCA9IGFkdigpO1xuICAgIH1cbiAgICBpbmRleCA9IGxvb2thaGVhZC5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gbG9va2FoZWFkLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gbG9va2FoZWFkLmxpbmVTdGFydDtcblxuICAgIC8vIEdyYWIgdGhlIHRva2VuIHJpZ2h0IGFmdGVyLlxuICAgIHJlc3VsdCA9IGFkdigpO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSlNYXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWElkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lO1xuICAgIH1cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hOYW1lc3BhY2VkTmFtZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWVzcGFjZS5uYW1lICsgXCI6XCIgKyBvYmplY3QubmFtZS5uYW1lO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWE1lbWJlckV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0Lm9iamVjdCkgKyBcIi5cIiArXG4gICAgICAgICAgICBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdC5wcm9wZXJ0eSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvd1VuZXhwZWN0ZWQob2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIGNoLCBzdGFydCwgdmFsdWUgPSBcIlwiO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmICghc3ludGF4LmlzSlNYSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYSWRlbnRpZmllcixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWEVudGl0eSgpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0ID0gaW5kZXgsIGNvdW50ID0gMCwgY29kZTtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KGNoID09PSBcIiZcIiwgXCJFbnRpdHkgbXVzdCBzdGFydCB3aXRoIGFuIGFtcGVyc2FuZFwiKTtcbiAgICBpbmRleCsrO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICB9XG5cbiAgICAvLyBXZWxsLWZvcm1lZCBlbnRpdHkgKGVuZGluZyB3YXMgZm91bmQpLlxuICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgLy8gTnVtZXJpYyBlbnRpdHkuXG4gICAgICAgIGlmIChzdHJbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAoc3RyWzFdID09PSBcInhcIikge1xuICAgICAgICAgICAgICAgIGNvZGUgPSArKFwiMFwiICsgc3RyLnN1YnN0cigxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIGxlYWRpbmcgemVyb3MgaW4gb3JkZXIgdG8gYXZvaWQgdHJlYXRpbmcgYXMgb2N0YWwgaW4gb2xkIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgIGNvZGUgPSArc3RyLnN1YnN0cigxKS5yZXBsYWNlKFJlZ2V4LkxlYWRpbmdaZXJvcywgXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNOYU4oY29kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgfSBlbHNlIGlmIChYSFRNTEVudGl0aWVzW3N0cl0pIHtcbiAgICAgICAgICAgIHJldHVybiBYSFRNTEVudGl0aWVzW3N0cl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmVhdCBub24tZW50aXR5IHNlcXVlbmNlcyBhcyByZWd1bGFyIHRleHQuXG4gICAgaW5kZXggPSBzdGFydCArIDE7XG4gICAgcmV0dXJuIFwiJlwiO1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYVGV4dChzdG9wQ2hhcnMpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0O1xuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKHN0b3BDaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gXCImXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBzY2FuSlNYRW50aXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYVGV4dCxcbiAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCkge1xuICAgIHZhciBpbm5lclRva2VuLCBxdW90ZSwgc3RhcnQ7XG5cbiAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KChxdW90ZSA9PT0gXCJcXFwiXCIgfHwgcXVvdGUgPT09IFwiJ1wiKSxcbiAgICAgICAgXCJTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGVcIik7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgICsraW5kZXg7XG5cbiAgICBpbm5lclRva2VuID0gc2NhbkpTWFRleHQoW3F1b3RlXSk7XG5cbiAgICBpZiAocXVvdGUgIT09IHNvdXJjZVtpbmRleF0pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgKytpbmRleDtcblxuICAgIGlubmVyVG9rZW4ucmFuZ2UgPSBbc3RhcnQsIGluZGV4XTtcblxuICAgIHJldHVybiBpbm5lclRva2VuO1xufVxuXG4vKlxuICogQmV0d2VlbiBKU1ggb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChlLmcuIDxmb28+SEVSRTwvZm9vPiksIGFueXRoaW5nIHRoYXRcbiAqIGlzIG5vdCBhbm90aGVyIEpTWCB0YWcgYW5kIGlzIG5vdCBhbiBleHByZXNzaW9uIHdyYXBwZWQgYnkge30gaXMgdGV4dC5cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUpTWENoaWxkKCkge1xuICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIHsgKDEyMykgYW5kIDwgKDYwKVxuICAgIGlmIChjaCAhPT0gMTIzICYmIGNoICE9PSA2MCkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWFRleHQoW1wiPFwiLCBcIntcIl0pO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uSlNYSWRlbnRpZmllcikge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICB0b2tlbiA9IGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWElkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpIHtcbiAgICB2YXIgbmFtZXNwYWNlLCBuYW1lLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWVzcGFjZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuICAgIGV4cGVjdChcIjpcIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYTWVtYmVyRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGV4cHIgPSBwYXJzZUpTWElkZW50aWZpZXIoKTtcblxuICAgIHdoaWxlIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb24oZXhwciwgcGFyc2VKU1hJZGVudGlmaWVyKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbGVtZW50TmFtZSgpIHtcbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpO1xuICAgIH1cbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIi5cIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hNZW1iZXJFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlSlNYSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYTmFtZXNwYWNlZE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSB7XG4gICAgdmFyIHZhbHVlLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgICAgICBpZiAodmFsdWUuZXhwcmVzc2lvbi50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYRW1wdHlFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIFwiSlNYIGF0dHJpYnV0ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJleHByZXNzaW9uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiPFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHZhbHVlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZEpTWEF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgd2hpbGUgKHNvdXJjZS5jaGFyQXQoaW5kZXgpICE9PSBcIn1cIikge1xuICAgICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hFbXB0eUV4cHJlc3Npb24oKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VKU1hFbXB0eUV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUgPSB0cnVlO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcbiAgICBleHBlY3QoXCIuLi5cIik7XG5cbiAgICBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZhbHNlO1xuXG4gICAgZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hTcHJlYWRBdHRyaWJ1dGUoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgbmFtZSwgbWFya2VyO1xuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWUgPSBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIEhUTUwgZW1wdHkgYXR0cmlidXRlXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQXR0cmlidXRlKG5hbWUsIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEF0dHJpYnV0ZShuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQ2hpbGQoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB0b2tlbiA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHRva2VuID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW4gPSBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWENsb3NpbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gdHJ1ZTtcbiAgICBleHBlY3QoXCI8XCIpO1xuICAgIGV4cGVjdChcIi9cIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcbiAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0cyB0aGVyZVxuICAgIC8vIHRvIGJlIGEgdmFsaWQgdG9rZW4gYWZ0ZXIgPiwgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRvIGxvb2sgZm9yIGFcbiAgICAvLyBzdGFuZGFyZCBKUyB0b2tlbiBvciBhbiBKU1ggdGV4dCBub2RlXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuICAgIGV4cGVjdChcIj5cIik7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBhdHRyaWJ1dGVzID0gW10sIHNlbGZDbG9zaW5nID0gZmFsc2UsIG9yaWdJbkpTWENoaWxkLFxuICAgICAgICBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IHRydWU7XG5cbiAgICBleHBlY3QoXCI8XCIpO1xuXG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIi9cIiAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIj5cIikge1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2gocGFyc2VKU1hBdHRyaWJ1dGUoKSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcIi9cIikge1xuICAgICAgICBleHBlY3QoXCIvXCIpO1xuICAgICAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0c1xuICAgICAgICAvLyB0aGVyZSB0byBiZSBhIHZhbGlkIHRva2VuIGFmdGVyID4sIGl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0b1xuICAgICAgICAvLyBsb29rIGZvciBhIHN0YW5kYXJkIEpTIHRva2VuIG9yIGFuIEpTWCB0ZXh0IG5vZGVcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgICAgICBleHBlY3QoXCI+XCIpO1xuICAgICAgICBzZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IHRydWU7XG4gICAgICAgIGV4cGVjdChcIj5cIik7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRWxlbWVudCgpIHtcbiAgICB2YXIgb3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50ID0gbnVsbCwgY2hpbGRyZW4gPSBbXSwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgb3BlbmluZ0VsZW1lbnQgPSBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCk7XG5cbiAgICBpZiAoIW9wZW5pbmdFbGVtZW50LnNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlOyAvLyBDYWxsIGxvb2thaGVhZDIoKSB3aXRoIGluSlNYQ2hpbGQgPSBmYWxzZSBiZWNhdXNlIDwvIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgY2hpbGRcbiAgICAgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiPFwiICYmIGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXJzZUpTWENoaWxkKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICAgICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG4gICAgICAgIGNsb3NpbmdFbGVtZW50ID0gcGFyc2VKU1hDbG9zaW5nRWxlbWVudCgpO1xuICAgICAgICBpZiAoZ2V0UXVhbGlmaWVkSlNYTmFtZShjbG9zaW5nRWxlbWVudC5uYW1lKSAhPT0gZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRXhwZWN0ZWRKU1hDbG9zaW5nVGFnLCBnZXRRdWFsaWZpZWRKU1hOYW1lKG9wZW5pbmdFbGVtZW50Lm5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogV2hlbiAoZXJyb25lb3VzbHkpIHdyaXRpbmcgdHdvIGFkamFjZW50IHRhZ3MgbGlrZVxuICAgICAqXG4gICAgICogICAgIHZhciB4ID0gPGRpdj5vbmU8L2Rpdj48ZGl2PnR3bzwvZGl2PjtcbiAgICAgKlxuICAgICAqIHRoZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgaXMgYSBiaXQgaW5jb21wcmVoZW5zaWJsZS4gU2luY2UgaXRcInNcbiAgICAgKiByYXJlbHkgKG5ldmVyPykgdXNlZnVsIHRvIHdyaXRlIGEgbGVzcy10aGFuIHNpZ24gYWZ0ZXIgYW4gSlNYXG4gICAgICogZWxlbWVudCwgd2UgZGlzYWxsb3cgaXQgaGVyZSBpbiB0aGUgcGFyc2VyIGluIG9yZGVyIHRvIHByb3ZpZGUgYVxuICAgICAqIGJldHRlciBlcnJvciBtZXNzYWdlLiAoSW4gdGhlIHJhcmUgY2FzZSB0aGF0IHRoZSBsZXNzLXRoYW4gb3BlcmF0b3JcbiAgICAgKiB3YXMgaW50ZW5kZWQsIHRoZSBsZWZ0IHRhZyBjYW4gYmUgd3JhcHBlZCBpbiBwYXJlbnRoZXNlcy4pXG4gICAgICovXG4gICAgaWYgKCFvcmlnSW5KU1hDaGlsZCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkFkamFjZW50SlNYRWxlbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEVsZW1lbnQob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikpO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9jYXRpb24gbWFya2Vyc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBcHBsaWVzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBnaXZlbiBtYXJrZXIuXG4gKiBUaGUgbWFya2VyIGluZGljYXRlcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIG5vZGUgaXMgc2FpZCB0byBoYXZlIHRvIGJlZ3VuXG4gKiBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gYXBwbHkgbG9jYXRpb24gaW5mb3JtYXRpb24gdG8uXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIG5vZGUgdGhhdCB3YXMgcGFzc2VkIGluLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQXBwbHkobWFya2VyLCBub2RlKSB7XG5cbiAgICAvLyBhZGQgcmFuZ2UgaW5mb3JtYXRpb24gdG8gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICBub2RlLnJhbmdlID0gW21hcmtlci5vZmZzZXQsIGluZGV4XTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbG9jYXRpb24gaW5mb3JtYXRpb24gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgbm9kZS5sb2MgPSB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IG1hcmtlci5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBBdHRhY2ggZXh0cmEuc291cmNlIGluZm9ybWF0aW9uIHRvIHRoZSBsb2NhdGlvbiwgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZXh0cmEuc291cmNlKSB7XG4gICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudHMgaWYgcmVxdWVzdGVkXG4gICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgY29tbWVudEF0dGFjaG1lbnQucHJvY2Vzc0NvbW1lbnQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxvY2F0aW9uIG1hcmtlciBpbiB0aGUgc291cmNlIGNvZGUuIExvY2F0aW9uIG1hcmtlcnMgYXJlIHVzZWQgZm9yXG4gKiB0cmFja2luZyB3aGVyZSB0b2tlbnMgYW5kIG5vZGVzIGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG1hcmtlciBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBoYXZlXG4gKiAgICAgIGFueSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckNyZWF0ZSgpIHtcblxuICAgIGlmICghZXh0cmEubG9jICYmICFleHRyYS5yYW5nZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYXRpb24gbWFya2VyIGluIHRoZSBzb3VyY2UgY29kZS4gTG9jYXRpb24gbWFya2VycyBhcmUgdXNlZCBmb3JcbiAqIHRyYWNraW5nIHdoZXJlIHRva2VucyBhbmQgbm9kZXMgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS4gVGhpcyBtZXRob2RcbiAqIGRvZXNuJ3Qgc2tpcCBjb21tZW50cyBvciBleHRyYSB3aGl0ZXNwYWNlIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgSlNYLlxuICogQHJldHVybnMge09iamVjdH0gQSBtYXJrZXIgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgaGF2ZVxuICogICAgICBhbnkgbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKSB7XG5cbiAgICBpZiAoIWV4dHJhLmxvYyAmJiAhZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ludGF4IFRyZWUgRGVsZWdhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi5cblxuZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkge1xuICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgIHNraXBDb21tZW50KCk7XG4gICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIGZvdW5kO1xufVxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb25cblxuZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkge1xuXG4gICAgdmFyIGVycm9yLFxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgLyUoXFxkKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCBcIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIHRva2VuLmxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IHRva2VuLnJhbmdlWzBdO1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gdG9rZW4ucmFuZ2VbMF0gLSB0b2tlbi5saW5lU3RhcnQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIGxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4O1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxO1xuICAgIH1cblxuICAgIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnO1xuICAgIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi5cblxuZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2VuKSB7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5KU1hUZXh0KSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7XG4gICAgfVxuXG4gICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLlxuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbmZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbmZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZFxuLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbmZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7XG4gICAgdmFyIG9wO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgcmV0dXJuIG9wID09PSBcIj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIqPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi89XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIrPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi09XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPDw9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj4+PVwiIHx8XG4gICAgICAgIG9wID09PSBcIiY9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiXj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJ8PVwiO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIHZhciBsaW5lO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKFwifVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuXG5mdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7XG4gICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRtcDtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwiXVwiKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTsgLy8gb25seSBnZXQgaGVyZSB3aGVuIHlvdSBoYXZlIFthLCxdIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTtcbiAgICAgICAgICAgIGlmICghKG1hdGNoKFwiXVwiKSkpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCIsXCIpOyAvLyBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG59XG5cbi8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtSW5mbywgb3B0aW9ucykge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHN0cmljdCxcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQsXG4gICAgICAgIGdlbmVyYXRvciA9IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBib2R5O1xuXG4gICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yO1xuXG4gICAgLypcbiAgICAgKiBFc3ByaW1hIHVzZXMgcGFyc2VDb25jaXNlQm9keSgpIGhlcmUsIHdoaWNoIGlzIGluY29ycmVjdC4gT2JqZWN0IGxpdGVyYWxcbiAgICAgKiBtZXRob2RzIG11c3QgaGF2ZSBicmFjZXMuXG4gICAgICovXG4gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShvcHRpb25zLm1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJhbUluZm8ucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBtZXRob2Q7XG5cbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbXMsIHtcbiAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zID8gb3B0aW9ucy5nZW5lcmF0b3IgOiBmYWxzZSxcbiAgICAgICAgbWFya2VyOiBtYXJrZXJcbiAgICB9KTtcblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRva2VuID0gbGV4KCksXG4gICAgICAgIGFsbG93T2JqZWN0TGl0ZXJhbENvbXB1dGVkID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXMsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIHJlc3VsdDtcblxuICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpKTtcblxuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblxuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAoKCFzdGF0ZS5pbk9iamVjdExpdGVyYWwgfHwgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBwcm9wZXJ0aWVzIHdlIHNob3VsZCBza2lwIHRoZSBbIGFuZCBdLCBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBvbmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLlxuICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cblxuICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICBzd2l0Y2ggKGxvb2thaGVhZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCI7XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhvZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0IGxpdGVyYWxzLFxuLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbi8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbi8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4vLyBpcyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLlxuZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtYXJrZXIpIHtcbiAgICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE1hcmtlcjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNldGA7XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG5cbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiZ2V0XCIsIGtleSwgdmFsdWUsIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7IG1hcmtlcjogbWV0aG9kTWFya2VyIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJzZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcImluaXRcIiwga2V5LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgR2VuZXJhdG9yIFByb3BlcnRpZXNcbiAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXkgKHVzdWFsbHkgYW4gaWRlbnRpZmllcikuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgZ2VuZXJhdG9yIHByb3BlcnR5IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoa2V5LCBtYXJrZXIpIHtcblxuICAgIHZhciBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcblxuICAgIGlmICghbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLy8gVE9ETyhuemFrYXMpOiBVcGRhdGUgdG8gbWF0Y2ggRXNwcmltYVxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sIGtleSwgaWQsIGNvbXB1dGVkLCBtZXRob2RNYXJrZXIsIG9wdGlvbnM7XG4gICAgdmFyIGFsbG93Q29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgYWxsb3dNZXRob2QgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHMsXG4gICAgICAgIGFsbG93U2hvcnRoYW5kID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIGFsbG93U3ByZWFkID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgY29tcHV0ZWQgPSAodG9rZW4udmFsdWUgPT09IFwiW1wiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgKGFsbG93Q29tcHV0ZWQgJiYgY29tcHV0ZWQpKSB7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2sgZm9yIGdldHRlcnMgYW5kIHNldHRlcnMuIEJlIGNhcmVmdWwhIFwiZ2V0XCIgYW5kIFwic2V0XCIgYXJlIGxlZ2FsXG4gICAgICAgICAqIG1ldGhvZCBuYW1lcy4gSXQncyBvbmx5IGEgZ2V0dGVyIG9yIHNldHRlciBpZiBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24ob3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsIHByb3BlcnR5IChrZXk6dmFsdWUpXG4gICAgICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWV0aG9kIHNob3J0aGFuZCAoa2V5KCl7Li4ufSlcbiAgICAgICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmluZyBkZWZhdWx0cyAoc2hvcnRoYW5kIHN5bnRheClcbiAgICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFwiPVwiLCBpZCwgdmFsdWUpKTtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIHZhciBmdWxsUHJvcGVydHkgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIHNob3J0aGFuZFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZnVsbFByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIE9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGlzIGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5LiBDb21wdXRlZFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIGNhbm5vdCB1c2Ugc2hvcnRoYW5kIG5vdGF0aW9uLCBzbyB0aGF0J3MgYSBzeW50YXggZXJyb3IuXG4gICAgICAgICAqIElmIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGFyZW4ndCBhbGxvdywgdGhlbiB0aGlzIGlzIGFuIGF1dG9tYXRpY1xuICAgICAgICAgKiBzeW50YXggZXJyb3IuIERlc3RydWN0dXJpbmcgaXMgYW5vdGhlciBjYXNlIHdpdGggYSBzaW1pbGFyIHNob3J0aGFuZCBzeW50YXguXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY29tcHV0ZWQgfHwgKCFhbGxvd1Nob3J0aGFuZCAmJiAhYWxsb3dEZXN0cnVjdHVyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG9ydGhhbmQgcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG9iamVjdCBzcHJlYWQgcHJvcGVydHlcbiAgICBpZiAoYWxsb3dTcHJlYWQgJiYgbWF0Y2goXCIuLi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpO1xuICAgIH1cblxuICAgIC8vIG9ubHkgcG9zc2liaWxpdHkgaW4gdGhpcyBicmFuY2ggaXMgYSBzaG9ydGhhbmQgZ2VuZXJhdG9yXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzIHx8ICFtYXRjaChcIipcIikgfHwgIWFsbG93TWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoaWQsIG1hcmtlcik7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIElmIHdlJ3ZlIG1hZGUgaXQgaGVyZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHJlcHJlc2VudGVkXG4gICAgICogYnkgYSBzdHJpbmcgKGkuZSwgeyBcImZvb1wiOiAyfSkuIFRoZSBvbmx5IG9wdGlvbnMgaGVyZSBhcmUgbm9ybWFsXG4gICAgICogcHJvcGVydHkgd2l0aCBhIGNvbG9uIG9yIGEgbWV0aG9kLlxuICAgICAqL1xuICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgIC8vIGNoZWNrIGZvciBwcm9wZXJ0eSB2YWx1ZVxuICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgbWV0aG9kXG4gICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vIG90aGVyIG9wdGlvbnMsIHRoaXMgaXMgYmFkXG4gICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGROYW1lKGtleSkge1xuICAgIHZhciB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAoa2V5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBrZXkubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKGtleS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0R1cGxpY2F0ZXMgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByb3BlcnR5Rm4sXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN0b3JlZEtpbmQsXG4gICAgICAgIHByZXZpb3VzSW5PYmplY3RMaXRlcmFsID0gc3RhdGUuaW5PYmplY3RMaXRlcmFsLFxuICAgICAgICBraW5kTWFwID0gbmV3IFN0cmluZ01hcCgpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHkuY29tcHV0ZWQgJiYgcHJvcGVydHkudHlwZS5pbmRleE9mKFwiRXhwZXJpbWVudGFsXCIpID09PSAtMSkge1xuXG4gICAgICAgICAgICBuYW1lID0gZ2V0RmllbGROYW1lKHByb3BlcnR5LmtleSk7XG4gICAgICAgICAgICBwcm9wZXJ0eUZuID0gKHByb3BlcnR5LmtpbmQgPT09IFwiZ2V0XCIpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7XG4gICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09IFwiaW5pdFwiKSA/IFByb3BlcnR5S2luZC5EYXRhIDogcHJvcGVydHlGbjtcblxuICAgICAgICAgICAgaWYgKGtpbmRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmVkS2luZCA9IGtpbmRNYXAuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRLaW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgbmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSAnX19wcm90b19fJyBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIGZvcmJpZGRlbiBpbiBFUyA2XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvdHlwZVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgIWFsbG93RHVwbGljYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHVwbGljYXRlIGxpdGVyYWwgcHJvcGVydGllcyBhcmUgb25seSBmb3JiaWRkZW4gaW4gRVMgNSBzdHJpY3QgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRLaW5kICYga2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwgc3RvcmVkS2luZCB8IGtpbmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBraW5kTWFwLnNldChuYW1lLCBraW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGV4cGVjdChcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gcHJldmlvdXNJbk9iamVjdExpdGVyYWw7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50IGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24gUGFyc2luZyAmIHNjYW5uaW5nIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24uaGVhZCBUcnVlIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUgZmlyc3QgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgZWxlbWVudCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUVsZW1lbnQob3B0aW9uKSB7XG4gICAgdmFyIG1hcmtlciwgdG9rZW47XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlRlbXBsYXRlIHx8IChvcHRpb24uaGVhZCAmJiAhbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVFbGVtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LFxuICAgICAgICAgICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9rZW4udGFpbFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgbGl0ZXJhbCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7XG4gICAgdmFyIHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0pO1xuICAgIHF1YXNpcyA9IFsgcXVhc2kgXTtcbiAgICBleHByZXNzaW9ucyA9IFtdO1xuXG4gICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG4gICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogZmFsc2UgfSk7XG4gICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykpO1xufVxuXG4vLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICsrc3RhdGUucGFyZW50aGVzaXNDb3VudDtcblxuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgYWxsb3dTdXBlciA9IGFsbG93Q2xhc3NlcyB8fCBleHRyYS5lY21hRmVhdHVyZXMuc3VwZXJJbkZ1bmN0aW9ucztcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93U3VwZXIgJiYgbWF0Y2hLZXl3b3JkKFwic3VwZXJcIikgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTdXBlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ0aGlzXCIpKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhpc0V4cHJlc3Npb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dDbGFzc2VzICYmIG1hdGNoS2V5d29yZChcImNsYXNzXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gXCJ0cnVlXCIpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZSh0b2tlbiwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiL1wiKSB8fCBtYXRjaChcIi89XCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UoY29sbGVjdFJlZ2V4KCksIHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2Uoc2NhblJlZ0V4cCgpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHBlZWsoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBhcmc7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKSB7XG4gICAgaWYgKG1hdGNoKFwiLi4uXCIpKSB7XG4gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNwcmVhZEVsZW1lbnQocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgZXhwZWN0KFwiLlwiKTtcblxuICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgY2FsbGVlLCBhcmdzLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJuZXdcIik7XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLm5ld1RhcmdldCAmJiBtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwidGFyZ2V0XCIpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1ldGFQcm9wZXJ0eShcIm5ld1wiLCBcInRhcmdldFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTtcbiAgICBhcmdzID0gbWF0Y2goXCIoXCIpID8gcGFyc2VBcmd1bWVudHMoKSA6IFtdO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkge1xuICAgIHZhciBleHByLCBhcmdzLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgbWF0Y2goXCIoXCIpIHx8IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncykpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICgobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgICAgIC8vIDExLjMuMSwgMTEuMy4yXG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyAxMS40IFVuYXJ5IE9wZXJhdG9yc1xuXG5mdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgLy8gMTEuNC40LCAxMS40LjVcbiAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIitcIikgfHwgbWF0Y2goXCItXCIpIHx8IG1hdGNoKFwiflwiKSB8fCBtYXRjaChcIiFcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJkZWxldGVcIikgfHwgbWF0Y2hLZXl3b3JkKFwidm9pZFwiKSB8fCBtYXRjaEtleXdvcmQoXCJ0eXBlb2ZcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9PT0gXCJkZWxldGVcIiAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7XG4gICAgdmFyIHByZWMgPSAwO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgY2FzZSBcInx8XCI6XG4gICAgICAgIHByZWMgPSAxO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCImJlwiOlxuICAgICAgICBwcmVjID0gMjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwifFwiOlxuICAgICAgICBwcmVjID0gMztcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXlwiOlxuICAgICAgICBwcmVjID0gNDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiJlwiOlxuICAgICAgICBwcmVjID0gNTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPT1cIjpcbiAgICBjYXNlIFwiIT1cIjpcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgICBwcmVjID0gNjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPFwiOlxuICAgIGNhc2UgXCI+XCI6XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgY2FzZSBcIj49XCI6XG4gICAgY2FzZSBcImluc3RhbmNlb2ZcIjpcbiAgICAgICAgcHJlYyA9IDc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImluXCI6XG4gICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIjw8XCI6XG4gICAgY2FzZSBcIj4+XCI6XG4gICAgY2FzZSBcIj4+PlwiOlxuICAgICAgICBwcmVjID0gODtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiK1wiOlxuICAgIGNhc2UgXCItXCI6XG4gICAgICAgIHByZWMgPSA5O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCIqXCI6XG4gICAgY2FzZSBcIi9cIjpcbiAgICBjYXNlIFwiJVwiOlxuICAgICAgICBwcmVjID0gMTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWM7XG59XG5cbi8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzXG4vLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9yc1xuLy8gMTEuOCBSZWxhdGlvbmFsIE9wZXJhdG9yc1xuLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnNcbi8vIDExLjEwIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9yc1xuLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzXG5mdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHRva2VuLCBwcmVjLCBwcmV2aW91c0FsbG93SW4sIHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGksXG4gICAgICAgIG1hcmtlciwgbWFya2VycztcblxuICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBwcmV2aW91c0FsbG93SW4pO1xuICAgIGlmIChwcmVjID09PSAwKSB7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICBsZXgoKTtcblxuICAgIG1hcmtlcnMgPSBbbWFya2VyLCBtYXJrZXJDcmVhdGUoKV07XG4gICAgcmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTtcblxuICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBwcmV2aW91c0FsbG93SW4pKSA+IDApIHtcblxuICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlO1xuICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpO1xuICAgICAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNoaWZ0LlxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXJDcmVhdGUoKSk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGFjay5wdXNoKGV4cHIpO1xuICAgIH1cblxuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLlxuICAgIGkgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgIGV4cHIgPSBzdGFja1tpXTtcbiAgICBtYXJrZXJzLnBvcCgpO1xuICAgIHdoaWxlIChpID4gMSkge1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7XG4gICAgICAgIGkgLT0gMjtcbiAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTtcbiAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIGlmIChtYXRjaChcIj9cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuICAgICAgICBleHBlY3QoXCI6XCIpO1xuICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyBbRVM2XSAxNC4yIEFycm93IEZ1bmN0aW9uXG5cbmZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHJlc3Npb25zKSB7XG4gICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgb3B0aW9ucyxcbiAgICAgICAgYWxsb3dSZXN0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXM7XG5cbiAgICBwYXJhbXMgPSBbXTtcbiAgICBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbVNldDogbmV3IFN0cmluZ01hcCgpXG4gICAgfTtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIHBhcmFtID0gZXhwcmVzc2lvbnNbaV07XG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7XG4gICAgICAgIH0gIGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uIHx8IHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICBhc3NlcnQoaSA9PT0gbGVuIC0gMSwgXCJJdCBpcyBndWFyYW50ZWVkIHRoYXQgU3ByZWFkRWxlbWVudCBpcyBsYXN0IGVsZW1lbnQgYnkgcGFyc2VFeHByZXNzaW9uXCIpO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmFyZ3VtZW50LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIltcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgZ2V0IGNvcnJlY3QgbGluZS9jb2x1bW4gaGVyZSA6KFxuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCIuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQ7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlJlc3RFbGVtZW50KSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24pIHtcblxuICAgICAgICAgICAgLy8gVE9ETzogRmluZCBhIGxlc3MgaGFja3kgd2F5IG9mIGRvaW5nIHRoaXNcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgICAgICAgICBkZWxldGUgcGFyYW0ub3BlcmF0b3I7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBhc3ROb2RlVHlwZXMuWWllbGRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0LnR5cGUgPSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gXCJ5aWVsZFwiO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCwgcGFyYW0ubGVmdC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7XG4gICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICBzdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucywgbWFya2VyKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5O1xuICAgIHZhciBhcnJvd1N0YXJ0ID0gbGluZU51bWJlcjtcblxuICAgIGV4cGVjdChcIj0+XCIpO1xuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgaWYgKGxpbmVOdW1iZXIgPiBhcnJvd1N0YXJ0KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCI9PlwiKTtcbiAgICB9XG5cbiAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMuc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgIG9wdGlvbnMucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBib2R5LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5CbG9ja1N0YXRlbWVudFxuICAgICkpO1xufVxuXG4vLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9yc1xuXG4vLyAxMi4xNC41IEFzc2lnbm1lbnRQYXR0ZXJuXG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwcikge1xuICAgIHZhciBpLCBsZW4sIHByb3BlcnR5LCBlbGVtZW50LFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dSZXN0ID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQ7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoYWxsb3dSZXN0ICYmIHByb3BlcnR5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxTcHJlYWRQcm9wZXJ0eSkge1xuXG4gICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIFwiSW52YWxpZCBvYmplY3QgcmVzdC5cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxSZXN0UHJvcGVydHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkua2luZCAhPT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByLmFyZ3VtZW50KTtcbiAgICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzU3ByZWFkKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAxMy4yLjMgQmluZGluZ1BhdHRlcm5cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBleHByKSB7XG4gICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nO1xuXG4gICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIsIGV4cHIubmFtZSk7XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgIC8vIEJpbmRpbmdSZXN0RWxlbWVudCBvbmx5IGFsbG93cyBCaW5kaW5nSWRlbnRpZmllclxuICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLmFyZ3VtZW50LCBleHByLmFyZ3VtZW50Lm5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm4pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2RlLCBwYXJhbXMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gZmFsc2UsXG4gICAgICAgIG9sZFBhcmVudGhlc2lzQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIC8vIE5vdGUgdGhhdCAneWllbGQnIGlzIHRyZWF0ZWQgYXMgYSBrZXl3b3JkIGluIHN0cmljdCBtb2RlLCBidXQgYVxuICAgIC8vIGNvbnRleHR1YWwga2V5d29yZCAoaWRlbnRpZmllcikgaW4gbm9uLXN0cmljdCBtb2RlLCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIG1hdGNoS2V5d29yZCBhbmQgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCBhcHByb3ByaWF0ZWx5LlxuICAgIGlmIChhbGxvd0dlbmVyYXRvcnMgJiYgKChzdGF0ZS55aWVsZEFsbG93ZWQgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcInlpZWxkXCIpKSB8fCAoc3RyaWN0ICYmIG1hdGNoS2V5d29yZChcInlpZWxkXCIpKSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlWWllbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkMigpO1xuICAgICAgICBpZiAoKHRva2VuLnZhbHVlID09PSBcIilcIiAmJiB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB8fCB0b2tlbi52YWx1ZSA9PT0gXCIuLi5cIikge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCI9PlwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyByZXZlcnQgdG8gdGhlIHByZXZpb3VzIGxvb2thaGVhZCBzdHlsZSBvYmplY3RcbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBub2RlID0gbGVmdCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAobWF0Y2goXCI9PlwiKSAmJlxuICAgICAgICAgICAgKHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IG9sZFBhcmVudGhlc2lzQ291bnQgfHxcbiAgICAgICAgICAgIHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IChvbGRQYXJlbnRoZXNpc0NvdW50ICsgMSkpKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChbIG5vZGUgXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoUGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3Qobm9kZS5leHByZXNzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hBc3NpZ24oKSkge1xuXG4gICAgICAgIC8vIDExLjEzLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEuMTMgUnVudGltZSBTZW1hbnRpY3Mgc3RlcCAxXG4gICAgICAgIGlmIChtYXRjaChcIj1cIikgJiYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSkge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNMZWZ0SGFuZFNpZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICBub2RlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBbIGV4cHIgXSxcbiAgICAgICAgc2VxdWVuY2UsIHNwcmVhZEZvdW5kO1xuXG4gICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7XG5cbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3ByZWFkRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlcXVlbmNlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoc3ByZWFkRm91bmQgJiYgbG9va2FoZWFkMigpLnZhbHVlICE9PSBcIj0+XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbFNwcmVhZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcXVlbmNlIHx8IGV4cHI7XG59XG5cbi8vIDEyLjEgQmxvY2tcblxuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkge1xuICAgIHZhciBsaXN0ID0gW10sXG4gICAgICAgIHN0YXRlbWVudDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgIHZhciBibG9jayxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExpc3QoKTtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jaykpO1xufVxuXG4vLyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBpZCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGluaXQgPSBudWxsO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAvLyAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFZlcmlmeSBhZ2FpbnN0IGZlYXR1cmUgZmxhZ3NcbiAgICBpZiAoa2luZCA9PT0gXCJjb25zdFwiKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0KTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI9XCIpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTtcbiAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnM7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidmFyXCIpO1xuXG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBcInZhclwiKTtcbn1cblxuLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YFxuLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LlxuLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3Rcbi8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldFxuZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHtcbiAgICB2YXIgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoa2luZCk7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVJlc3RFbGVtZW50KCkge1xuICAgIHZhciBwYXJhbSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsZXgoKTtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXN0RWxlbWVudChwYXJhbSkpO1xufVxuXG4vLyAxMi4zIEVtcHR5IFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICAgIGV4cGVjdChcIjtcIik7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7XG59XG5cbi8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkge1xuICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xufVxuXG4vLyAxMi41IElmIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaWZcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImVsc2VcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbn1cblxuLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImRvXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcIndoaWxlXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHtcbiAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3BlcmF0b3IsIG9sZEluSXRlcmF0aW9uO1xuICAgIHZhciBhbGxvd0Zvck9mID0gZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmb3JcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ2YXJcIikgfHxcbiAgICAgICAgICAgIChhbGxvd0Jsb2NrQmluZGluZ3MgJiYgKG1hdGNoS2V5d29yZChcImxldFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjb25zdFwiKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiaW5cIikgfHwgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyBcInZhclwiIGNoZWNrIGhlcmUgcmVhbGx5IG5lZWRlZD8gd2FzblwidCBpbiAxLjIuMlxuICAgICAgICAgICAgICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09IFwiaW5cIiB8fCBpbml0LmtpbmQgIT09IFwidmFyXCIpICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluaXQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGluaXQudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwZWN0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFwiO1wiKTtcblxuICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYgb3B0cy5pZ25vcmVCb2R5KSkge1xuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KTtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mICYmIG9wZXJhdG9yLnZhbHVlID09PSBcIm9mXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xufVxuXG4vLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNvbnRpbnVlXCIpO1xuXG4gICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06IFwiY29udGludWU7XCIuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTtcbn1cblxuLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGxhYmVsID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJicmVha1wiKTtcblxuICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkge1xuICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwicmV0dXJuXCIpO1xuXG4gICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSAmJiAhZXh0cmEuZWNtYUZlYXR1cmVzLmdsb2JhbFJldHVybikge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgIH1cblxuICAgIC8vIFwicmV0dXJuXCIgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHtcbiAgICB2YXIgb2JqZWN0LCBib2R5O1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkP1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2l0aFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG59XG5cbi8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZChcImNhc2VcIik7XG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgZXhwZWN0KFwiOlwiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2FzZVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJzd2l0Y2hcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGNhc2VzID0gW107XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xuICAgIH1cblxuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlO1xuICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpO1xuICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xufVxuXG4vLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGFyZ3VtZW50O1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRocm93XCIpO1xuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTtcbiAgICB9XG5cbiAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHtcbiAgICB2YXIgcGFyYW0sIGJvZHksXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICAgICAgfTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjYXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG4gICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuXG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIDEyLjE0LjFcbiAgICBpZiAoc3RyaWN0ICYmIHBhcmFtLm5hbWUgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJsb2NrLCBoYW5kbGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ0cnlcIik7XG5cbiAgICBibG9jayA9IHBhcnNlQmxvY2soKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJjYXRjaFwiKSkge1xuICAgICAgICBoYW5kbGVyID0gcGFyc2VDYXRjaENsYXVzZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmaW5hbGx5XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKTtcbn1cblxuLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICAgIGV4cGVjdEtleXdvcmQoXCJkZWJ1Z2dlclwiKTtcblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVEZWJ1Z2dlclN0YXRlbWVudCgpO1xufVxuXG4vLyAxMiBTdGF0ZW1lbnRzXG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkge1xuICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhYmVsZWRCb2R5LFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiO1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYnJlYWtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUJyZWFrU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VDb250aW51ZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkZWJ1Z2dlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZm9yXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VGb3JTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSk7XG4gICAgICAgICAgICBjYXNlIFwiaWZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUlmU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VUaHJvd1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0cnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRyeVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndoaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ3aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaXRoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHNcbiAgICBpZiAoKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpICYmIG1hdGNoKFwiOlwiKSkge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoc3RhdGUubGFiZWxTZXQuaGFzKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sIFwiTGFiZWxcIiwgZXhwci5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LnNldChleHByLm5hbWUsIHRydWUpO1xuICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LmRlbGV0ZShleHByLm5hbWUpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSk7XG4gICAgfVxuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG59XG5cbi8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb25cblxuLy8gZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbi8vICAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4vLyAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbi8vIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkge1xuICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBvbGRQYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7XG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoO1xuICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7XG4gICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICBzdGF0ZS5sYWJlbFNldCA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIHN0YXRlLmluU3dpdGNoID0gZmFsc2U7XG4gICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG5cbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7XG4gICAgc3RhdGUucGFyZW50aGVzaXNDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wdGlvbnMucGFyYW1TZXQuc2V0KG5hbWUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMpIHtcbiAgICB2YXIgdG9rZW4sIHBhcmFtLCBkZWYsXG4gICAgICAgIGFsbG93UmVzdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5yZXN0UGFyYW1zLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dEZWZhdWx0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlZmF1bHRQYXJhbXMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgaWYgKHRva2VuLnZhbHVlID09PSBcIi4uLlwiKSB7XG4gICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlUmVzdEVsZW1lbnQoKTtcbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgdG9rZW4sIHRva2VuLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGlmIChhbGxvd0RlZmF1bHRQYXJhbXMgfHwgYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGRlZiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICsrb3B0aW9ucy5kZWZhdWx0Q291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWYpIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRQYXR0ZXJuKFxuICAgICAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgICAgIGRlZlxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIW1hdGNoKFwiKVwiKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICB2YXIgb3B0aW9ucztcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWRcbiAgICB9O1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFwYXJzZVBhcmFtKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICAgICAgdmFyIGlkID0gbnVsbCwgYm9keSwgdG9rZW4sIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvcixcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnM7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZChcImZ1bmN0aW9uXCIpO1xuXG4gICAgICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuICAgICAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmIG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhbWF0Y2goXCIoXCIpKSB7XG5cbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7XG4gICAgICAgIGlmICh0bXAubWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRtcC5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGdlbmVyYXRvciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB5aWVsZFRva2VuID0gbGV4KCk7XG4gICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09IFwieWllbGRcIiwgXCJDYWxsZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLlwiKTtcblxuICAgIGlmICghc3RhdGUueWllbGRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVZaWVsZEV4cHJlc3Npb24obnVsbCwgZGVsZWdhdGVGbGFnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikgJiYgIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBpZiAoIW1hdGNoKFwifVwiKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4cHIsIGRlbGVnYXRlRmxhZykpO1xufVxuXG4vLyBNb2R1bGVzIGdyYW1tYXIgZnJvbTpcbi8vIHBlb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbFxuXG5mdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHNwZWNpZmllcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICB9XG4gICAgc3BlY2lmaWVyID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgaWYgKG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKFwiZGVmYXVsdFwiKSk7XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcInNvbWV0aGluZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG5cbiAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidmFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpICYmICFtYXRjaChcIn1cIikpO1xuICAgIH1cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gXCJmb29cIjtcbiAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gXCJmb29cIjtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZVxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvdmVyXG4gICAgICAgIC8vIGV4cG9ydCB7Zm9vfTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgZXhwcmVzc2lvbiA9IG51bGwsXG4gICAgICAgIHBvc3NpYmxlSWRlbnRpZmllclRva2VuLFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgZXhwZWN0S2V5d29yZChcImV4cG9ydFwiKTtcbiAgICBleHBlY3RLZXl3b3JkKFwiZGVmYXVsdFwiKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmdW5jdGlvblwiKSB8fCBtYXRjaEtleXdvcmQoXCJjbGFzc1wiKSkge1xuICAgICAgICBwb3NzaWJsZUlkZW50aWZpZXJUb2tlbiA9IGxvb2thaGVhZDIoKTtcbiAgICAgICAgaWYgKHBvc3NpYmxlSWRlbnRpZmllclRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fVxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgZm9vIHt9XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyB7fVxuICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dDbGFzc2VzICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQge307XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgW107XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZXhwcmVzc2lvbikpO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHNyYyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0ICogZnJvbSBcImZvb1wiO1xuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG4gICAgZXhwZWN0KFwiKlwiKTtcbiAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfVxuICAgIGxleCgpO1xuICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuICAgIHZhciBkZWNsYXJhdGlvblR5cGUgPSBsb29rYWhlYWQyKCkudmFsdWU7XG4gICAgaWYgKGRlY2xhcmF0aW9uVHlwZSA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvblR5cGUgPT09IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjtcbiAgICB2YXIgbG9jYWwsIGltcG9ydGVkLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYW1lZEltcG9ydHMoKSB7XG4gICAgdmFyIHNwZWNpZmllcnMgPSBbXTtcbiAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfVxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO1xuICAgICAgICB9IHdoaWxlIChtYXRjaChcIixcIikgJiYgbGV4KCkgJiYgIW1hdGNoKFwifVwiKSk7XG4gICAgfVxuICAgIGV4cGVjdChcIn1cIik7XG4gICAgcmV0dXJuIHNwZWNpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPGZvbz4gLi4uO1xuICAgIHZhciBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcGVjaWZpZXJzLCBzcmMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgZXhwZWN0S2V5d29yZChcImltcG9ydFwiKTtcbiAgICBzcGVjaWZpZXJzID0gW107XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgXCJmb29cIjtcbiAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgJiYgaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvb1xuICAgICAgICAvLyBpbXBvcnQgZm9vLCAuLi5cbiAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vXG4gICAgICAgIC8vIGltcG9ydCAqIGFzIGZvb1xuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfVxuICAgICAgICAvLyBpbXBvcnQge2Jhcn1cbiAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuLy8gMTQgRnVuY3Rpb25zIGFuZCBjbGFzc2VzXG5cbi8vIDE0LjEgRnVuY3Rpb25zIGlzIGRlZmluZWQgYWJvdmUgKDEzIGluIEVTNSlcbi8vIDE0LjIgQXJyb3cgRnVuY3Rpb25zIERlZmluaXRpb25zIGlzIGRlZmluZWQgaW4gKDcuMyBhc3NpZ25tZW50cylcblxuLy8gMTQuMyBNZXRob2QgRGVmaW5pdGlvbnNcbi8vIDE0LjMuN1xuXG4vLyAxNC41IENsYXNzIERlZmluaXRpb25zXG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NCb2R5KCkge1xuICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBnZW5lcmF0b3IgPSBmYWxzZSxcbiAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMsXG4gICAgICAgIHRva2VuLCBpc1N0YXRpYywgYm9keSA9IFtdLCBtZXRob2QsIGNvbXB1dGVkLCBrZXk7XG5cbiAgICB2YXIgZXhpc3RpbmdQcm9wcyA9IHt9LFxuICAgICAgICB0b3BNYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgbWFya2VyO1xuXG4gICAgZXhpc3RpbmdQcm9wcy5zdGF0aWMgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgZXhpc3RpbmdQcm9wcy5wcm90b3R5cGUgPSBuZXcgU3RyaW5nTWFwKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgd2hpbGUgKCFtYXRjaChcIn1cIikpIHtcblxuICAgICAgICAvLyBleHRyYSBzZW1pY29sb25zIGFyZSBmaW5lXG4gICAgICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgZ2VuZXJhdG9yID0gbWF0Y2goXCIqXCIpO1xuICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgaWYgKCFhbGxvd0dlbmVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXG4gICAgICAgIC8vIHN0YXRpYyBnZW5lcmF0b3IgbWV0aG9kc1xuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbWF0Y2goXCIqXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5uYW1lID09PSBcInN0YXRpY1wiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgbWV0aG9kID0gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShrZXksIG1hcmtlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1hcmtlciwgZ2VuZXJhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZC5zdGF0aWMgPSBpc1N0YXRpYztcbiAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNTdGF0aWMpIHtcblxuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgKG1ldGhvZC5rZXkudmFsdWUgJiYgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgIT09IFwibWV0aG9kXCIgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSBcImNvbnN0cnVjdG9yXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZC50eXBlID0gYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb247XG4gICAgICAgICAgICBkZWxldGUgbWV0aG9kLm1ldGhvZDtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRoYW5kO1xuICAgICAgICAgICAgYm9keS5wdXNoKG1ldGhvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseSh0b3BNYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNsYXNzQm9keShib2R5KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkge1xuICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3QsIGNsYXNzQm9keTtcblxuICAgIC8vIGNsYXNzZXMgcnVuIGluIHN0cmljdCBtb2RlXG4gICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjbGFzc1wiKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7XG59XG5cbi8vIDE1IFByb2dyYW1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkge1xuXG4gICAgdmFyIGFsbG93Q2xhc3NlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5jbGFzc2VzLFxuICAgICAgICBhbGxvd01vZHVsZXMgPSBleHRyYS5lY21hRmVhdHVyZXMubW9kdWxlcyxcbiAgICAgICAgYWxsb3dCbG9ja0JpbmRpbmdzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmJsb2NrQmluZGluZ3M7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3J0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd01vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93Q2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwibGV0XCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93QmxvY2tCaW5kaW5ncykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5MaXRlcmFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmVcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7XG4gICAgICAgIGlmIChkaXJlY3RpdmUgPT09IFwidXNlIHN0cmljdFwiKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7XG4gICAgdmFyIGJvZHksXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgaXNNb2R1bGUgPSAhIWV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBwZWVrKCk7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgc3RyaWN0ID0gaXNNb2R1bGU7XG5cbiAgICBib2R5ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb2dyYW0oYm9keSwgaXNNb2R1bGUgPyBcIm1vZHVsZVwiIDogXCJzY3JpcHRcIikpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkge1xuICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTtcbiAgICAgICAgdG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5yZWdleCkge1xuICAgICAgICAgICAgdG9rZW4ucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogZW50cnkucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogZW50cnkucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgZXh0cmEudG9rZW5zID0gdG9rZW5zO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVG9rZW5pemVyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIHRvU3RyaW5nLFxuICAgICAgICB0b2tlbnM7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IHt9LFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogZGVmYXVsdEZlYXR1cmVzXG4gICAgfTtcblxuICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS5cbiAgICBvcHRpb25zLnRva2VucyA9IHRydWU7XG4gICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgZXh0cmEudG9rZW5pemUgPSB0cnVlO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLlxuICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7XG4gICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAtMTtcblxuICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5sb2M7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy5jb21tZW50KSB7XG4gICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzXG4gICAgaWYgKG9wdGlvbnMuZWNtYUZlYXR1cmVzICYmIHR5cGVvZiBvcHRpb25zLmVjbWFGZWF0dXJlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSBvcHRpb25zLmVjbWFGZWF0dXJlcztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwZWVrKCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTtcbiAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IG5ldyBTdHJpbmdNYXAoKSxcbiAgICAgICAgcGFyZW50aGVzaXNDb3VudDogMCxcbiAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsXG4gICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UsXG4gICAgICAgIGN1cmx5U3RhY2s6IFtdLFxuICAgICAgICBjdXJseUxhc3RJbmRleDogMCxcbiAgICAgICAgaW5KU1hTcHJlYWRBdHRyaWJ1dGU6IGZhbHNlLFxuICAgICAgICBpbkpTWENoaWxkOiBmYWxzZSxcbiAgICAgICAgaW5KU1hUYWc6IGZhbHNlXG4gICAgfTtcblxuICAgIGV4dHJhID0ge1xuICAgICAgICBlY21hRmVhdHVyZXM6IE9iamVjdC5jcmVhdGUoZGVmYXVsdEZlYXR1cmVzKVxuICAgIH07XG5cbiAgICAvLyBmb3IgdGVtcGxhdGUgc3RyaW5nc1xuICAgIHN0YXRlLmN1cmx5U3RhY2sgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMucmFuZ2U7XG4gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcbiAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50O1xuXG4gICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2tlbnMpIHtcbiAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGNvbW1lbnRBdHRhY2htZW50LnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSB7XG4gICAgICAgICAgICAgICAgYXJyb3dGdW5jdGlvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWdleFVGbGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4WUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9jdGFsTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VwZXJJbkZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3RQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9yT2Y6IHRydWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xhc3NlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2R1bGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5ld1RhcmdldDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IHBhcnNpbmcgZmxhZ3MgYWZ0ZXIgc291cmNlVHlwZSB0byBhbGxvdyBvdmVycmlkaW5nXG4gICAgICAgIGlmIChvcHRpb25zLmVjbWFGZWF0dXJlcyAmJiB0eXBlb2Ygb3B0aW9ucy5lY21hRmVhdHVyZXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAgICAgLy8gaWYgaXQncyBhIG1vZHVsZSwgYXVnbWVudCB0aGUgZWNtYUZlYXR1cmVzXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5lY21hRmVhdHVyZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlc1trZXldID0gb3B0aW9ucy5lY21hRmVhdHVyZXNba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzID0gb3B0aW9ucy5lY21hRmVhdHVyZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7XG4gICAgICAgICAgICBwcm9ncmFtLnRva2VucyA9IGV4dHJhLnRva2VucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0cy52ZXJzaW9uID0gcmVxdWlyZShcIi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG5cbmV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuXG4vLyBEZWVwIGNvcHkuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIGZvciAobmFtZSBpbiBhc3ROb2RlVHlwZXMpIHtcbiAgICAgICAgaWYgKGFzdE5vZGVUeXBlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBhc3ROb2RlVHlwZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59KCkpO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgQVNUIG5vZGVzXG4gKiBAYXV0aG9yIEZyZWQgSy4gU2Nob3R0XG4gKiBAY29weXJpZ2h0IDIwMTQgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vYXN0LW5vZGUtdHlwZXNcIik7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFycmF5IEV4cHJlc3Npb24gQVNUTm9kZSBvdXQgb2YgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZWxlbWVudHMgQW4gYXJyYXkgb2YgQVNUTm9kZSBlbGVtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycmF5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBcnJvdyBGdW5jdGlvbiBFeHByZXNzaW9uIEFTVE5vZGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGFycm93IGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogICAgICBBbHdheXMgZmFsc2UgZm9yIGRlY2xhcmF0aW9ucywgYnV0IGtlcHQgaGVyZSB0byBiZSBpbiBzeW5jIHdpdGhcbiAgICAgKiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXNzaWdubWVudCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IHBhdHRlcm4gKGRlZmF1bHQgcGFyYW1ldGVycylcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhc3NpZ25tZW50IHBhdHRlcm5cbiAgICAgKi9cbiAgICBjcmVhdGVBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0gXCJ8fFwiIHx8IG9wZXJhdG9yID09PSBcIiYmXCIpID8gYXN0Tm9kZVR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICAgICAgYXN0Tm9kZVR5cGVzLkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJsb2NrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYmxvY2sgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBibG9jayBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJyZWFrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIGJyZWFrIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgYnJlYWsgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQnJlYWtTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjYWxsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNhbGxlZSBUaGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGFyZ3MgQW4gYXJyYXkgb2YgQVNUTm9kZXMgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNhbGwgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNhdGNoIGNsYXVzZS9ibG9ja1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW0gQW55IGNhdGNoIGNsYXVzZSBleGVwdGlvbi9jb25kaXRpb25hbCBwYXJhbWV0ZXIgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGNhdGNoIGJsb2NrIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjYXRjaCBjbGF1c2VcbiAgICAgKi9cbiAgICBjcmVhdGVDYXRjaENsYXVzZTogZnVuY3Rpb24ocGFyYW0sIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYXRjaENsYXVzZSxcbiAgICAgICAgICAgIHBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2xhc3MgYm9keS5cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSBjbGFzcy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGJvZHkuXG4gICAgICovXG4gICAgY3JlYXRlQ2xhc3NCb2R5OiBmdW5jdGlvbihib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NCb2R5LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NFeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DbGFzc0RlY2xhcmF0aW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24ocHJvcGVydHlUeXBlLCBraW5kLCBrZXksIHZhbHVlLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgICAgICBcInN0YXRpY1wiOiBwcm9wZXJ0eVR5cGUgPT09IFwic3RhdGljXCIsXG4gICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0YVByb3BlcnR5OiBmdW5jdGlvbihtZXRhLCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGFQcm9wZXJ0eSxcbiAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjb25kaXRpb25hbCB0byBldmFsdWF0ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gY29uc2VxdWVudCBUaGUgY29kZSB0byBiZSBydW4gaWYgdGhlIHRlc3QgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhbHRlcm5hdGUgVGhlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSB0ZXN0IHJldHVybnMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db25kaXRpb25hbEV4cHJlc3Npb24sXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCxcbiAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGludWUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gbGFiZWwgVGhlIG9wdGlvbmFsIGNvbnRpbnVlIGxhYmVsIChudWxsIGlmIG5vdCBzZXQpXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBjb250aW51ZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db250aW51ZVN0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGRlYnVnZ2VyIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZGVidWdnZXIgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5IHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRW1wdHlTdGF0ZW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIHdoaWxlIGNvbmRpdGlvbmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSB3aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLldoaWxlU3RhdGVtZW50LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBkby4ud2hpbGUgY29uZGl0aW9uYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGRvLi53aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgdGVzdDogdGVzdFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvciBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXQgVGhlIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNvbmRpdGlvbmFsIHRlc3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdXBkYXRlIFRoZSB1cGRhdGUgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3Igc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbihpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JTdGF0ZW1lbnQsXG4gICAgICAgICAgICBpbml0OiBpbml0LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvci4uaW4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0LXNpZGUgdmFyaWFibGUgZm9yIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQtc2lkZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yLi5pbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JJblN0YXRlbWVudDogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JJblN0YXRlbWVudCxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZWFjaDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdC1zaWRlIHZhcmlhYmxlIGZvciB0aGUgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodC1zaWRlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvck9mU3RhdGVtZW50OiBmdW5jdGlvbihsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZvck9mU3RhdGVtZW50LFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0b3IgVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IsIGZhbHNlIGlmIG5vdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgIEFsd2F5cyBmYWxzZSBmb3IgZGVjbGFyYXRpb25zLCBidXQga2VwdCBoZXJlIHRvIGJlIGluIHN5bmMgd2l0aFxuICAgICAqICAgICAgRnVuY3Rpb25FeHByZXNzaW9uIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogISFnZW5lcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiAhIWV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgZnVuY3Rpb24gbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW1zIFRoZSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdlbmVyYXRvciBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvciwgZmFsc2UgaWYgbm90LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiAhIWdlbmVyYXRvcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICEhZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZGVudGlmaWVyXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBuYW1lIFRoZSBpZGVudGlmaWVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gaWRlbnRpZmllclxuICAgICAqL1xuICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGlmIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvbnNlcXVlbnQgaWYgc3RhdGVtZW50IHRvIHJ1blxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYWx0ZXJuYXRlIHRoZSBcImVsc2VcIiBhbHRlcm5hdGUgc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGlmIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZlN0YXRlbWVudCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LFxuICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgbGFiZWxlZCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGxhYmVsZWQgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5MYWJlbGVkU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSBsaXRlcmFsIGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0b2tlbiBUaGUgQVNUTm9kZSB0b2tlblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgbGl0ZXJhbCBmcm9tXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBuZXcgbGl0ZXJhbFxuICAgICAqL1xuICAgIGNyZWF0ZUxpdGVyYWxGcm9tU291cmNlOiBmdW5jdGlvbih0b2tlbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBub2RlID0ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkxpdGVyYWwsXG4gICAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUsXG4gICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucyBoYXZlIHJlZ2V4IHByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICBub2RlLnJlZ2V4ID0gdG9rZW4ucmVnZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGVtcGxhdGUgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBEYXRhIG9uIHRoZSBlbGVtZW50IHZhbHVlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlLnJhdyBUaGUgcmF3IHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS5jb29rZWQgVGhlIHByb2Nlc3NlZCB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRhaWwgVHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaW5hbCBlbGVtZW50IGluIGEgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24odmFsdWUsIHRhaWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UZW1wbGF0ZUVsZW1lbnQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0YWlsOiB0YWlsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHRlbXBsYXRlIGxpdGVyYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gcXVhc2lzIEFuIGFycmF5IG9mIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgb2YgdGhlIHRlbXBsYXRlIHN0cmluZyBleHByZXNzaW9uc1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgdGVtcGxhdGUgc3RyaW5nXG4gICAgICovXG4gICAgY3JlYXRlVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbihxdWFzaXMsIGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGVtcGxhdGVMaXRlcmFsLFxuICAgICAgICAgICAgcXVhc2lzOiBxdWFzaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzcHJlYWQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFycmF5IGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlU3ByZWFkRWxlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCByZXN0IHByb3BlcnR5XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgaWRlbnRpZmllciBiZWluZyByZXN0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHBlcmltZW50YWxSZXN0UHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCBzcHJlYWQgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBpZGVudGlmaWVyIGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHksXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRhZyBUaGUgdGFnIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHF1YXNpIEEgVGVtcGxhdGVMaXRlcmFsIEFTVE5vZGUgcmVwcmVzZW50aW5nXG4gICAgICogdGhlIHRlbXBsYXRlIHN0cmluZyBpdHNlbGYuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0YWdnZWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBjcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKHRhZywgcXVhc2kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICAgIHF1YXNpOiBxdWFzaVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc29yIFRoZSBtZW1iZXIgYWNjZXNzIG1ldGhvZCAoYnJhY2tldCBvciBwZXJpb2QpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBUaGUgb2JqZWN0LXByb3BlcnR5IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBtZW1iZXIgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gXCJbXCIsXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IG9iamVjdCB0eXBlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmdzIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG5ldyBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBwcm9wZXJ0aWVzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHRoYXQgcmVwcmVzZW50IGFsbCBvYmplY3RcbiAgICAgKiAgICAgIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZWQgdmFsdWVzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIFRoZSBwb3N0Zml4IG9wZXJhdG9yIChcIisrXCIsIFwiLS1cIiwgZXRjLilcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBvcGVyYXRvciBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHBvc3RmaXggZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgcHJvZ3JhbSBib2R5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVR5cGUgRWl0aGVyIFwibW9kdWxlXCIgb3IgXCJzY3JpcHRcIi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW50aXJlIHByb2dyYW1cbiAgICAgKi9cbiAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbihib2R5LCBzb3VyY2VUeXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvZ3JhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBzb3VyY2VUeXBlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSB0eXBlIG9mIHByb3BlcnR5IHJlcHJlc2VudGVkIChcImdldFwiLCBcInNldFwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHZhbHVlIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1ldGhvZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbHNvIGEgbWV0aG9kICh2YWx1ZSBpcyBhIGZ1bmN0aW9uKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvcnRoYW5kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHNob3J0aGFuZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29tcHV0ZWQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaGFzIGJlZW4gY29tcHV0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICovXG4gICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uKGtpbmQsIGtleSwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlByb3BlcnR5LFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBzaG9ydGhhbmQ6IHNob3J0aGFuZCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJlc3QgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJlc3QgYXJndW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXN0RWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSByZXR1cm4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJldHVybiBhcmd1bWVudCwgbnVsbCBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmV0dXJuU3RhdGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgY29udGFpbmluZyBlYWNoIGV4cHJlc3Npb24sIGluIG9yZGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKi9cbiAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIHN1cGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHN1cGVyXG4gICAgICovXG4gICAgY3JlYXRlU3VwZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN1cGVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjYXNlIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCB0aGUgc3dpdGNoIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2VcbiAgICAgKi9cbiAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoQ2FzZSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGlzY3JpbWluYW50IEFuIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0IGVhY2ggY2FzZSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjYXNlcyBBbiBhcnJheSBvZiBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24oZGlzY3JpbWluYW50LCBjYXNlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN3aXRjaFN0YXRlbWVudCxcbiAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LFxuICAgICAgICAgICAgY2FzZXM6IGNhc2VzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaGlzRXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRocm93IHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFyZ3VtZW50IHRvIHRocm93XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGhyb3dTdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBibG9jayBUaGUgdHJ5IGJsb2NrXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBoYW5kbGVyIEEgY2F0Y2ggaGFuZGxlclxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGZpbmFsaXplciBUaGUgZmluYWwgY29kZSBibG9jayB0byBydW4gYWZ0ZXIgdGhlIHRyeS9jYXRjaCBoYXMgcnVuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdHJ5IHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24oYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRyeVN0YXRlbWVudCxcbiAgICAgICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHVuYXJ5IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgdW5hcnkgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiKytcIiB8fCBvcGVyYXRvciA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVW5hcnlFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZGVjbGFyYXRpb25zIEFuIGFycmF5IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSBraW5kIG9mIHZhcmlhYmxlIGNyZWF0ZWQgKFwidmFyXCIsIFwibGV0XCIsIGV0Yy4pXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBraW5kOiBraW5kXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIHZhcmlhYmxlIElEXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSB2YXJpYWJsZSdzIGluaXRpYWwgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICovXG4gICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbihpZCwgaW5pdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGluaXQ6IGluaXRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXRoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb2JqZWN0IFRoZSB3aXRoIHN0YXRlbWVudCBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2l0aCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHdpdGggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24ob2JqZWN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuV2l0aFN0YXRlbWVudCxcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLllpZWxkRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCB8fCBudWxsLFxuICAgICAgICAgICAgZGVsZWdhdGU6IGRlbGVnYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hBdHRyaWJ1dGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYU3ByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWFNwcmVhZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWU6IGZ1bmN0aW9uKG5hbWVzcGFjZSwgbmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hNZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRWxlbWVudDogZnVuY3Rpb24ob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVsZW1lbnQsXG4gICAgICAgICAgICBvcGVuaW5nRWxlbWVudDogb3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBjbG9zaW5nRWxlbWVudDogY2xvc2luZ0VsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRW1wdHlFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEV4cHJlc3Npb25Db250YWluZXIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50OiBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE9wZW5pbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hDbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCwgZXhwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRTcGVjaWZpZXIsXG4gICAgICAgICAgICBleHBvcnRlZDogZXhwb3J0ZWQgfHwgbG9jYWwsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0QWxsRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBpbXBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbCB8fCBpbXBvcnRlZCxcbiAgICAgICAgICAgIGltcG9ydGVkOiBpbXBvcnRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24oc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIEFTVCBub2RlIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIsXG4gICAgQXJyYXlFeHByZXNzaW9uOiBcIkFycmF5RXhwcmVzc2lvblwiLFxuICAgIEFycmF5UGF0dGVybjogXCJBcnJheVBhdHRlcm5cIixcbiAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiLFxuICAgIEJsb2NrU3RhdGVtZW50OiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgQmluYXJ5RXhwcmVzc2lvbjogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgQnJlYWtTdGF0ZW1lbnQ6IFwiQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBDYWxsRXhwcmVzc2lvbjogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgIENhdGNoQ2xhdXNlOiBcIkNhdGNoQ2xhdXNlXCIsXG4gICAgQ2xhc3NCb2R5OiBcIkNsYXNzQm9keVwiLFxuICAgIENsYXNzRGVjbGFyYXRpb246IFwiQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIENsYXNzRXhwcmVzc2lvbjogXCJDbGFzc0V4cHJlc3Npb25cIixcbiAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgQ29udGludWVTdGF0ZW1lbnQ6IFwiQ29udGludWVTdGF0ZW1lbnRcIixcbiAgICBEb1doaWxlU3RhdGVtZW50OiBcIkRvV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBEZWJ1Z2dlclN0YXRlbWVudDogXCJEZWJ1Z2dlclN0YXRlbWVudFwiLFxuICAgIEVtcHR5U3RhdGVtZW50OiBcIkVtcHR5U3RhdGVtZW50XCIsXG4gICAgRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eVwiLFxuICAgIEV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5XCIsXG4gICAgRXhwcmVzc2lvblN0YXRlbWVudDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgRm9yU3RhdGVtZW50OiBcIkZvclN0YXRlbWVudFwiLFxuICAgIEZvckluU3RhdGVtZW50OiBcIkZvckluU3RhdGVtZW50XCIsXG4gICAgRm9yT2ZTdGF0ZW1lbnQ6IFwiRm9yT2ZTdGF0ZW1lbnRcIixcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBGdW5jdGlvbkV4cHJlc3Npb246IFwiRnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgSWRlbnRpZmllcjogXCJJZGVudGlmaWVyXCIsXG4gICAgSWZTdGF0ZW1lbnQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBMaXRlcmFsOiBcIkxpdGVyYWxcIixcbiAgICBMYWJlbGVkU3RhdGVtZW50OiBcIkxhYmVsZWRTdGF0ZW1lbnRcIixcbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogXCJMb2dpY2FsRXhwcmVzc2lvblwiLFxuICAgIE1lbWJlckV4cHJlc3Npb246IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIE1ldGFQcm9wZXJ0eTogXCJNZXRhUHJvcGVydHlcIixcbiAgICBNZXRob2REZWZpbml0aW9uOiBcIk1ldGhvZERlZmluaXRpb25cIixcbiAgICBOZXdFeHByZXNzaW9uOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBPYmplY3RFeHByZXNzaW9uOiBcIk9iamVjdEV4cHJlc3Npb25cIixcbiAgICBPYmplY3RQYXR0ZXJuOiBcIk9iamVjdFBhdHRlcm5cIixcbiAgICBQcm9ncmFtOiBcIlByb2dyYW1cIixcbiAgICBQcm9wZXJ0eTogXCJQcm9wZXJ0eVwiLFxuICAgIFJlc3RFbGVtZW50OiBcIlJlc3RFbGVtZW50XCIsXG4gICAgUmV0dXJuU3RhdGVtZW50OiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogXCJTZXF1ZW5jZUV4cHJlc3Npb25cIixcbiAgICBTcHJlYWRFbGVtZW50OiBcIlNwcmVhZEVsZW1lbnRcIixcbiAgICBTdXBlcjogXCJTdXBlclwiLFxuICAgIFN3aXRjaENhc2U6IFwiU3dpdGNoQ2FzZVwiLFxuICAgIFN3aXRjaFN0YXRlbWVudDogXCJTd2l0Y2hTdGF0ZW1lbnRcIixcbiAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IFwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uXCIsXG4gICAgVGVtcGxhdGVFbGVtZW50OiBcIlRlbXBsYXRlRWxlbWVudFwiLFxuICAgIFRlbXBsYXRlTGl0ZXJhbDogXCJUZW1wbGF0ZUxpdGVyYWxcIixcbiAgICBUaGlzRXhwcmVzc2lvbjogXCJUaGlzRXhwcmVzc2lvblwiLFxuICAgIFRocm93U3RhdGVtZW50OiBcIlRocm93U3RhdGVtZW50XCIsXG4gICAgVHJ5U3RhdGVtZW50OiBcIlRyeVN0YXRlbWVudFwiLFxuICAgIFVuYXJ5RXhwcmVzc2lvbjogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICBVcGRhdGVFeHByZXNzaW9uOiBcIlVwZGF0ZUV4cHJlc3Npb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsXG4gICAgV2hpbGVTdGF0ZW1lbnQ6IFwiV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBXaXRoU3RhdGVtZW50OiBcIldpdGhTdGF0ZW1lbnRcIixcbiAgICBZaWVsZEV4cHJlc3Npb246IFwiWWllbGRFeHByZXNzaW9uXCIsXG4gICAgSlNYSWRlbnRpZmllcjogXCJKU1hJZGVudGlmaWVyXCIsXG4gICAgSlNYTmFtZXNwYWNlZE5hbWU6IFwiSlNYTmFtZXNwYWNlZE5hbWVcIixcbiAgICBKU1hNZW1iZXJFeHByZXNzaW9uOiBcIkpTWE1lbWJlckV4cHJlc3Npb25cIixcbiAgICBKU1hFbXB0eUV4cHJlc3Npb246IFwiSlNYRW1wdHlFeHByZXNzaW9uXCIsXG4gICAgSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogXCJKU1hFeHByZXNzaW9uQ29udGFpbmVyXCIsXG4gICAgSlNYRWxlbWVudDogXCJKU1hFbGVtZW50XCIsXG4gICAgSlNYQ2xvc2luZ0VsZW1lbnQ6IFwiSlNYQ2xvc2luZ0VsZW1lbnRcIixcbiAgICBKU1hPcGVuaW5nRWxlbWVudDogXCJKU1hPcGVuaW5nRWxlbWVudFwiLFxuICAgIEpTWEF0dHJpYnV0ZTogXCJKU1hBdHRyaWJ1dGVcIixcbiAgICBKU1hTcHJlYWRBdHRyaWJ1dGU6IFwiSlNYU3ByZWFkQXR0cmlidXRlXCIsXG4gICAgSlNYVGV4dDogXCJKU1hUZXh0XCIsXG4gICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIsXG4gICAgRXhwb3J0U3BlY2lmaWVyOiBcIkV4cG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlY2xhcmF0aW9uOiBcIkltcG9ydERlY2xhcmF0aW9uXCIsXG4gICAgSW1wb3J0U3BlY2lmaWVyOiBcIkltcG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiLFxuICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogXCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXJcIlxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBBdHRhY2hlcyBjb21tZW50cyB0byB0aGUgQVNULlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE1IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2FzdC1ub2RlLXR5cGVzXCIpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpdmF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGV4dHJhID0ge1xuICAgICAgICB0cmFpbGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgYm90dG9tUmlnaHRTdGFjazogW11cbiAgICB9O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdO1xuICAgIH0sXG5cbiAgICBhZGRDb21tZW50OiBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgfSxcblxuICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBsYXN0Q2hpbGQsXG4gICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLFxuICAgICAgICAgICAgaTtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuUHJvZ3JhbSkge1xuICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogSWYgdGhlIGZpcnN0IGNvbW1lbnQgaW4gdHJhaWxpbmdDb21tZW50cyBjb21lcyBhZnRlciB0aGVcbiAgICAgICAgICAgICAqIGN1cnJlbnQgbm9kZSwgdGhlbiB3ZSdyZSBnb29kIC0gYWxsIGNvbW1lbnRzIGluIHRoZSBhcnJheSB3aWxsXG4gICAgICAgICAgICAgKiBjb21lIGFmdGVyIHRoZSBub2RlIGFuZCBzbyBpdCdzIHNhZmUgdG8gYWRkIHRoZW4gYXMgb2ZmaWNpYWxcbiAgICAgICAgICAgICAqIHRyYWlsaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBPdGhlcndpc2UsIGlmIHRoZSBmaXJzdCBjb21tZW50IGRvZXNuJ3QgY29tZSBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgKiBjdXJyZW50IG5vZGUsIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIG1peCBvZiBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgICAgICAgICAgICAgICAqIGNvbW1lbnRzIGluIHRoZSBhcnJheSBhbmQgdGhhdCBsZWFkaW5nQ29tbWVudHMgY29udGFpbnMgdGhlXG4gICAgICAgICAgICAgICAgICogc2FtZSBpdGVtcyBhcyB0cmFpbGluZ0NvbW1lbnRzLiBSZXNldCB0cmFpbGluZ0NvbW1lbnRzIHRvXG4gICAgICAgICAgICAgICAgICogemVybyBpdGVtcyBhbmQgd2UnbGwgaGFuZGxlIHRoaXMgYnkgZXZhbHVhdGluZyBsZWFkaW5nQ29tbWVudHNcbiAgICAgICAgICAgICAgICAgKiBsYXRlci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay5cbiAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBsZWFkaW5nIGNvbW1lbnQgZm9yIGFuIGFub255bW91cyBjbGFzcyBoYWQgYmVlbiBzdG9sZW4gYnkgaXRzIGZpcnN0IE1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoaXMgdGFrZXMgYmFjayB0aGUgbGVhZGluZyBjb21tZW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgQWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUvaXNzdWVzLzE1OFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tpXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlL2lzc3Vlcy8yXG5cbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIEluIHNwZWNpYWwgY2FzZXMsIHN1Y2ggYXMgcmV0dXJuICh3aXRob3V0IGEgdmFsdWUpIGFuZFxuICAgICAgICAgICAgICAgICAqIGRlYnVnZ2VyLCBhbGwgY29tbWVudHMgd2lsbCBlbmQgdXAgYXMgbGVhZGluZ0NvbW1lbnRzIGFuZFxuICAgICAgICAgICAgICAgICAqIHdpbGwgb3RoZXJ3aXNlIGJlIGVsaW1pbmF0ZWQuIFRoaXMgZXh0cmEgc3RlcCBydW5zIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICogYm90dG9tUmlnaHRTdGFjayBpcyBlbXB0eSBhbmQgdGhlcmUgYXJlIGNvbW1lbnRzIGxlZnRcbiAgICAgICAgICAgICAgICAgKiBpbiBsZWFkaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUaGlzIGxvb3AgZmlndXJlcyBvdXQgdGhlIHN0b3BwaW5nIHBvaW50IGJldHdlZW4gdGhlIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGJ5IGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIGZpcnN0IGNvbW1lbnQgdGhhdCBjb21lcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHNbaV0ucmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU3BsaXQgdGhlIGFycmF5IGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgY29tbWVudFxuICAgICAgICAgICAgICAgICAqIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIG5vZGUuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgY291bGRcbiAgICAgICAgICAgICAgICAgKiByZXN1bHQgaW4gYW4gZW1wdHkgYXJyYXksIGFuZCBpZiBzbywgdGhlIGFycmF5IG11c3QgYmVcbiAgICAgICAgICAgICAgICAgKiBkZWxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU2ltaWxhcmx5LCB0cmFpbGluZyBjb21tZW50cyBhcmUgYXR0YWNoZWQgbGF0ZXIuIFRoZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAqIG11c3QgYmUgcmVzZXQgdG8gbnVsbCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29tbWVudHMuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7XG4gICAgfVxuXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIGZlYXR1cmUgZmxhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBwYXJzZXIgYW5kIHRoZWlyIGRlZmF1bHRcbiAqICAgICAgc2V0dGluZ3MuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTUgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBhcnJvdyBmdW5jdGlvbnNcbiAgICBhcnJvd0Z1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBsZXQgYW5kIGNvbnN0XG4gICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlc3RydWN0dXJlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBkZXN0cnVjdHVyaW5nOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHJlZ2V4IHUgZmxhZ1xuICAgIHJlZ2V4VUZsYWc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggeSBmbGFnXG4gICAgcmVnZXhZRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgdGVtcGxhdGVTdHJpbmdzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGJpbmFyeSBsaXRlcmFsc1xuICAgIGJpbmFyeUxpdGVyYWxzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIEVTNiBvY3RhbCBsaXRlcmFsc1xuICAgIG9jdGFsTGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXNcbiAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlZmF1bHQgcGFyYW1ldGVyc1xuICAgIGRlZmF1bHRQYXJhbXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVzdCBwYXJhbWV0ZXJzXG4gICAgcmVzdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBmb3Itb2Ygc3RhdGVtZW50c1xuICAgIGZvck9mOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGNvbXB1dGVkIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHNob3J0aGFuZCBvYmplY3QgbGl0ZXJhbCBtZXRob2RzXG4gICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogZmFsc2UsXG5cbiAgICAvLyBBbGxvdyBkdXBsaWNhdGUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyAoZXhjZXB0ICdfX3Byb3RvX18nKVxuICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGdlbmVyYXRvcnMveWllbGRcbiAgICBnZW5lcmF0b3JzOiBmYWxzZSxcblxuICAgIC8vIHN1cHBvcnQgdGhlIHNwcmVhZCBvcGVyYXRvclxuICAgIHNwcmVhZDogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgc3VwZXIgaW4gZnVuY3Rpb25zXG4gICAgc3VwZXJJbkZ1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBjbGFzc2VzXG4gICAgY2xhc3NlczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBuZXcudGFyZ2V0XG4gICAgbmV3VGFyZ2V0OiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIG1vZHVsZXNcbiAgICBtb2R1bGVzOiBmYWxzZSxcblxuICAgIC8vIFJlYWN0IEpTWCBwYXJzaW5nXG4gICAganN4OiBmYWxzZSxcblxuICAgIC8vIGFsbG93IHJldHVybiBzdGF0ZW1lbnQgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsUmV0dXJuOiBmYWxzZSxcblxuICAgIC8vIGFsbG93IGV4cGVyaW1lbnRhbCBvYmplY3QgcmVzdC9zcHJlYWRcbiAgICBleHBlcmltZW50YWxPYmplY3RSZXN0U3ByZWFkOiBmYWxzZVxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgcGFyc2VyLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOCB3aGVyZSBwb3NzaWJsZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVW5leHBlY3RlZFRva2VuOiBcIlVuZXhwZWN0ZWQgdG9rZW4gJTBcIixcbiAgICBVbmV4cGVjdGVkTnVtYmVyOiBcIlVuZXhwZWN0ZWQgbnVtYmVyXCIsXG4gICAgVW5leHBlY3RlZFN0cmluZzogXCJVbmV4cGVjdGVkIHN0cmluZ1wiLFxuICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiBcIlVuZXhwZWN0ZWQgaWRlbnRpZmllclwiLFxuICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogXCJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmRcIixcbiAgICBVbmV4cGVjdGVkVGVtcGxhdGU6IFwiVW5leHBlY3RlZCBxdWFzaSAlMFwiLFxuICAgIFVuZXhwZWN0ZWRFT1M6IFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIixcbiAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIixcbiAgICBJbnZhbGlkUmVnRXhwOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uXCIsXG4gICAgSW52YWxpZFJlZ0V4cEZsYWc6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiLFxuICAgIFVudGVybWluYXRlZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvXCIsXG4gICAgSW52YWxpZExIU0luQXNzaWdubWVudDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnRcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlzdFwiLFxuICAgIEludmFsaWRMSFNJbkZvckluOiBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluXCIsXG4gICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiBcIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudFwiLFxuICAgIE5vQ2F0Y2hPckZpbmFsbHk6IFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeVwiLFxuICAgIE5vVW5pbnRpYWxpemVkQ29uc3Q6IFwiQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZFwiLFxuICAgIFVua25vd25MYWJlbDogXCJVbmRlZmluZWQgbGFiZWwgJyUwJ1wiLFxuICAgIFJlZGVjbGFyYXRpb246IFwiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIsXG4gICAgSWxsZWdhbENvbnRpbnVlOiBcIklsbGVnYWwgY29udGludWUgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbEJyZWFrOiBcIklsbGVnYWwgYnJlYWsgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFJldHVybjogXCJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnRcIixcbiAgICBJbGxlZ2FsWWllbGQ6IFwiSWxsZWdhbCB5aWVsZCBleHByZXNzaW9uXCIsXG4gICAgSWxsZWdhbFNwcmVhZDogXCJJbGxlZ2FsIHNwcmVhZCBlbGVtZW50XCIsXG4gICAgU3RyaWN0TW9kZVdpdGg6IFwiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudFwiLFxuICAgIFN0cmljdENhdGNoVmFyaWFibGU6IFwiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFZhck5hbWU6IFwiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1OYW1lOiBcIlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1EdXBlOiBcIlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXCIsXG4gICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuXCIsXG4gICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyXCIsXG4gICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IFwiUmVzdCBwYXJhbWV0ZXIgY2FuIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiLFxuICAgIEVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0XCIsXG4gICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogXCJJbnZhbGlkIHJlc3QgcGFyYW1ldGVyXCIsXG4gICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiBcIkludmFsaWQgc3ByZWFkIGFyZ3VtZW50XCIsXG4gICAgU3RyaWN0RnVuY3Rpb25OYW1lOiBcIkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogXCJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuXCIsXG4gICAgU3RyaWN0RGVsZXRlOiBcIkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgRHVwbGljYXRlUHJvdG90eXBlUHJvcGVydHk6IFwiRHVwbGljYXRlICdfX3Byb3RvX18nIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIGFyZSBub3QgYWxsb3dlZFwiLFxuICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogXCJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yXCIsXG4gICAgRHVwbGljYXRlQ29uc3RydWN0b3I6IFwiQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvclwiLFxuICAgIFN0YXRpY1Byb3RvdHlwZTogXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIsXG4gICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6IFwiT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZVwiLFxuICAgIEFjY2Vzc29yR2V0U2V0OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiBcIkFzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQb3N0Zml4OiBcIlBvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdExIU1ByZWZpeDogXCJQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFJlc2VydmVkV29yZDogXCJVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBJbnZhbGlkSlNYQXR0cmlidXRlVmFsdWU6IFwiSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dFwiLFxuICAgIEV4cGVjdGVkSlNYQ2xvc2luZ1RhZzogXCJFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTBcIixcbiAgICBBZGphY2VudEpTWEVsZW1lbnRzOiBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiLFxuICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiBcIk1pc3NpbmcgZnJvbSBjbGF1c2VcIixcbiAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IFwiTWlzc2luZyBhcyBhZnRlciBpbXBvcnQgKlwiLFxuICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6IFwiSW52YWxpZCBtb2R1bGUgc3BlY2lmaWVyXCIsXG4gICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uXCIsXG4gICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBzaW1wbGUgbWFwIHRoYXQgaGVscHMgYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZS5cbiAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uXG4gKiBAY29weXJpZ2h0IDIwMTUgSmFtdW5kIEZlcmd1c29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gU3RyaW5nTWFwKCkge1xuICAgIHRoaXMuJGRhdGEgPSB7fTtcbn1cblxuU3RyaW5nTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdNYXA7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVmFyaW91cyBzeW50YXgvcGF0dGVybiBjaGVja3MgZm9yIHBhcnNpbmcuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanMuXG52YXIgUmVnZXggPSB7XG4gICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIExlYWRpbmdaZXJvczogbmV3IFJlZ0V4cChcIl4wKyg/ISQpXCIpXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIFJlZ2V4OiBSZWdleCxcblxuICAgIGlzRGVjaW1hbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfSxcblxuICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3ODlhYmNkZWZBQkNERUZcIi5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH0sXG5cbiAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9LFxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9LFxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTtcbiAgICB9LFxuXG4gICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBpc0Z1dHVyZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkOiBmdW5jdGlvbihpZCwgZWNtYUZlYXR1cmVzKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBsZW1lbnRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJmYWNlXCI6XG4gICAgICAgICAgICBjYXNlIFwicGFja2FnZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByaXZhdGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcm90ZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwdWJsaWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdGF0aWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ5aWVsZFwiOlxuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSBcImF3YWl0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNSZXN0cmljdGVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSBcImV2YWxcIiB8fCBpZCA9PT0gXCJhcmd1bWVudHNcIjtcbiAgICB9LFxuXG4gICAgLy8gNy42LjEuMSBLZXl3b3Jkc1xuXG4gICAgaXNLZXl3b3JkOiBmdW5jdGlvbihpZCwgc3RyaWN0LCBlY21hRmVhdHVyZXMpIHtcblxuICAgICAgICBpZiAoc3RyaWN0ICYmIHRoaXMuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLCBlY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiY29uc3RcIiBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LlxuICAgICAgICAvLyBcInlpZWxkXCIgYW5kIFwibGV0XCIgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuXG4gICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy5cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaWZcIikgfHwgKGlkID09PSBcImluXCIpIHx8IChpZCA9PT0gXCJkb1wiKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInZhclwiKSB8fCAoaWQgPT09IFwiZm9yXCIpIHx8IChpZCA9PT0gXCJuZXdcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRyeVwiKSB8fCAoaWQgPT09IFwibGV0XCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidGhpc1wiKSB8fCAoaWQgPT09IFwiZWxzZVwiKSB8fCAoaWQgPT09IFwiY2FzZVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidm9pZFwiKSB8fCAoaWQgPT09IFwid2l0aFwiKSB8fCAoaWQgPT09IFwiZW51bVwiKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcIndoaWxlXCIpIHx8IChpZCA9PT0gXCJicmVha1wiKSB8fCAoaWQgPT09IFwiY2F0Y2hcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRocm93XCIpIHx8IChpZCA9PT0gXCJjb25zdFwiKSB8fCAoIWVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzICYmIGlkID09PSBcInlpZWxkXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJjbGFzc1wiKSB8fCAoaWQgPT09IFwic3VwZXJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJyZXR1cm5cIikgfHwgKGlkID09PSBcInR5cGVvZlwiKSB8fCAoaWQgPT09IFwiZGVsZXRlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJzd2l0Y2hcIikgfHwgKGlkID09PSBcImV4cG9ydFwiKSB8fCAoaWQgPT09IFwiaW1wb3J0XCIpO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZGVmYXVsdFwiKSB8fCAoaWQgPT09IFwiZmluYWxseVwiKSB8fCAoaWQgPT09IFwiZXh0ZW5kc1wiKTtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcImZ1bmN0aW9uXCIpIHx8IChpZCA9PT0gXCJjb250aW51ZVwiKSB8fCAoaWQgPT09IFwiZGVidWdnZXJcIik7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaW5zdGFuY2VvZlwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzSlNYSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpXG4gICAgICAgIHJldHVybiAoY2ggIT09IDkyKSAmJiB0aGlzLmlzSWRlbnRpZmllclN0YXJ0KGNoKTtcbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgLy8gZXhjbHVkZSBiYWNrc2xhc2ggKFxcKSBhbmQgYWRkIGh5cGhlbiAoLSlcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIChjaCA9PT0gNDUgfHwgdGhpcy5pc0lkZW50aWZpZXJQYXJ0KGNoKSk7XG4gICAgfVxuXG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ29udGFpbnMgdG9rZW4gaW5mb3JtYXRpb24uXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgVG9rZW4gPSB7XG4gICAgQm9vbGVhbkxpdGVyYWw6IDEsXG4gICAgRU9GOiAyLFxuICAgIElkZW50aWZpZXI6IDMsXG4gICAgS2V5d29yZDogNCxcbiAgICBOdWxsTGl0ZXJhbDogNSxcbiAgICBOdW1lcmljTGl0ZXJhbDogNixcbiAgICBQdW5jdHVhdG9yOiA3LFxuICAgIFN0cmluZ0xpdGVyYWw6IDgsXG4gICAgUmVndWxhckV4cHJlc3Npb246IDksXG4gICAgVGVtcGxhdGU6IDEwLFxuICAgIEpTWElkZW50aWZpZXI6IDExLFxuICAgIEpTWFRleHQ6IDEyXG59O1xuXG52YXIgVG9rZW5OYW1lID0ge307XG5Ub2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gXCJCb29sZWFuXCI7XG5Ub2tlbk5hbWVbVG9rZW4uRU9GXSA9IFwiPGVuZD5cIjtcblRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9IFwiSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gXCJLZXl3b3JkXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gXCJOdWxsXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gXCJOdW1lcmljXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSBcIlB1bmN0dWF0b3JcIjtcblRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9IFwiU3RyaW5nXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gXCJSZWd1bGFyRXhwcmVzc2lvblwiO1xuVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9IFwiVGVtcGxhdGVcIjtcblRva2VuTmFtZVtUb2tlbi5KU1hJZGVudGlmaWVyXSA9IFwiSlNYSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWFRleHRdID0gXCJKU1hUZXh0XCI7XG5cbi8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi5cbnZhciBGbkV4cHJUb2tlbnMgPSBbXCIoXCIsIFwie1wiLCBcIltcIiwgXCJpblwiLCBcInR5cGVvZlwiLCBcImluc3RhbmNlb2ZcIiwgXCJuZXdcIixcbiAgICAgICAgICAgICAgICBcInJldHVyblwiLCBcImNhc2VcIiwgXCJkZWxldGVcIiwgXCJ0aHJvd1wiLCBcInZvaWRcIixcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgXCImPVwiLCBcInw9XCIsIFwiXj1cIiwgXCIsXCIsXG4gICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiK1wiLCBcIi1cIiwgXCIqXCIsIFwiL1wiLCBcIiVcIiwgXCIrK1wiLCBcIi0tXCIsIFwiPDxcIiwgXCI+PlwiLCBcIj4+PlwiLCBcIiZcIixcbiAgICAgICAgICAgICAgICBcInxcIiwgXCJeXCIsIFwiIVwiLCBcIn5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsXG4gICAgICAgICAgICAgICAgXCI8PVwiLCBcIjxcIiwgXCI+XCIsIFwiIT1cIiwgXCIhPT1cIl07XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVG9rZW46IFRva2VuLFxuICAgIFRva2VuTmFtZTogVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VuczogRm5FeHByVG9rZW5zXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIFhIVE1MIGVudGl0aWVzIHRoYXQgYXJlIHZhbGlkIGluIEpTWC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBxdW90OiBcIlxcdTAwMjJcIixcbiAgICBhbXA6IFwiJlwiLFxuICAgIGFwb3M6IFwiXFx1MDAyN1wiLFxuICAgIGx0OiBcIjxcIixcbiAgICBndDogXCI+XCIsXG4gICAgbmJzcDogXCJcXHUwMEEwXCIsXG4gICAgaWV4Y2w6IFwiXFx1MDBBMVwiLFxuICAgIGNlbnQ6IFwiXFx1MDBBMlwiLFxuICAgIHBvdW5kOiBcIlxcdTAwQTNcIixcbiAgICBjdXJyZW46IFwiXFx1MDBBNFwiLFxuICAgIHllbjogXCJcXHUwMEE1XCIsXG4gICAgYnJ2YmFyOiBcIlxcdTAwQTZcIixcbiAgICBzZWN0OiBcIlxcdTAwQTdcIixcbiAgICB1bWw6IFwiXFx1MDBBOFwiLFxuICAgIGNvcHk6IFwiXFx1MDBBOVwiLFxuICAgIG9yZGY6IFwiXFx1MDBBQVwiLFxuICAgIGxhcXVvOiBcIlxcdTAwQUJcIixcbiAgICBub3Q6IFwiXFx1MDBBQ1wiLFxuICAgIHNoeTogXCJcXHUwMEFEXCIsXG4gICAgcmVnOiBcIlxcdTAwQUVcIixcbiAgICBtYWNyOiBcIlxcdTAwQUZcIixcbiAgICBkZWc6IFwiXFx1MDBCMFwiLFxuICAgIHBsdXNtbjogXCJcXHUwMEIxXCIsXG4gICAgc3VwMjogXCJcXHUwMEIyXCIsXG4gICAgc3VwMzogXCJcXHUwMEIzXCIsXG4gICAgYWN1dGU6IFwiXFx1MDBCNFwiLFxuICAgIG1pY3JvOiBcIlxcdTAwQjVcIixcbiAgICBwYXJhOiBcIlxcdTAwQjZcIixcbiAgICBtaWRkb3Q6IFwiXFx1MDBCN1wiLFxuICAgIGNlZGlsOiBcIlxcdTAwQjhcIixcbiAgICBzdXAxOiBcIlxcdTAwQjlcIixcbiAgICBvcmRtOiBcIlxcdTAwQkFcIixcbiAgICByYXF1bzogXCJcXHUwMEJCXCIsXG4gICAgZnJhYzE0OiBcIlxcdTAwQkNcIixcbiAgICBmcmFjMTI6IFwiXFx1MDBCRFwiLFxuICAgIGZyYWMzNDogXCJcXHUwMEJFXCIsXG4gICAgaXF1ZXN0OiBcIlxcdTAwQkZcIixcbiAgICBBZ3JhdmU6IFwiXFx1MDBDMFwiLFxuICAgIEFhY3V0ZTogXCJcXHUwMEMxXCIsXG4gICAgQWNpcmM6IFwiXFx1MDBDMlwiLFxuICAgIEF0aWxkZTogXCJcXHUwMEMzXCIsXG4gICAgQXVtbDogXCJcXHUwMEM0XCIsXG4gICAgQXJpbmc6IFwiXFx1MDBDNVwiLFxuICAgIEFFbGlnOiBcIlxcdTAwQzZcIixcbiAgICBDY2VkaWw6IFwiXFx1MDBDN1wiLFxuICAgIEVncmF2ZTogXCJcXHUwMEM4XCIsXG4gICAgRWFjdXRlOiBcIlxcdTAwQzlcIixcbiAgICBFY2lyYzogXCJcXHUwMENBXCIsXG4gICAgRXVtbDogXCJcXHUwMENCXCIsXG4gICAgSWdyYXZlOiBcIlxcdTAwQ0NcIixcbiAgICBJYWN1dGU6IFwiXFx1MDBDRFwiLFxuICAgIEljaXJjOiBcIlxcdTAwQ0VcIixcbiAgICBJdW1sOiBcIlxcdTAwQ0ZcIixcbiAgICBFVEg6IFwiXFx1MDBEMFwiLFxuICAgIE50aWxkZTogXCJcXHUwMEQxXCIsXG4gICAgT2dyYXZlOiBcIlxcdTAwRDJcIixcbiAgICBPYWN1dGU6IFwiXFx1MDBEM1wiLFxuICAgIE9jaXJjOiBcIlxcdTAwRDRcIixcbiAgICBPdGlsZGU6IFwiXFx1MDBENVwiLFxuICAgIE91bWw6IFwiXFx1MDBENlwiLFxuICAgIHRpbWVzOiBcIlxcdTAwRDdcIixcbiAgICBPc2xhc2g6IFwiXFx1MDBEOFwiLFxuICAgIFVncmF2ZTogXCJcXHUwMEQ5XCIsXG4gICAgVWFjdXRlOiBcIlxcdTAwREFcIixcbiAgICBVY2lyYzogXCJcXHUwMERCXCIsXG4gICAgVXVtbDogXCJcXHUwMERDXCIsXG4gICAgWWFjdXRlOiBcIlxcdTAwRERcIixcbiAgICBUSE9STjogXCJcXHUwMERFXCIsXG4gICAgc3psaWc6IFwiXFx1MDBERlwiLFxuICAgIGFncmF2ZTogXCJcXHUwMEUwXCIsXG4gICAgYWFjdXRlOiBcIlxcdTAwRTFcIixcbiAgICBhY2lyYzogXCJcXHUwMEUyXCIsXG4gICAgYXRpbGRlOiBcIlxcdTAwRTNcIixcbiAgICBhdW1sOiBcIlxcdTAwRTRcIixcbiAgICBhcmluZzogXCJcXHUwMEU1XCIsXG4gICAgYWVsaWc6IFwiXFx1MDBFNlwiLFxuICAgIGNjZWRpbDogXCJcXHUwMEU3XCIsXG4gICAgZWdyYXZlOiBcIlxcdTAwRThcIixcbiAgICBlYWN1dGU6IFwiXFx1MDBFOVwiLFxuICAgIGVjaXJjOiBcIlxcdTAwRUFcIixcbiAgICBldW1sOiBcIlxcdTAwRUJcIixcbiAgICBpZ3JhdmU6IFwiXFx1MDBFQ1wiLFxuICAgIGlhY3V0ZTogXCJcXHUwMEVEXCIsXG4gICAgaWNpcmM6IFwiXFx1MDBFRVwiLFxuICAgIGl1bWw6IFwiXFx1MDBFRlwiLFxuICAgIGV0aDogXCJcXHUwMEYwXCIsXG4gICAgbnRpbGRlOiBcIlxcdTAwRjFcIixcbiAgICBvZ3JhdmU6IFwiXFx1MDBGMlwiLFxuICAgIG9hY3V0ZTogXCJcXHUwMEYzXCIsXG4gICAgb2NpcmM6IFwiXFx1MDBGNFwiLFxuICAgIG90aWxkZTogXCJcXHUwMEY1XCIsXG4gICAgb3VtbDogXCJcXHUwMEY2XCIsXG4gICAgZGl2aWRlOiBcIlxcdTAwRjdcIixcbiAgICBvc2xhc2g6IFwiXFx1MDBGOFwiLFxuICAgIHVncmF2ZTogXCJcXHUwMEY5XCIsXG4gICAgdWFjdXRlOiBcIlxcdTAwRkFcIixcbiAgICB1Y2lyYzogXCJcXHUwMEZCXCIsXG4gICAgdXVtbDogXCJcXHUwMEZDXCIsXG4gICAgeWFjdXRlOiBcIlxcdTAwRkRcIixcbiAgICB0aG9ybjogXCJcXHUwMEZFXCIsXG4gICAgeXVtbDogXCJcXHUwMEZGXCIsXG4gICAgT0VsaWc6IFwiXFx1MDE1MlwiLFxuICAgIG9lbGlnOiBcIlxcdTAxNTNcIixcbiAgICBTY2Fyb246IFwiXFx1MDE2MFwiLFxuICAgIHNjYXJvbjogXCJcXHUwMTYxXCIsXG4gICAgWXVtbDogXCJcXHUwMTc4XCIsXG4gICAgZm5vZjogXCJcXHUwMTkyXCIsXG4gICAgY2lyYzogXCJcXHUwMkM2XCIsXG4gICAgdGlsZGU6IFwiXFx1MDJEQ1wiLFxuICAgIEFscGhhOiBcIlxcdTAzOTFcIixcbiAgICBCZXRhOiBcIlxcdTAzOTJcIixcbiAgICBHYW1tYTogXCJcXHUwMzkzXCIsXG4gICAgRGVsdGE6IFwiXFx1MDM5NFwiLFxuICAgIEVwc2lsb246IFwiXFx1MDM5NVwiLFxuICAgIFpldGE6IFwiXFx1MDM5NlwiLFxuICAgIEV0YTogXCJcXHUwMzk3XCIsXG4gICAgVGhldGE6IFwiXFx1MDM5OFwiLFxuICAgIElvdGE6IFwiXFx1MDM5OVwiLFxuICAgIEthcHBhOiBcIlxcdTAzOUFcIixcbiAgICBMYW1iZGE6IFwiXFx1MDM5QlwiLFxuICAgIE11OiBcIlxcdTAzOUNcIixcbiAgICBOdTogXCJcXHUwMzlEXCIsXG4gICAgWGk6IFwiXFx1MDM5RVwiLFxuICAgIE9taWNyb246IFwiXFx1MDM5RlwiLFxuICAgIFBpOiBcIlxcdTAzQTBcIixcbiAgICBSaG86IFwiXFx1MDNBMVwiLFxuICAgIFNpZ21hOiBcIlxcdTAzQTNcIixcbiAgICBUYXU6IFwiXFx1MDNBNFwiLFxuICAgIFVwc2lsb246IFwiXFx1MDNBNVwiLFxuICAgIFBoaTogXCJcXHUwM0E2XCIsXG4gICAgQ2hpOiBcIlxcdTAzQTdcIixcbiAgICBQc2k6IFwiXFx1MDNBOFwiLFxuICAgIE9tZWdhOiBcIlxcdTAzQTlcIixcbiAgICBhbHBoYTogXCJcXHUwM0IxXCIsXG4gICAgYmV0YTogXCJcXHUwM0IyXCIsXG4gICAgZ2FtbWE6IFwiXFx1MDNCM1wiLFxuICAgIGRlbHRhOiBcIlxcdTAzQjRcIixcbiAgICBlcHNpbG9uOiBcIlxcdTAzQjVcIixcbiAgICB6ZXRhOiBcIlxcdTAzQjZcIixcbiAgICBldGE6IFwiXFx1MDNCN1wiLFxuICAgIHRoZXRhOiBcIlxcdTAzQjhcIixcbiAgICBpb3RhOiBcIlxcdTAzQjlcIixcbiAgICBrYXBwYTogXCJcXHUwM0JBXCIsXG4gICAgbGFtYmRhOiBcIlxcdTAzQkJcIixcbiAgICBtdTogXCJcXHUwM0JDXCIsXG4gICAgbnU6IFwiXFx1MDNCRFwiLFxuICAgIHhpOiBcIlxcdTAzQkVcIixcbiAgICBvbWljcm9uOiBcIlxcdTAzQkZcIixcbiAgICBwaTogXCJcXHUwM0MwXCIsXG4gICAgcmhvOiBcIlxcdTAzQzFcIixcbiAgICBzaWdtYWY6IFwiXFx1MDNDMlwiLFxuICAgIHNpZ21hOiBcIlxcdTAzQzNcIixcbiAgICB0YXU6IFwiXFx1MDNDNFwiLFxuICAgIHVwc2lsb246IFwiXFx1MDNDNVwiLFxuICAgIHBoaTogXCJcXHUwM0M2XCIsXG4gICAgY2hpOiBcIlxcdTAzQzdcIixcbiAgICBwc2k6IFwiXFx1MDNDOFwiLFxuICAgIG9tZWdhOiBcIlxcdTAzQzlcIixcbiAgICB0aGV0YXN5bTogXCJcXHUwM0QxXCIsXG4gICAgdXBzaWg6IFwiXFx1MDNEMlwiLFxuICAgIHBpdjogXCJcXHUwM0Q2XCIsXG4gICAgZW5zcDogXCJcXHUyMDAyXCIsXG4gICAgZW1zcDogXCJcXHUyMDAzXCIsXG4gICAgdGhpbnNwOiBcIlxcdTIwMDlcIixcbiAgICB6d25qOiBcIlxcdTIwMENcIixcbiAgICB6d2o6IFwiXFx1MjAwRFwiLFxuICAgIGxybTogXCJcXHUyMDBFXCIsXG4gICAgcmxtOiBcIlxcdTIwMEZcIixcbiAgICBuZGFzaDogXCJcXHUyMDEzXCIsXG4gICAgbWRhc2g6IFwiXFx1MjAxNFwiLFxuICAgIGxzcXVvOiBcIlxcdTIwMThcIixcbiAgICByc3F1bzogXCJcXHUyMDE5XCIsXG4gICAgc2JxdW86IFwiXFx1MjAxQVwiLFxuICAgIGxkcXVvOiBcIlxcdTIwMUNcIixcbiAgICByZHF1bzogXCJcXHUyMDFEXCIsXG4gICAgYmRxdW86IFwiXFx1MjAxRVwiLFxuICAgIGRhZ2dlcjogXCJcXHUyMDIwXCIsXG4gICAgRGFnZ2VyOiBcIlxcdTIwMjFcIixcbiAgICBidWxsOiBcIlxcdTIwMjJcIixcbiAgICBoZWxsaXA6IFwiXFx1MjAyNlwiLFxuICAgIHBlcm1pbDogXCJcXHUyMDMwXCIsXG4gICAgcHJpbWU6IFwiXFx1MjAzMlwiLFxuICAgIFByaW1lOiBcIlxcdTIwMzNcIixcbiAgICBsc2FxdW86IFwiXFx1MjAzOVwiLFxuICAgIHJzYXF1bzogXCJcXHUyMDNBXCIsXG4gICAgb2xpbmU6IFwiXFx1MjAzRVwiLFxuICAgIGZyYXNsOiBcIlxcdTIwNDRcIixcbiAgICBldXJvOiBcIlxcdTIwQUNcIixcbiAgICBpbWFnZTogXCJcXHUyMTExXCIsXG4gICAgd2VpZXJwOiBcIlxcdTIxMThcIixcbiAgICByZWFsOiBcIlxcdTIxMUNcIixcbiAgICB0cmFkZTogXCJcXHUyMTIyXCIsXG4gICAgYWxlZnN5bTogXCJcXHUyMTM1XCIsXG4gICAgbGFycjogXCJcXHUyMTkwXCIsXG4gICAgdWFycjogXCJcXHUyMTkxXCIsXG4gICAgcmFycjogXCJcXHUyMTkyXCIsXG4gICAgZGFycjogXCJcXHUyMTkzXCIsXG4gICAgaGFycjogXCJcXHUyMTk0XCIsXG4gICAgY3JhcnI6IFwiXFx1MjFCNVwiLFxuICAgIGxBcnI6IFwiXFx1MjFEMFwiLFxuICAgIHVBcnI6IFwiXFx1MjFEMVwiLFxuICAgIHJBcnI6IFwiXFx1MjFEMlwiLFxuICAgIGRBcnI6IFwiXFx1MjFEM1wiLFxuICAgIGhBcnI6IFwiXFx1MjFENFwiLFxuICAgIGZvcmFsbDogXCJcXHUyMjAwXCIsXG4gICAgcGFydDogXCJcXHUyMjAyXCIsXG4gICAgZXhpc3Q6IFwiXFx1MjIwM1wiLFxuICAgIGVtcHR5OiBcIlxcdTIyMDVcIixcbiAgICBuYWJsYTogXCJcXHUyMjA3XCIsXG4gICAgaXNpbjogXCJcXHUyMjA4XCIsXG4gICAgbm90aW46IFwiXFx1MjIwOVwiLFxuICAgIG5pOiBcIlxcdTIyMEJcIixcbiAgICBwcm9kOiBcIlxcdTIyMEZcIixcbiAgICBzdW06IFwiXFx1MjIxMVwiLFxuICAgIG1pbnVzOiBcIlxcdTIyMTJcIixcbiAgICBsb3dhc3Q6IFwiXFx1MjIxN1wiLFxuICAgIHJhZGljOiBcIlxcdTIyMUFcIixcbiAgICBwcm9wOiBcIlxcdTIyMURcIixcbiAgICBpbmZpbjogXCJcXHUyMjFFXCIsXG4gICAgYW5nOiBcIlxcdTIyMjBcIixcbiAgICBhbmQ6IFwiXFx1MjIyN1wiLFxuICAgIG9yOiBcIlxcdTIyMjhcIixcbiAgICBjYXA6IFwiXFx1MjIyOVwiLFxuICAgIGN1cDogXCJcXHUyMjJBXCIsXG4gICAgXCJpbnRcIjogXCJcXHUyMjJCXCIsXG4gICAgdGhlcmU0OiBcIlxcdTIyMzRcIixcbiAgICBzaW06IFwiXFx1MjIzQ1wiLFxuICAgIGNvbmc6IFwiXFx1MjI0NVwiLFxuICAgIGFzeW1wOiBcIlxcdTIyNDhcIixcbiAgICBuZTogXCJcXHUyMjYwXCIsXG4gICAgZXF1aXY6IFwiXFx1MjI2MVwiLFxuICAgIGxlOiBcIlxcdTIyNjRcIixcbiAgICBnZTogXCJcXHUyMjY1XCIsXG4gICAgc3ViOiBcIlxcdTIyODJcIixcbiAgICBzdXA6IFwiXFx1MjI4M1wiLFxuICAgIG5zdWI6IFwiXFx1MjI4NFwiLFxuICAgIHN1YmU6IFwiXFx1MjI4NlwiLFxuICAgIHN1cGU6IFwiXFx1MjI4N1wiLFxuICAgIG9wbHVzOiBcIlxcdTIyOTVcIixcbiAgICBvdGltZXM6IFwiXFx1MjI5N1wiLFxuICAgIHBlcnA6IFwiXFx1MjJBNVwiLFxuICAgIHNkb3Q6IFwiXFx1MjJDNVwiLFxuICAgIGxjZWlsOiBcIlxcdTIzMDhcIixcbiAgICByY2VpbDogXCJcXHUyMzA5XCIsXG4gICAgbGZsb29yOiBcIlxcdTIzMEFcIixcbiAgICByZmxvb3I6IFwiXFx1MjMwQlwiLFxuICAgIGxhbmc6IFwiXFx1MjMyOVwiLFxuICAgIHJhbmc6IFwiXFx1MjMyQVwiLFxuICAgIGxvejogXCJcXHUyNUNBXCIsXG4gICAgc3BhZGVzOiBcIlxcdTI2NjBcIixcbiAgICBjbHViczogXCJcXHUyNjYzXCIsXG4gICAgaGVhcnRzOiBcIlxcdTI2NjVcIixcbiAgICBkaWFtczogXCJcXHUyNjY2XCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwibmFtZVwiOiBcImVzcHJlZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiQW4gYWN0aXZlbHktbWFpbnRhaW5lZCBmb3JrIG9mIEVzcHJpbWEsIHRoZSBFQ01BU2NyaXB0IHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIG11bHRpcHVycG9zZSBhbmFseXNpc1wiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiTmljaG9sYXMgQy4gWmFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXMrbnBtQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlXCIsXG4gIFwibWFpblwiOiBcImVzcHJlZS5qc1wiLFxuICBcImJpblwiOiB7XG4gICAgXCJlc3BhcnNlXCI6IFwiLi9iaW4vZXNwYXJzZS5qc1wiLFxuICAgIFwiZXN2YWxpZGF0ZVwiOiBcIi4vYmluL2VzdmFsaWRhdGUuanNcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIyLjIuNVwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpblwiLFxuICAgIFwibGliXCIsXG4gICAgXCJ0ZXN0L3J1bi5qc1wiLFxuICAgIFwidGVzdC9ydW5uZXIuanNcIixcbiAgICBcInRlc3QvdGVzdC5qc1wiLFxuICAgIFwidGVzdC9jb21wYXQuanNcIixcbiAgICBcInRlc3QvcmVmbGVjdC5qc1wiLFxuICAgIFwiZXNwcmVlLmpzXCJcbiAgXSxcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vbnpha2FzL2VzcHJlZS9yYXcvbWFzdGVyL0xJQ0VOU0VcIlxuICAgIH1cbiAgXSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl43LjAuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4xLjEwLjBcIixcbiAgICBcImNvbXBsZXhpdHktcmVwb3J0XCI6IFwifjAuNi4xXCIsXG4gICAgXCJkYXRlZm9ybWF0XCI6IFwiXjEuMC4xMVwiLFxuICAgIFwiZXNsaW50XCI6IFwiXjAuOS4yXCIsXG4gICAgXCJlc3ByaW1hXCI6IFwiZ2l0Oi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS5naXRcIixcbiAgICBcImVzcHJpbWEtZmJcIjogXCJeODAwMS4yMDAxLjAtZGV2LWhhcm1vbnktZmJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwifjAuMi42XCIsXG4gICAgXCJqc29uLWRpZmZcIjogXCJ+MC4zLjFcIixcbiAgICBcImxlY2hlXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjAuMVwiLFxuICAgIFwibnBtLWxpY2Vuc2VcIjogXCJeMC4yLjNcIixcbiAgICBcIm9wdGltaXN0XCI6IFwifjAuNi4wXCIsXG4gICAgXCJyZWdlbmVyYXRlXCI6IFwifjAuNS40XCIsXG4gICAgXCJzZW12ZXJcIjogXCJeNC4xLjFcIixcbiAgICBcInNoZWxsanNcIjogXCJeMC4zLjBcIixcbiAgICBcInNoZWxsanMtbm9kZWNsaVwiOiBcIl4wLjEuMVwiLFxuICAgIFwidW5pY29kZS02LjMuMFwiOiBcIn4wLjEuMFwiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiYXN0XCIsXG4gICAgXCJlY21hc2NyaXB0XCIsXG4gICAgXCJqYXZhc2NyaXB0XCIsXG4gICAgXCJwYXJzZXJcIixcbiAgICBcInN5bnRheFwiXG4gIF0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJnZW5lcmF0ZS1yZWdleFwiOiBcIm5vZGUgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc1wiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbm9kZSBNYWtlZmlsZS5qcyB0ZXN0ICYmIG5vZGUgdGVzdC9ydW4uanNcIixcbiAgICBcImxpbnRcIjogXCJub2RlIE1ha2VmaWxlLmpzIGxpbnRcIixcbiAgICBcInBhdGNoXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBwYXRjaFwiLFxuICAgIFwibWlub3JcIjogXCJub2RlIE1ha2VmaWxlLmpzIG1pbm9yXCIsXG4gICAgXCJtYWpvclwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbWFqb3JcIixcbiAgICBcImJyb3dzZXJpZnlcIjogXCJub2RlIE1ha2VmaWxlLmpzIGJyb3dzZXJpZnlcIixcbiAgICBcImNvdmVyYWdlXCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb3ZlcmFnZSAmJiBucG0gcnVuLXNjcmlwdCBjaGVjay1jb3ZlcmFnZVwiLFxuICAgIFwiYW5hbHl6ZS1jb3ZlcmFnZVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgY292ZXIgdGVzdC9ydW5uZXIuanNcIixcbiAgICBcImNoZWNrLWNvdmVyYWdlXCI6IFwibm9kZSBub2RlX21vZHVsZXMvaXN0YW5idWwvbGliL2NsaS5qcyBjaGVjay1jb3ZlcmFnZSAtLXN0YXRlbWVudCA5OSAtLWJyYW5jaCA5OSAtLWZ1bmN0aW9uIDk5XCIsXG4gICAgXCJjb21wbGV4aXR5XCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb21wbGV4aXR5ICYmIG5wbSBydW4tc2NyaXB0IGNoZWNrLWNvbXBsZXhpdHlcIixcbiAgICBcImFuYWx5emUtY29tcGxleGl0eVwiOiBcIm5vZGUgdG9vbHMvbGlzdC1jb21wbGV4aXR5LmpzXCIsXG4gICAgXCJjaGVjay1jb21wbGV4aXR5XCI6IFwibm9kZSBub2RlX21vZHVsZXMvY29tcGxleGl0eS1yZXBvcnQvc3JjL2NsaS5qcyAtLW1heGNjIDE0IC0tc2lsZW50IC1sIC13IGVzcHJlZS5qc1wiLFxuICAgIFwiYmVuY2htYXJrXCI6IFwibm9kZSB0ZXN0L2JlbmNobWFya3MuanNcIixcbiAgICBcImJlbmNobWFyay1xdWlja1wiOiBcIm5vZGUgdGVzdC9iZW5jaG1hcmtzLmpzIHF1aWNrXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge30sXG4gIFwiZ2l0SGVhZFwiOiBcImVlZWViMDViODc5NzgzOTAxZmYyMzA4ZWZjYmQwY2RhNzY3NTNjYmVcIixcbiAgXCJfaWRcIjogXCJlc3ByZWVAMi4yLjVcIixcbiAgXCJfc2hhc3VtXCI6IFwiZGY2OTFiOTMxMDg4OTQwMmFlYjI5Y2MwNjY3MDhjNTY2OTBiODU0YlwiLFxuICBcIl9mcm9tXCI6IFwiZXNwcmVlQD49Mi4wLjEgPDMuMC4wXCIsXG4gIFwiX25wbVZlcnNpb25cIjogXCIxLjQuMjhcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgXCJlbWFpbFwiOiBcIm5pY2hvbGFzQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImRmNjkxYjkzMTA4ODk0MDJhZWIyOWNjMDY2NzA4YzU2NjkwYjg1NGJcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqL1xuLypqc2hpbnQgaW5kZW50OjQqL1xuLypnbG9iYWwgZXhwb3J0czp0cnVlKi9cbihmdW5jdGlvbiBjbG9uZShleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgVmlzaXRvck9wdGlvbixcbiAgICAgICAgVmlzaXRvcktleXMsXG4gICAgICAgIG9iamVjdENyZWF0ZSxcbiAgICAgICAgb2JqZWN0S2V5cyxcbiAgICAgICAgQlJFQUssXG4gICAgICAgIFNLSVAsXG4gICAgICAgIFJFTU9WRTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9XG5cbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsO1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh2YWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKHNoYWxsb3dDb3B5KTtcblxuICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8gbG93ZXJfYm91bmRcbiAgICAvLyBNSVQgTGljZW5zZVxuXG4gICAgZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2VyQm91bmQpO1xuXG4gICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBGKCkgeyB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICBGLnByb3RvdHlwZSA9IG87XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gbykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0bywgZnJvbSkge1xuICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSksIGtleSwgaSwgbGVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybicsXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG4gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJlc3Npb24nLCAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJyxcbiAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JyxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6ICdDb21wcmVoZW5zaW9uQmxvY2snLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiAnQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JyxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVtZW50JyxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JyxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogJ0dlbmVyYXRvckV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN1cGVyRXhwcmVzc2lvbjogJ1N1cGVyRXhwcmVzc2lvbicsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBWaXNpdG9yS2V5cyA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdzdXBlckNsYXNzJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ3N1cGVyQ2xhc3MnLCAnYm9keSddLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IFsnbGVmdCcsICdyaWdodCddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3QnXSxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogWydzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJ10sXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nLCAnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiBbJ2V4cG9ydGVkJywgJ2xvY2FsJ10sXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246IFsnaWQnLCAncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiBbXSxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogWydzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBbJ2xvY2FsJ10sXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogWydsb2NhbCddLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IFsnaW1wb3J0ZWQnLCAnbG9jYWwnXSxcbiAgICAgICAgTGl0ZXJhbDogW10sXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogW10sXG4gICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIFByb2dyYW06IFsnYm9keSddLFxuICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgUmVzdEVsZW1lbnQ6IFsgJ2FyZ3VtZW50JyBdLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU3VwZXJFeHByZXNzaW9uOiBbJ3N1cGVyJ10sXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSxcbiAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBbJ3RhZycsICdxdWFzaSddLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IFtdLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6IFsncXVhc2lzJywgJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXInLCAnZmluYWxpemVyJ10sXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5J10sXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddXG4gICAgfTtcblxuICAgIC8vIHVuaXF1ZSBpZFxuICAgIEJSRUFLID0ge307XG4gICAgU0tJUCA9IHt9O1xuICAgIFJFTU9WRSA9IHt9O1xuXG4gICAgVmlzaXRvck9wdGlvbiA9IHtcbiAgICAgICAgQnJlYWs6IEJSRUFLLFxuICAgICAgICBTa2lwOiBTS0lQLFxuICAgICAgICBSZW1vdmU6IFJFTU9WRVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlO1xuICAgIH07XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zcGxpY2UodGhpcy5rZXksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfVxuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07XG4gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHR5cGUgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSB8fCB0aGlzLl9fY3VycmVudC53cmFwO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50c1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7XG5cbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50O1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWtcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykge1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIGJyZWFrIHRyYXZlcnNhbHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmVtb3ZlIG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFJFTU9WRSk7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdGhpcy52aXNpdG9yID0gdmlzaXRvcjtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5fX3dvcmtsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZmFsbGJhY2sgPSB2aXNpdG9yLmZhbGxiYWNrID09PSAnaXRlcmF0aW9uJztcbiAgICAgICAgdGhpcy5fX2tleXMgPSBWaXNpdG9yS2V5cztcbiAgICAgICAgaWYgKHZpc2l0b3Iua2V5cykge1xuICAgICAgICAgICAgdGhpcy5fX2tleXMgPSBleHRlbmQob2JqZWN0Q3JlYXRlKHRoaXMuX19rZXlzKSwgdmlzaXRvci5rZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZS50eXBlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KG5vZGVUeXBlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGtleTtcbiAgICB9XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbDtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZi5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlZmVyZW5jZSBpcyBhbiBlbGVtZW50IG9mIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgIGtleSA9IGVsZW1lbnQucmVmLmtleTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnJlZi5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiByZW1vdmVkIGZyb20gYXJyYXksIHRoZW4gZGVjcmVhc2UgZm9sbG93aW5nIGl0ZW1zJyBrZXlzLlxuICAgICAgICAgICAgICAgIGkgPSB3b3JrbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbSA9IHdvcmtsaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW0ucmVmICYmIG5leHRFbGVtLnJlZi5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChuZXh0RWxlbS5yZWYua2V5IDwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAtLW5leHRFbGVtLnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsLFxuICAgICAgICAgICAgb3V0ZXIsXG4gICAgICAgICAgICBrZXk7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICBvdXRlciA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3RcbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpO1xuICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsxXV07XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQgLT0gMTtcbiAgICAgICAgaWYgKHRhcmdldCA+PSAwKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRva2Vucykge1xuICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy5cbiAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxlbiwgaSwgY3Vyc29yO1xuXG4gICAgICAgIGlmICghdHJlZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJ1xuICAgICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoJy4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDtcbiAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG4gICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247XG4gICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjtcbiAgICBleHBvcnRzLmNsb25lRW52aXJvbm1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9uZSh7fSk7IH07XG5cbiAgICByZXR1cm4gZXhwb3J0cztcbn0oZXhwb3J0cykpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXN0cmF2ZXJzZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRUNNQVNjcmlwdCBKUyBBU1QgdHJhdmVyc2FsIGZ1bmN0aW9uc1wiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZVwiLFxuICBcIm1haW5cIjogXCJlc3RyYXZlcnNlLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMS4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgICBcImVtYWlsXCI6IFwidXRhdGFuZS50ZWFAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgICBcImVtYWlsXCI6IFwibnBtQG1pY2hhZWwuZmljYXJyYS5tZVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS5naXRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjaGFpXCI6IFwiXjIuMS4xXCIsXG4gICAgXCJjb2ZmZWUtc2NyaXB0XCI6IFwiXjEuOC4wXCIsXG4gICAgXCJlc3ByZWVcIjogXCJeMS4xMS4wXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOC4xMFwiLFxuICAgIFwiZ3VscC1idW1wXCI6IFwiXjAuMi4yXCIsXG4gICAgXCJndWxwLWZpbHRlclwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC1naXRcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtdGFnLXZlcnNpb25cIjogXCJeMS4yLjFcIixcbiAgICBcImpzaGludFwiOiBcIl4yLjUuNlwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4xLjBcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlL3Jhdy9tYXN0ZXIvTElDRU5TRS5CU0RcIlxuICAgIH1cbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInRlc3RcIjogXCJucG0gcnVuLXNjcmlwdCBsaW50ICYmIG5wbSBydW4tc2NyaXB0IHVuaXQtdGVzdFwiLFxuICAgIFwibGludFwiOiBcImpzaGludCBlc3RyYXZlcnNlLmpzXCIsXG4gICAgXCJ1bml0LXRlc3RcIjogXCJtb2NoYSAtLWNvbXBpbGVycyBjb2ZmZWU6Y29mZmVlLXNjcmlwdC9yZWdpc3RlclwiXG4gIH0sXG4gIFwiZ2l0SGVhZFwiOiBcIjE2NmViYmUwYThkNDVjZWIyMzkxYjZmNWVmNWQxYmFiNmJmYjI2N2FcIixcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvaXNzdWVzXCJcbiAgfSxcbiAgXCJfaWRcIjogXCJlc3RyYXZlcnNlQDMuMS4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcIjE1ZTI4YTQ0NmI4YjgyYmM3MDBjY2M4Yjk2Yzc4YWY0ZGEwZDZjYmFcIixcbiAgXCJfZnJvbVwiOiBcImVzdHJhdmVyc2VAPj0zLjEuMCA8NC4wLjBcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjIuMC4wLWFscGhhLTVcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtMy4xLjAudGd6XCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuIC8qanNsaW50IG5vZGU6IHRydWUgKi9cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTdGF0aWMgYW5hbHlzaXMgZm9yIFBvbHltZXIuXG4gKiBAbmFtZXNwYWNlIGh5ZHJvbHlzaXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFuYWx5emVyOiAgICAgcmVxdWlyZSgnLi9saWIvYW5hbHl6ZXInKSxcbiAgZG9jczogICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvZG9jcycpLFxuICBGU1Jlc29sdmVyOiAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9mcy1yZXNvbHZlcicpLFxuICBqc2RvYzogICAgICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qc2RvYycpLFxuICBMb2FkZXI6ICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9maWxlLWxvYWRlcicpLFxuICBOb29wUmVzb2x2ZXI6IHJlcXVpcmUoJy4vbGliL2xvYWRlci9ub29wLXJlc29sdmVyJyksXG4gIFhIUlJlc29sdmVyOiAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL3hoci1yZXNvbHZlcicpLFxuICBfanNQYXJzZTogICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qcy1wYXJzZScpLFxuICBfaW1wb3J0UGFyc2U6IHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UnKSxcbn07XG4iXX0=
... ...
bower_components/hydrolysis/index.js 100755 โ†’ 100644
bower_components/iron-a11y-announcer/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-a11y-announcer",
3   - "version": "1.0.2",
  3 + "version": "1.0.3",
4 4 "description": "A singleton element that simplifies announcing text to screen readers.",
5 5 "keywords": [
6 6 "web-components",
... ... @@ -29,14 +29,14 @@
29 29 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
30 30 "web-component-tester": "*"
31 31 },
32   - "homepage": "https://github.com/PolymerElements/iron-a11y-announcer",
33   - "_release": "1.0.2",
  32 + "homepage": "https://github.com/polymerelements/iron-a11y-announcer",
  33 + "_release": "1.0.3",
34 34 "_resolution": {
35 35 "type": "version",
36   - "tag": "v1.0.2",
37   - "commit": "6010b30a67a12333f76394a558c820db727f7c84"
  36 + "tag": "v1.0.3",
  37 + "commit": "a5b8161326f11d68eacb5e9ea60694ebd779b48a"
38 38 },
39   - "_source": "git://github.com/PolymerElements/iron-a11y-announcer.git",
  39 + "_source": "git://github.com/polymerelements/iron-a11y-announcer.git",
40 40 "_target": "^1.0.0",
41   - "_originalSource": "PolymerElements/iron-a11y-announcer"
  41 + "_originalSource": "polymerelements/iron-a11y-announcer"
42 42 }
43 43 \ No newline at end of file
... ...
bower_components/iron-a11y-announcer/.gitignore 100755 โ†’ 100644
bower_components/iron-a11y-announcer/README.md 100755 โ†’ 100644
bower_components/iron-a11y-announcer/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-a11y-announcer",
3   - "version": "1.0.2",
  3 + "version": "1.0.3",
4 4 "description": "A singleton element that simplifies announcing text to screen readers.",
5 5 "keywords": [
6 6 "web-components",
... ...
bower_components/iron-a11y-announcer/demo/index.html 100755 โ†’ 100644
bower_components/iron-a11y-announcer/demo/x-announces.html 100755 โ†’ 100644
bower_components/iron-a11y-announcer/index.html 100755 โ†’ 100644
bower_components/iron-a11y-announcer/iron-a11y-announcer.html 100755 โ†’ 100644
... ... @@ -54,7 +54,7 @@ Note: announcements are only audible if you have a screen reader enabled.
54 54 </style>
55 55  
56 56 <template>
57   - <span aria-live$="[[mode]]">[[_text]]</span>
  57 + <div aria-live$="[[mode]]">[[_text]]</div>
58 58 </template>
59 59  
60 60 <script>
... ...
bower_components/iron-a11y-announcer/test/index.html 100755 โ†’ 100644
bower_components/iron-a11y-announcer/test/iron-a11y-announcer.html 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-a11y-keys-behavior",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "A behavior that enables keybindings for greater a11y.",
5 5 "keywords": [
6 6 "web-components",
... ... @@ -30,11 +30,11 @@
30 30 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
31 31 },
32 32 "homepage": "https://github.com/polymerelements/iron-a11y-keys-behavior",
33   - "_release": "1.0.5",
  33 + "_release": "1.0.6",
34 34 "_resolution": {
35 35 "type": "version",
36   - "tag": "v1.0.5",
37   - "commit": "cf833eab5c55a26c5aa92e56d3fcb079120ce66a"
  36 + "tag": "v1.0.6",
  37 + "commit": "af5c98b1cf9b3d180a6326c99ac9c7057eee647f"
38 38 },
39 39 "_source": "git://github.com/polymerelements/iron-a11y-keys-behavior.git",
40 40 "_target": "^1.0.0",
... ...
bower_components/iron-a11y-keys-behavior/.gitignore 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/README.md 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-a11y-keys-behavior",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "A behavior that enables keybindings for greater a11y.",
5 5 "keywords": [
6 6 "web-components",
... ...
bower_components/iron-a11y-keys-behavior/demo/index.html 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/index.html 100755 โ†’ 100644
bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html 100755 โ†’ 100644
... ... @@ -241,7 +241,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
241 241 * `keys` property is pressed.
242 242 *
243 243 * @demo demo/index.html
244   - * @polymerBehavior IronA11yKeysBehavior
  244 + * @polymerBehavior
245 245 */
246 246 Polymer.IronA11yKeysBehavior = {
247 247 properties: {
... ...
bower_components/iron-a11y-keys-behavior/test/basic-test.html 100755 โ†’ 100644
bower_components/iron-ajax/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-ajax",
3   - "version": "1.0.3",
  3 + "version": "1.0.5",
4 4 "description": "Makes it easy to make ajax calls and parse the response",
5 5 "private": true,
6 6 "authors": [
... ... @@ -11,10 +11,7 @@
11 11 "polymer",
12 12 "ajax"
13 13 ],
14   - "main": [
15   - "iron-ajax.html",
16   - "iron-request.html"
17   - ],
  14 + "main": "iron-ajax.html",
18 15 "repository": {
19 16 "type": "git",
20 17 "url": "git://github.com/PolymerElements/iron-ajax.git"
... ... @@ -35,11 +32,11 @@
35 32 "web-component-tester": "*",
36 33 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
37 34 },
38   - "_release": "1.0.3",
  35 + "_release": "1.0.5",
39 36 "_resolution": {
40 37 "type": "version",
41   - "tag": "v1.0.3",
42   - "commit": "32d96a1064a522cdc8e2cb5462b45d5232a7df16"
  38 + "tag": "v1.0.5",
  39 + "commit": "ce7e3e4cbac6b3d9aebae626021498882326b3bc"
43 40 },
44 41 "_source": "git://github.com/PolymerElements/iron-ajax.git",
45 42 "_target": "^1.0.0",
... ...
bower_components/iron-ajax/.gitignore 100755 โ†’ 100644
bower_components/iron-ajax/README.md 100755 โ†’ 100644
bower_components/iron-ajax/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-ajax",
3   - "version": "1.0.3",
  3 + "version": "1.0.5",
4 4 "description": "Makes it easy to make ajax calls and parse the response",
5 5 "private": true,
6 6 "authors": [
... ... @@ -11,10 +11,7 @@
11 11 "polymer",
12 12 "ajax"
13 13 ],
14   - "main": [
15   - "iron-ajax.html",
16   - "iron-request.html"
17   - ],
  14 + "main": "iron-ajax.html",
18 15 "repository": {
19 16 "type": "git",
20 17 "url": "git://github.com/PolymerElements/iron-ajax.git"
... ...
bower_components/iron-ajax/demo/index.html 100755 โ†’ 100644
bower_components/iron-ajax/hero.svg 100755 โ†’ 100644
bower_components/iron-ajax/index.html 100755 โ†’ 100644
bower_components/iron-ajax/iron-ajax.html 100755 โ†’ 100644
... ... @@ -60,6 +60,10 @@ element.
60 60 * @event error
61 61 */
62 62  
  63 + hostAttributes: {
  64 + hidden: true
  65 + },
  66 +
63 67 properties: {
64 68 /**
65 69 * The URL target of the request.
... ... @@ -204,29 +208,32 @@ element.
204 208 },
205 209  
206 210 /**
207   - * Will be set to true if there is at least one in-flight request
208   - * associated with this iron-ajax element.
  211 + * The most recent request made by this iron-ajax element.
209 212 */
210   - loading: {
211   - type: Boolean,
  213 + lastRequest: {
  214 + type: Object,
212 215 notify: true,
213 216 readOnly: true
214 217 },
215 218  
216 219 /**
217   - * Will be set to the most recent request made by this iron-ajax element.
  220 + * True while lastRequest is in flight.
218 221 */
219   - lastRequest: {
220   - type: Object,
  222 + loading: {
  223 + type: Boolean,
221 224 notify: true,
222 225 readOnly: true
223 226 },
224 227  
225 228 /**
226   - * Will be set to the most recent response received by a request
227   - * that originated from this iron-ajax element. The type of the response
228   - * is determined by the value of `handleAs` at the time that the request
229   - * was generated.
  229 + * lastRequest's response.
  230 + *
  231 + * Note that lastResponse and lastError are set when lastRequest finishes,
  232 + * so if loading is true, then lastResponse and lastError will correspond
  233 + * to the result of the previous request.
  234 + *
  235 + * The type of the response is determined by the value of `handleAs` at
  236 + * the time that the request was generated.
230 237 */
231 238 lastResponse: {
232 239 type: Object,
... ... @@ -235,8 +242,7 @@ element.
235 242 },
236 243  
237 244 /**
238   - * Will be set to the most recent error that resulted from a request
239   - * that originated from this iron-ajax element.
  245 + * lastRequest's error, if any.
240 246 */
241 247 lastError: {
242 248 type: Object,
... ... @@ -275,7 +281,7 @@ element.
275 281 },
276 282  
277 283 observers: [
278   - '_requestOptionsChanged(url, method, params, headers,' +
  284 + '_requestOptionsChanged(url, method, params.*, headers,' +
279 285 'contentType, body, sync, handleAs, withCredentials, auto)'
280 286 ],
281 287  
... ... @@ -399,14 +405,18 @@ element.
399 405 this.fire('request', {
400 406 request: request,
401 407 options: requestOptions
402   - });
  408 + }, {bubbles: false});
403 409  
404 410 return request;
405 411 },
406 412  
407 413 _handleResponse: function(request) {
408   - this._setLastResponse(request.response);
409   - this.fire('response', request);
  414 + if (request === this.lastRequest) {
  415 + this._setLastResponse(request.response);
  416 + this._setLastError(null);
  417 + this._setLoading(false);
  418 + }
  419 + this.fire('response', request, {bubbles: false});
410 420 },
411 421  
412 422 _handleError: function(request, error) {
... ... @@ -414,14 +424,18 @@ element.
414 424 console.error(error);
415 425 }
416 426  
417   - this._setLastError({
418   - request: request,
419   - error: error
420   - });
  427 + if (request === this.lastRequest) {
  428 + this._setLastError({
  429 + request: request,
  430 + error: error
  431 + });
  432 + this._setLastResponse(null);
  433 + this._setLoading(false);
  434 + }
421 435 this.fire('error', {
422 436 request: request,
423 437 error: error
424   - });
  438 + }, {bubbles: false});
425 439 },
426 440  
427 441 _discardRequest: function(request) {
... ... @@ -430,10 +444,6 @@ element.
430 444 if (requestIndex > -1) {
431 445 this.activeRequests.splice(requestIndex, 1);
432 446 }
433   -
434   - if (this.activeRequests.length === 0) {
435   - this._setLoading(false);
436   - }
437 447 },
438 448  
439 449 _requestOptionsChanged: function() {
... ...
bower_components/iron-ajax/iron-request.html 100755 โ†’ 100644
... ... @@ -23,6 +23,10 @@ iron-request can be used to perform XMLHttpRequests.
23 23 Polymer({
24 24 is: 'iron-request',
25 25  
  26 + hostAttributes: {
  27 + hidden: true
  28 + },
  29 +
26 30 properties: {
27 31  
28 32 /**
... ... @@ -63,7 +67,6 @@ iron-request can be used to perform XMLHttpRequests.
63 67 * A reference to the status code, if the `xhr` has completely resolved.
64 68 *
65 69 * @attribute status
66   - * @type short
67 70 * @default 0
68 71 */
69 72 status: {
... ... @@ -77,7 +80,6 @@ iron-request can be used to perform XMLHttpRequests.
77 80 * A reference to the status text, if the `xhr` has completely resolved.
78 81 *
79 82 * @attribute statusText
80   - * @type String
81 83 * @default ""
82 84 */
83 85 statusText: {
... ... @@ -237,7 +239,6 @@ iron-request can be used to perform XMLHttpRequests.
237 239 }
238 240 var body = this._encodeBodyObject(options.body, contentType);
239 241  
240   -
241 242 // In IE, `xhr.responseType` is an empty string when the response
242 243 // returns. Hence, caching it as `xhr._responseType`.
243 244 xhr.responseType = xhr._responseType = (options.handleAs || 'text');
... ... @@ -245,7 +246,10 @@ iron-request can be used to perform XMLHttpRequests.
245 246  
246 247  
247 248  
248   - xhr.send(body);
  249 + xhr.send(
  250 + /** @type {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|
  251 + null|string|undefined} */
  252 + (body));
249 253  
250 254 return this.completes;
251 255 },
... ... @@ -275,7 +279,7 @@ iron-request can be used to perform XMLHttpRequests.
275 279 // If accessing `xhr.responseText` throws, responseType `json`
276 280 // is supported and the result is rightly `undefined`.
277 281 try {
278   - xhr.responseText;
  282 + /** @suppress {suspiciousCode} */ xhr.responseText;
279 283 } catch (e) {
280 284 return xhr.response;
281 285 }
... ... @@ -314,20 +318,21 @@ iron-request can be used to perform XMLHttpRequests.
314 318 * @param {*} body The given body of the request to try and encode.
315 319 * @param {?string} contentType The given content type, to infer an encoding
316 320 * from.
317   - * @return {?string|*} Either the encoded body as a string, if successful,
  321 + * @return {*} Either the encoded body as a string, if successful,
318 322 * or the unaltered body object if no encoding could be inferred.
319 323 */
320 324 _encodeBodyObject: function(body, contentType) {
321 325 if (typeof body == 'string') {
322 326 return body; // Already encoded.
323 327 }
  328 + var bodyObj = /** @type {Object} */ (body);
324 329 switch(contentType) {
325 330 case('application/json'):
326   - return JSON.stringify(body);
  331 + return JSON.stringify(bodyObj);
327 332 case('application/x-www-form-urlencoded'):
328   - return this._wwwFormUrlEncode(body);
  333 + return this._wwwFormUrlEncode(bodyObj);
329 334 }
330   - return body; // Unknown, make no change.
  335 + return body;
331 336 },
332 337  
333 338 /**
... ...
bower_components/iron-ajax/test/index.html 100755 โ†’ 100644
... ... @@ -11,7 +11,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
11 11 <html>
12 12 <head>
13 13 <meta charset="utf-8">
14   - <script src="../../webcomponentsjs/webcomponents.js"></script>
  14 + <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
15 15 <script src="../../web-component-tester/browser.js"></script>
16 16 </head>
17 17 <body>
... ...
bower_components/iron-ajax/test/iron-ajax.html 100755 โ†’ 100644
... ... @@ -16,7 +16,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
16 16 <script src="../../test-fixture/test-fixture-mocha.js"></script>
17 17  
18 18 <link rel="import" href="../../polymer/polymer.html">
19   - <link rel="import" href="../../promise-polyfill/promise-polyfill-lite.html">
  19 + <link rel="import" href="../../promise-polyfill/promise-polyfill.html">
20 20 <link rel="import" href="../../test-fixture/test-fixture.html">
21 21 <link rel="import" href="../iron-ajax.html">
22 22 </head>
... ... @@ -37,6 +37,11 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
37 37 <iron-ajax auto url="/responds_to_get_with_json"></iron-ajax>
38 38 </template>
39 39 </test-fixture>
  40 + <test-fixture id="GetEcho">
  41 + <template>
  42 + <iron-ajax handle-as="json" url="/echoes_request_url"></iron-ajax>
  43 + </template>
  44 + </test-fixture>
40 45 <test-fixture id="TrivialPost">
41 46 <template>
42 47 <iron-ajax method="POST"
... ... @@ -128,6 +133,19 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
128 133 server.restore();
129 134 });
130 135  
  136 + // Echo requests are responded to individually and on demand, unlike the
  137 + // others in this file which are responded to with server.respond(),
  138 + // which responds to all open requests.
  139 + // We don't use server.respondWith here because there's no way to use it
  140 + // and only respond to a subset of requests.
  141 + // This way we can test for delayed and out of order responses and
  142 + // distinquish them by their responses.
  143 + function respondToEchoRequest(request) {
  144 + request.respond(200, responseHeaders.json, JSON.stringify({
  145 + url: request.url
  146 + }));
  147 + }
  148 +
131 149 suite('when making simple GET requests for JSON', function() {
132 150 test('has sane defaults that love you', function() {
133 151 request = ajax.generateRequest();
... ... @@ -185,44 +203,100 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
185 203 expect(ajax.generateRequest()).to.be.instanceOf(IronRequest);
186 204 });
187 205  
188   - test('reflects the loading state in the `loading` property', function(done) {
  206 + test('reflects the loading state in the `loading` property', function() {
189 207 var request = ajax.generateRequest();
190 208  
191 209 expect(ajax.loading).to.be.equal(true);
192 210  
193 211 server.respond();
194 212  
195   - timePasses(1).then(function() {
  213 + return request.completes.then(function() {
  214 + return timePasses(1);
  215 + }).then(function() {
196 216 expect(ajax.loading).to.be.equal(false);
197   - done();
198   - }).catch(function(e) {
199   - done(e);
200 217 });
201 218 });
202 219 });
203 220  
204 221 suite('when there are multiple requests', function() {
205 222 var requests;
  223 + var echoAjax;
  224 + var promiseAllComplete;
206 225  
207 226 setup(function() {
  227 + echoAjax = fixture('GetEcho');
208 228 requests = [];
209 229  
210 230 for (var i = 0; i < 3; ++i) {
211   - requests.push(ajax.generateRequest());
  231 + echoAjax.params = {'order': i + 1};
  232 + requests.push(echoAjax.generateRequest());
212 233 }
  234 + var allPromises = requests.map(function(r){return r.completes});
  235 + promiseAllComplete = Promise.all(allPromises);
213 236 });
214 237  
215 238 test('holds all requests in the `activeRequests` Array', function() {
216   - expect(requests).to.deep.eql(ajax.activeRequests);
  239 + expect(requests).to.deep.eql(echoAjax.activeRequests);
217 240 });
218 241  
219   - test('empties `activeRequests` when requests are completed', function(done) {
220   - server.respond();
221   - timePasses(1).then(function() {
222   - expect(ajax.activeRequests.length).to.be.equal(0);
223   - done();
224   - }).catch(function(e) {
225   - done(e);
  242 + test('empties `activeRequests` when requests are completed', function() {
  243 + expect(echoAjax.activeRequests.length).to.be.equal(3);
  244 + for (var i = 0; i < 3; i++) {
  245 + respondToEchoRequest(server.requests[i]);
  246 + }
  247 + return promiseAllComplete.then(function() {
  248 + return timePasses(1);
  249 + }).then(function() {
  250 + expect(echoAjax.activeRequests.length).to.be.equal(0);
  251 + });
  252 + });
  253 +
  254 + test('avoids race conditions with last response', function() {
  255 + expect(echoAjax.lastResponse).to.be.equal(undefined);
  256 +
  257 + // Resolving the oldest request doesn't update lastResponse.
  258 + respondToEchoRequest(server.requests[0]);
  259 + return requests[0].completes.then(function() {
  260 + expect(echoAjax.lastResponse).to.be.equal(undefined);
  261 +
  262 + // Resolving the most recent request does!
  263 + respondToEchoRequest(server.requests[2]);
  264 + return requests[2].completes;
  265 + }).then(function() {
  266 + expect(echoAjax.lastResponse).to.be.deep.eql(
  267 + {url: '/echoes_request_url?order=3'});
  268 +
  269 +
  270 + // Resolving an out of order stale request after does nothing!
  271 + respondToEchoRequest(server.requests[1]);
  272 + return requests[1].completes;
  273 + }).then(function() {
  274 + expect(echoAjax.lastResponse).to.be.deep.eql(
  275 + {url: '/echoes_request_url?order=3'});
  276 + });
  277 + });
  278 +
  279 + test('`loading` is true while the last one is loading', function() {
  280 + expect(echoAjax.loading).to.be.equal(true);
  281 +
  282 + respondToEchoRequest(server.requests[0]);
  283 + return requests[0].completes.then(function() {
  284 + // We're still loading because requests[2] is the most recently
  285 + // made request.
  286 + expect(echoAjax.loading).to.be.equal(true);
  287 +
  288 + respondToEchoRequest(server.requests[2]);
  289 + return requests[2].completes;
  290 + }).then(function() {
  291 + // Now we're done loading.
  292 + expect(echoAjax.loading).to.be.eql(false);
  293 +
  294 + // Resolving an out of order stale request after should have
  295 + // no effect.
  296 + respondToEchoRequest(server.requests[1]);
  297 + return requests[1].completes;
  298 + }).then(function() {
  299 + expect(echoAjax.loading).to.be.eql(false);
226 300 });
227 301 });
228 302 });
... ... @@ -246,42 +320,63 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
246 320 ajax = fixture('AutoGet');
247 321 });
248 322  
249   - test('automatically generates new requests', function(done) {
250   - ajax.addEventListener('request', function() {
251   - done();
  323 + test('automatically generates new requests', function() {
  324 + return new Promise(function(resolve) {
  325 + ajax.addEventListener('request', function() {
  326 + resolve();
  327 + });
252 328 });
253 329 });
254 330  
255   - test('does not send requests if url is not a string', function(done) {
256   - ajax.addEventListener('request', function() {
257   - done(new Error('A request was generated but url is null!'));
258   - });
  331 + test('does not send requests if url is not a string', function() {
  332 + return new Promise(function(resolve, reject) {
  333 + ajax.addEventListener('request', function() {
  334 + reject('A request was generated but url is null!');
  335 + });
259 336  
260   - ajax.url = null;
261   - ajax.handleAs = 'text';
  337 + ajax.url = null;
  338 + ajax.handleAs = 'text';
262 339  
263   - Polymer.Base.async(function() {
264   - done();
265   - }, 1);
  340 + Polymer.Base.async(function() {
  341 + resolve();
  342 + }, 1);
  343 + });
266 344 });
267 345  
268   - test('deduplicates multiple changes to a single request', function(done) {
  346 + test('deduplicates multiple changes to a single request', function() {
  347 + return new Promise(function(resolve, reject) {
  348 + ajax.addEventListener('request', function() {
  349 + server.respond();
  350 + });
  351 +
  352 + ajax.addEventListener('response', function() {
  353 + try {
  354 + expect(ajax.activeRequests.length).to.be.eql(1);
  355 + resolve()
  356 + } catch (e) {
  357 + reject(e);
  358 + }
  359 + });
  360 +
  361 + ajax.handleas = 'text';
  362 + ajax.params = { foo: 'bar' };
  363 + ajax.headers = { 'X-Foo': 'Bar' };
  364 + });
  365 + });
  366 +
  367 + test('automatically generates new request when a sub-property of params is changed', function(done) {
269 368 ajax.addEventListener('request', function() {
270 369 server.respond();
271 370 });
272   -
  371 +
  372 + ajax.params = { foo: 'bar' };
273 373 ajax.addEventListener('response', function() {
274   - try {
275   - expect(ajax.activeRequests.length).to.be.eql(1);
  374 + ajax.addEventListener('request', function() {
276 375 done();
277   - } catch (e) {
278   - done(e);
279   - }
  376 + });
  377 +
  378 + ajax.set('params.foo', 'xyz');
280 379 });
281   -
282   - ajax.handleas = 'text';
283   - ajax.params = { foo: 'bar' };
284   - ajax.headers = { 'X-Foo': 'Bar' };
285 380 });
286 381 });
287 382  
... ... @@ -291,16 +386,15 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
291 386 server.respond();
292 387 });
293 388  
294   - test('is accessible as a readonly property', function(done) {
295   - request.completes.then(function (request) {
  389 + test('is accessible as a readonly property', function() {
  390 + return request.completes.then(function (request) {
296 391 expect(ajax.lastResponse).to.be.equal(request.response);
297   - done();
298   - }).catch(done);
  392 + });
299 393 });
300 394  
301 395  
302   - test('updates with each new response', function(done) {
303   - request.completes.then(function(request) {
  396 + test('updates with each new response', function() {
  397 + return request.completes.then(function(request) {
304 398  
305 399 expect(request.response).to.be.an('object');
306 400 expect(ajax.lastResponse).to.be.equal(request.response);
... ... @@ -310,15 +404,10 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
310 404 server.respond();
311 405  
312 406 return request.completes;
313   -
314 407 }).then(function(request) {
315   -
316 408 expect(request.response).to.be.a('string');
317 409 expect(ajax.lastResponse).to.be.equal(request.response);
318   -
319   - done();
320   -
321   - }).catch(done);
  410 + });
322 411 });
323 412 });
324 413  
... ... @@ -412,14 +501,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
412 501 ajax = fixture('DebouncedGet');
413 502 });
414 503  
415   - test('only requests a single resource', function(done) {
  504 + test('only requests a single resource', function() {
416 505 ajax._requestOptionsChanged();
417 506 expect(server.requests[0]).to.be.equal(undefined);
418 507 ajax._requestOptionsChanged();
419   - window.setTimeout(function() {
  508 + return timePasses(200).then(function() {
420 509 expect(server.requests[0]).to.be.ok;
421   - done();
422   - }, 200);
  510 + });
423 511 });
424 512 });
425 513  
... ... @@ -431,16 +519,15 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
431 519 ajax.addEventListener('response', responseHandler);
432 520 });
433 521  
434   - test('calls the handler after every response', function(done) {
  522 + test('calls the handler after every response', function() {
435 523 ajax.generateRequest();
436 524 ajax.generateRequest();
437 525  
438 526 server.respond();
439 527  
440   - ajax.lastRequest.completes.then(function() {
  528 + return ajax.lastRequest.completes.then(function() {
441 529 expect(responseHandler.callCount).to.be.equal(2);
442   - done();
443   - }).catch(done);
  530 + });
444 531 });
445 532 });
446 533  
... ... @@ -449,94 +536,72 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
449 536 server.restore();
450 537 });
451 538  
452   - test('finds the JSON on any platform', function(done) {
  539 + test('finds the JSON on any platform', function() {
453 540 ajax.url = '../bower.json';
454 541 request = ajax.generateRequest();
455   - request.completes.then(function() {
  542 + return request.completes.then(function() {
456 543 expect(ajax.lastResponse).to.be.instanceOf(Object);
457   - done();
458   - }).catch(function(e) {
459   - done(e);
460 544 });
461 545 });
462 546 });
463 547  
464 548 suite('when handleAs parameter is `text`', function() {
465 549  
466   - test('response type is string', function (done) {
467   -
  550 + test('response type is string', function () {
468 551 ajax.url = '/responds_to_get_with_json';
469 552 ajax.handleAs = 'text';
470 553  
471 554 request = ajax.generateRequest();
472   - request.completes.then(function () {
  555 + var promise = request.completes.then(function () {
473 556 expect(typeof(ajax.lastResponse)).to.be.equal('string');
474   - done();
475   - }).catch(function (e) {
476   - done(e);
477 557 });
478 558  
479 559 server.respond();
480 560  
  561 + return promise;
481 562 });
482 563  
483 564 });
484 565  
485 566 suite('when a request fails', function() {
486   - test('the error event has useful details', function(done) {
487   -
  567 + test('we give an error with useful details', function() {
488 568 ajax.url = '/responds_to_get_with_text';
489 569 ajax.handleAs = 'json';
490   - ajax.generateRequest();
491   -
  570 + var eventFired = false;
492 571 ajax.addEventListener('error', function(event) {
493   - try {
494   - expect(event.detail.request).to.be.okay;
495   - expect(event.detail.error).to.be.okay;
496   - done();
497   - } catch (e) {
498   - done(e);
499   - }
  572 + expect(event.detail.request).to.be.okay;
  573 + expect(event.detail.error).to.be.okay;
  574 + eventFired = true;
  575 + });
  576 + var promise = ajax.generateRequest().completes.then(function() {
  577 + throw new Error('Expected the request to fail!');
  578 + }, function(error) {
  579 + expect(error).to.be.instanceof(Error);
  580 + return timePasses(100);
  581 + }).then(function() {
  582 + expect(eventFired).to.be.eq(true);
500 583 });
501 584  
502 585 server.respond();
  586 +
  587 + return promise;
503 588 });
504 589 });
505 590  
506 591 suite('when handleAs parameter is `json`', function() {
507 592  
508   - test('response type is string', function (done) {
509   -
  593 + test('response type is string', function () {
510 594 ajax.url = '/responds_to_get_with_json';
511 595 ajax.handleAs = 'json';
512 596  
513 597 request = ajax.generateRequest();
514   - request.completes.then(function () {
  598 + var promise = request.completes.then(function () {
515 599 expect(typeof(ajax.lastResponse)).to.be.equal('object');
516   - done();
517   - }).catch(function (e) {
518   - done(e);
519   - });
520   -
521   - server.respond();
522   -
523   - });
524   -
525   - test('fails when getting invalid json data', function (done) {
526   -
527   - ajax.url = '/responds_to_get_with_text';
528   - ajax.handleAs = 'json';
529   -
530   - request = ajax.generateRequest();
531   - request.completes.catch(function (e) {
532   - expect(e).to.be.instanceOf(Error);
533   - done();
534   - }).catch(function (e) {
535   - done(e);
536 600 });
537 601  
538 602 server.respond();
539 603  
  604 + return promise;
540 605 });
541 606  
542 607 });
... ...
bower_components/iron-ajax/test/iron-request.html 100755 โ†’ 100644
... ... @@ -11,7 +11,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
11 11 <head>
12 12 <title>iron-request</title>
13 13  
14   - <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
  14 + <script src="../../webcomponentsjs/webcomponents.js"></script>
15 15 <script src="../../web-component-tester/browser.js"></script>
16 16 <script src="../../test-fixture/test-fixture-mocha.js"></script>
17 17  
... ... @@ -86,50 +86,39 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
86 86 expect(request.xhr.async).to.be.eql(true);
87 87 });
88 88  
89   - test('can be aborted', function (done) {
  89 + test('can be aborted', function () {
90 90 request.send(successfulRequestOptions);
91 91  
92 92 request.abort();
93 93  
94 94 server.respond();
95 95  
96   - request.completes.then(function () {
97   - done(new Error('Request did not abort appropriately!'));
  96 + return request.completes.then(function () {
  97 + throw new Error('Request did not abort appropriately!');
98 98 }).catch(function (e) {
99 99 expect(request.response).to.not.be.ok;
100   - done();
101 100 });
102 101 });
103 102  
104   - test('default responseType is text', function (done) {
105   -
  103 + test('default responseType is text', function () {
106 104 request.send(successfulRequestOptions);
107 105 server.respond();
108 106  
109   - request.completes.then(function() {
  107 + return request.completes.then(function() {
110 108 expect(request.response).to.be.an('string')
111   - done();
112   - }).catch(function(e) {
113   - done(new Error('Response was not a Object'));
114 109 });
115   -
116 110 });
117 111  
118   - test('responseType can be configured via handleAs option', function (done) {
119   -
  112 + test('responseType can be configured via handleAs option', function () {
120 113 var options = Object.create(successfulRequestOptions);
121 114 options.handleAs = 'json';
122 115  
123 116 request.send(options);
124 117 server.respond();
125 118  
126   - request.completes.then(function() {
  119 + return request.completes.then(function() {
127 120 expect(request.response).to.be.an('object');
128   - done();
129   - }).catch(function(e) {
130   - done(new Error('Response was not type Object'));
131 121 });
132   -
133 122 });
134 123  
135 124 });
... ... @@ -176,7 +165,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
176 165 });
177 166  
178 167 server.respond();
179   -
  168 +
180 169 expect(request.status).to.be.equal(0);
181 170 expect(request.statusText).to.be.equal('');
182 171 });
... ...
bower_components/iron-autogrow-textarea/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-autogrow-textarea",
3   - "version": "1.0.3",
  3 + "version": "1.0.6",
4 4 "description": "A textarea element that automatically grows with input",
5 5 "authors": [
6 6 "The Polymer Authors"
... ... @@ -37,11 +37,11 @@
37 37 "paper-styles": "PolymerElements/paper-styles#^1.0.0",
38 38 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
39 39 },
40   - "_release": "1.0.3",
  40 + "_release": "1.0.6",
41 41 "_resolution": {
42 42 "type": "version",
43   - "tag": "v1.0.3",
44   - "commit": "9eae088ce72a31b0baf44e6cdc183e5b73014af5"
  43 + "tag": "v1.0.6",
  44 + "commit": "e0465d41019cf03827f4820a254ce80e56266e99"
45 45 },
46 46 "_source": "git://github.com/PolymerElements/iron-autogrow-textarea.git",
47 47 "_target": "^1.0.0",
... ...
bower_components/iron-autogrow-textarea/.gitignore 100755 โ†’ 100644
bower_components/iron-autogrow-textarea/README.md 100755 โ†’ 100644
... ... @@ -6,19 +6,7 @@ never scroll.
6 6  
7 7 Example:
8 8  
9   - <iron-autogrow-textarea id="a1">
10   - <textarea id="t1"></textarea>
11   - </iron-autogrow-textarea>
  9 + <iron-autogrow-textarea></iron-autogrow-textarea>
12 10  
13 11 Because the `textarea`'s `value` property is not observable, you should use
14   -this element's `bind-value` instead for imperative updates. Alternatively, if
15   -you do set the `textarea`'s `value` imperatively, you must also call `update`
16   -to notify this element the value has changed.
17   -
18   - Example:
19   - /* preferred, using the example HTML above*/
20   - a1.bindValue = 'some\ntext';
21   -
22   - /* alternatively, */
23   - t1.value = 'some\ntext';
24   - a1.update();
  12 +this element's `bind-value` instead for imperative updates.
... ...
bower_components/iron-autogrow-textarea/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-autogrow-textarea",
3   - "version": "1.0.3",
  3 + "version": "1.0.6",
4 4 "description": "A textarea element that automatically grows with input",
5 5 "authors": [
6 6 "The Polymer Authors"
... ...
bower_components/iron-autogrow-textarea/demo/index.html 100755 โ†’ 100644
bower_components/iron-autogrow-textarea/index.html 100755 โ†’ 100644
bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html 100755 โ†’ 100644
... ... @@ -21,9 +21,7 @@ never scroll.
21 21  
22 22 Example:
23 23  
24   - <iron-autogrow-textarea id="a1">
25   - <textarea id="t1"></textarea>
26   - </iron-autogrow-textarea>
  24 + <iron-autogrow-textarea></iron-autogrow-textarea>
27 25  
28 26 Because the `textarea`'s `value` property is not observable, you should use
29 27 this element's `bind-value` instead for imperative updates.
... ... @@ -63,6 +61,7 @@ this element&#39;s `bind-value` instead for imperative updates.
63 61 height: 100%;
64 62 font-size: inherit;
65 63 font-family: inherit;
  64 + line-height: inherit;
66 65 }
67 66  
68 67 ::content textarea:invalid {
... ... @@ -150,8 +149,8 @@ this element&#39;s `bind-value` instead for imperative updates.
150 149 * Bound to the textarea's `autofocus` attribute.
151 150 */
152 151 autofocus: {
153   - type: String,
154   - value: 'off'
  152 + type: Boolean,
  153 + value: false
155 154 },
156 155  
157 156 /**
... ... @@ -220,6 +219,36 @@ this element&#39;s `bind-value` instead for imperative updates.
220 219 },
221 220  
222 221 /**
  222 + * Returns textarea's selection start.
  223 + * @type Number
  224 + */
  225 + get selectionStart() {
  226 + return this.$.textarea.selectionStart;
  227 + },
  228 +
  229 + /**
  230 + * Returns textarea's selection end.
  231 + * @type Number
  232 + */
  233 + get selectionEnd() {
  234 + return this.$.textarea.selectionEnd;
  235 + },
  236 +
  237 + /**
  238 + * Sets the textarea's selection start.
  239 + */
  240 + set selectionStart(value) {
  241 + this.$.textarea.selectionStart = value;
  242 + },
  243 +
  244 + /**
  245 + * Sets the textarea's selection end.
  246 + */
  247 + set selectionEnd(value) {
  248 + this.$.textarea.selectionEnd = value;
  249 + },
  250 +
  251 + /**
223 252 * Returns true if `value` is valid. The validator provided in `validator`
224 253 * will be used first, if it exists; otherwise, the `textarea`'s validity
225 254 * is used.
... ... @@ -243,17 +272,6 @@ this element&#39;s `bind-value` instead for imperative updates.
243 272 return valid;
244 273 },
245 274  
246   - _update: function() {
247   - this.$.mirror.innerHTML = this._valueForMirror();
248   -
249   - var textarea = this.textarea;
250   - // If the value of the textarea was updated imperatively, then we
251   - // need to manually update bindValue as well.
252   - if (textarea && this.bindValue != textarea.value) {
253   - this.bindValue = textarea.value;
254   - }
255   - },
256   -
257 275 _bindValueChanged: function() {
258 276 var textarea = this.textarea;
259 277 if (!textarea) {
... ... @@ -261,14 +279,13 @@ this element&#39;s `bind-value` instead for imperative updates.
261 279 }
262 280  
263 281 textarea.value = this.bindValue;
264   - this._update();
  282 + this.$.mirror.innerHTML = this._valueForMirror();
265 283 // manually notify because we don't want to notify until after setting value
266 284 this.fire('bind-value-changed', {value: this.bindValue});
267 285 },
268 286  
269 287 _onInput: function(event) {
270 288 this.bindValue = event.path ? event.path[0].value : event.target.value;
271   - this._update();
272 289 },
273 290  
274 291 _constrain: function(tokens) {
... ... @@ -302,5 +319,5 @@ this element&#39;s `bind-value` instead for imperative updates.
302 319 _computeValue: function() {
303 320 return this.bindValue;
304 321 }
305   - })
  322 + });
306 323 </script>
... ...
bower_components/iron-autogrow-textarea/test/basic.html 100755 โ†’ 100644
... ... @@ -87,6 +87,18 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
87 87 var finalHeight = autogrow.offsetHeight
88 88 assert.isTrue(finalHeight < initialHeight);
89 89 });
  90 +
  91 + test('textarea selection works', function() {
  92 + var autogrow = fixture('basic');
  93 + var textarea = autogrow.textarea;
  94 + autogrow.bindValue = 'batman\nand\nrobin';
  95 +
  96 + autogrow.selectionStart = 3;
  97 + autogrow.selectionEnd = 5;
  98 +
  99 + assert.equal(textarea.selectionStart, 3);
  100 + assert.equal(textarea.selectionEnd, 5);
  101 + });
90 102 });
91 103  
92 104 suite('focus/blur events', function() {
... ...
bower_components/iron-autogrow-textarea/test/index.html 100755 โ†’ 100644
bower_components/iron-collapse/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-collapse",
3   - "version": "1.0.2",
  3 + "version": "1.0.3",
4 4 "description": "Provides a collapsable container",
5 5 "authors": [
6 6 "The Polymer Authors"
... ... @@ -28,11 +28,11 @@
28 28 "paper-styles": "PolymerElements/paper-styles#^1.0.0",
29 29 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
30 30 },
31   - "_release": "1.0.2",
  31 + "_release": "1.0.3",
32 32 "_resolution": {
33 33 "type": "version",
34   - "tag": "v1.0.2",
35   - "commit": "0b0228632fa005a57664d3bda8dbe14c89bec942"
  34 + "tag": "v1.0.3",
  35 + "commit": "08716fe08adec031ecbcfffd1811d27fea2f82ad"
36 36 },
37 37 "_source": "git://github.com/PolymerElements/iron-collapse.git",
38 38 "_target": "^1.0.0",
... ...
bower_components/iron-collapse/.gitignore 100755 โ†’ 100644
bower_components/iron-collapse/README.md 100755 โ†’ 100644
bower_components/iron-collapse/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-collapse",
3   - "version": "1.0.2",
  3 + "version": "1.0.3",
4 4 "description": "Provides a collapsable container",
5 5 "authors": [
6 6 "The Polymer Authors"
... ...
bower_components/iron-collapse/demo/index.html 100755 โ†’ 100644
bower_components/iron-collapse/index.html 100755 โ†’ 100644
bower_components/iron-collapse/iron-collapse.html 100755 โ†’ 100644
... ... @@ -14,7 +14,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
14 14 `iron-collapse` creates a collapsible block of content. By default, the content
15 15 will be collapsed. Use `opened` or `toggle()` to show/hide the content.
16 16  
17   - <button on-click="{{toggle}}">toggle collapse</button>
  17 + <button on-click="toggle">toggle collapse</button>
18 18  
19 19 <iron-collapse id="collapse">
20 20 <div>Content goes here...</div>
... ... @@ -134,21 +134,11 @@ and instead put a div inside and style that.
134 134 },
135 135  
136 136 show: function() {
137   - this.toggleClass('iron-collapse-closed', false);
138   - this.updateSize('auto', false);
139   - var s = this._calcSize();
140   - this.updateSize('0px', false);
141   - // force layout to ensure transition will go
142   - this.offsetHeight;
143   - this.updateSize(s, true);
  137 + this.opened = true;
144 138 },
145 139  
146 140 hide: function() {
147   - this.toggleClass('iron-collapse-opened', false);
148   - this.updateSize(this._calcSize(), false);
149   - // force layout to ensure transition will go
150   - this.offsetHeight;
151   - this.updateSize('0px', true);
  141 + this.opened = false;
152 142 },
153 143  
154 144 updateSize: function(size, animated) {
... ... @@ -171,7 +161,22 @@ and instead put a div inside and style that.
171 161 },
172 162  
173 163 _openedChanged: function() {
174   - this[this.opened ? 'show' : 'hide']();
  164 + if (this.opened) {
  165 + this.toggleClass('iron-collapse-closed', false);
  166 + this.updateSize('auto', false);
  167 + var s = this._calcSize();
  168 + this.updateSize('0px', false);
  169 + // force layout to ensure transition will go
  170 + /** @suppress {suspiciousCode} */ this.offsetHeight;
  171 + this.updateSize(s, true);
  172 + }
  173 + else {
  174 + this.toggleClass('iron-collapse-opened', false);
  175 + this.updateSize(this._calcSize(), false);
  176 + // force layout to ensure transition will go
  177 + /** @suppress {suspiciousCode} */ this.offsetHeight;
  178 + this.updateSize('0px', true);
  179 + }
175 180 this.setAttribute('aria-expanded', this.opened ? 'true' : 'false');
176 181  
177 182 },
... ...
bower_components/iron-collapse/test/basic.html 100755 โ†’ 100644
bower_components/iron-collapse/test/horizontal.html 100755 โ†’ 100644
bower_components/iron-collapse/test/index.html 100755 โ†’ 100644
bower_components/iron-doc-viewer/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-doc-viewer",
3   - "version": "1.0.3",
  3 + "version": "1.0.6",
4 4 "authors": [
5 5 "The Polymer Authors"
6 6 ],
... ... @@ -34,11 +34,11 @@
34 34 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
35 35 "web-component-tester": "*"
36 36 },
37   - "_release": "1.0.3",
  37 + "_release": "1.0.6",
38 38 "_resolution": {
39 39 "type": "version",
40   - "tag": "v1.0.3",
41   - "commit": "034967a91951954b1de9f01559093b15b3b9c86d"
  40 + "tag": "v1.0.6",
  41 + "commit": "70dd8aabd19ed3c034adea9b0d39dc0456b0b923"
42 42 },
43 43 "_source": "git://github.com/PolymerElements/iron-doc-viewer.git",
44 44 "_target": "^1.0.1",
... ...
bower_components/iron-doc-viewer/README.md 100755 โ†’ 100644
bower_components/iron-doc-viewer/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-doc-viewer",
3   - "version": "1.0.3",
  3 + "version": "1.0.6",
4 4 "authors": [
5 5 "The Polymer Authors"
6 6 ],
... ...
bower_components/iron-doc-viewer/demo/index.html 100755 โ†’ 100644
bower_components/iron-doc-viewer/index.html 100755 โ†’ 100644
bower_components/iron-doc-viewer/iron-doc-property.css 100755 โ†’ 100644
... ... @@ -24,7 +24,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
24 24 #transitionMask {
25 25 position: relative;
26 26 overflow: hidden;
27   - padding-left: 160px;
28 27 }
29 28  
30 29 [hidden] {
... ... @@ -36,9 +35,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
36 35 width: 160px;
37 36 overflow: hidden;
38 37 text-overflow: ellipsis;
39   - position: absolute;
40   - left: 0;
41   - top: 0;
  38 + float: left;
42 39 }
43 40  
44 41 #signature .name {
... ... @@ -47,7 +44,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
47 44  
48 45 :host([function]) #signature {
49 46 position: static;
50   - margin-left: -160px;
51 47 width: 100%;
52 48 }
53 49  
... ... @@ -60,9 +56,16 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
60 56 }
61 57  
62 58 #details {
  59 + margin-left: 160px;
63 60 flex: 1;
64 61 }
65 62  
  63 +@media (max-width: 500px) {
  64 + #details {
  65 + margin-left: 0;
  66 + }
  67 +}
  68 +
66 69 /* Metadata */
67 70  
68 71 #meta {
... ... @@ -107,7 +110,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
107 110 #params marked-element {
108 111 display: inline-block;
109 112 }
110   -#params marked-element::shadow #content p {
  113 +#params .markdown-html p {
111 114 margin: 0;
112 115 }
113 116  
... ... @@ -117,15 +120,15 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
117 120 display: block;
118 121 }
119 122  
120   -#desc::shadow #content > :first-child {
  123 +#desc .markdown-html > :first-child {
121 124 margin-top: 0;
122 125 }
123 126  
124   -#desc::shadow #content > :last-child {
  127 +#desc .markdown-html > :last-child {
125 128 margin-bottom: 0;
126 129 }
127 130  
128   -#desc::shadow #content #content code {
  131 +#desc .markdown-html code {
129 132 @apply(--paper-font-code1);
130 133 }
131 134  
... ...
bower_components/iron-doc-viewer/iron-doc-property.html 100755 โ†’ 100644
... ... @@ -38,15 +38,21 @@ Give it a hydrolysis `PropertyDescriptor` (via `descriptor`), and watch it go!
38 38 <li hidden$="{{!item.type}}">
39 39 <span class="name">{{item.name}}</span>
40 40 <span class="type">{{item.type}}</span>
41   - <marked-element markdown="{{item.desc}}"></marked-element>
  41 + <marked-element markdown="{{item.desc}}">
  42 + <div class="markdown-html"></div>
  43 + </marked-element>
42 44 </li>
43 45 </template>
44 46 <li class="return" hidden$="{{!descriptor.return}}">Returns
45 47 <span class="type">{{descriptor.return.type}}</span>
46   - <marked-element markdown="{{descriptor.return.desc}}"></marked-element>
  48 + <marked-element markdown="{{descriptor.return.desc}}">
  49 + <div class="markdown-html"></div>
  50 + </marked-element>
47 51 </li>
48 52 </ol>
49   - <marked-element id="desc" markdown="{{descriptor.desc}}" hidden$="{{!descriptor.desc}}"></marked-element>
  53 + <marked-element id="desc" markdown="{{descriptor.desc}}" hidden$="{{!descriptor.desc}}">
  54 + <div class="markdown-html"></div>
  55 + </marked-element>
50 56 </div>
51 57 </div>
52 58 </template>
... ...
bower_components/iron-doc-viewer/iron-doc-viewer.css 100755 โ†’ 100644
... ... @@ -45,61 +45,62 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
45 45 padding: 4px 0;
46 46 }
47 47  
48   -#summary marked-element::shadow #content pre {
  48 +#summary .markdown-html pre {
49 49 background-color: var(--paper-grey-50);
50 50 border: solid #e5e5e5;
51 51 border-width: 1px 0;
52 52 overflow-x: auto;
53 53 padding: 12px 24px;
54 54 font-size: 15px;
  55 + word-wrap: break-word;
55 56 }
56 57  
57   -#summary marked-element::shadow #content table {
  58 +#summary .markdown-html table {
58 59 width: 100%;
59 60 border-collapse: collapse;
60 61 margin: 12px 0;
61 62 border-top: 1px solid #e5e5e5;
62 63 }
63 64  
64   -#summary marked-element::shadow #content tr {
  65 +#summary .markdown-html tr {
65 66 border-bottom: 1px solid #e5e5e5;
66 67 padding: 0 18px;
67 68 }
68 69  
69   -#summary marked-element::shadow #content td,
70   -#summary marked-element::shadow #content th {
  70 +#summary .markdown-html td,
  71 +#summary .markdown-html th {
71 72 padding: 6px 12px;
72 73 }
73 74  
74   -#summary marked-element::shadow #content td:first-child,
75   -#summary marked-element::shadow #content th:first-child {
  75 +#summary .markdown-html td:first-child,
  76 +#summary .markdown-html th:first-child {
76 77 padding-left: 24px;
77 78 }
78 79  
79   -#summary marked-element::shadow #content td:last-child,
80   -#summary marked-element::shadow #content th:last-child {
  80 +#summary .markdown-html td:last-child,
  81 +#summary .markdown-html th:last-child {
81 82 padding-right: 24px;
82 83 }
83 84  
84   -#summary marked-element::shadow #content code {
  85 +#summary .markdown-html code {
85 86 @apply(--paper-font-code1);
86 87 }
87 88  
88   -#summary marked-element::shadow #content p {
  89 +#summary .markdown-html p {
89 90 padding: 0 24px;
90 91 }
91 92  
92   -#summary marked-element::shadow #content a {
  93 +#summary .markdown-html a {
93 94 color: var(--paper-indigo-a200);
94 95 font-weight: 500;
95 96 text-decoration: none;
96 97 }
97 98  
98   -#summary marked-element::shadow #content h1,
99   -#summary marked-element::shadow #content h2,
100   -#summary marked-element::shadow #content h3,
101   -#summary marked-element::shadow #content h4,
102   -#summary marked-element::shadow #content h5 {
  99 +#summary .markdown-html h1,
  100 +#summary .markdown-html h2,
  101 +#summary .markdown-html h3,
  102 +#summary .markdown-html h4,
  103 +#summary .markdown-html h5 {
103 104 padding: 0 18px;
104 105 }
105 106  
... ... @@ -148,4 +149,3 @@ iron-doc-property[configuration] {
148 149 padding: 16px 24px;
149 150 cursor: pointer;
150 151 }
151   -
... ...
bower_components/iron-doc-viewer/iron-doc-viewer.html 100755 โ†’ 100644
... ... @@ -8,7 +8,9 @@ Code distributed by Google as part of the polymer project is also
8 8 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
9 9 -->
10 10 <link rel="import" href="../marked-element/marked-element.html">
11   -<link rel="import" href="../paper-styles/paper-styles.html">
  11 +<link rel="import" href="../paper-styles/typography.html">
  12 +<link rel="import" href="../paper-styles/shadow.html">
  13 +<link rel="import" href="../paper-styles/color.html">
12 14 <link rel="import" href="../paper-button/paper-button.html">
13 15 <link rel="import" href="../polymer/polymer.html">
14 16 <link rel="import" href="../prism-element/prism-highlighter.html">
... ... @@ -52,7 +54,9 @@ property.
52 54  
53 55 <section id="summary" class="card" hidden$="[[!descriptor.desc]]">
54 56 <header>Documentation</header>
55   - <marked-element markdown="{{descriptor.desc}}"></marked-element>
  57 + <marked-element markdown="{{descriptor.desc}}">
  58 + <div class="markdown-html"></div>
  59 + </marked-element>
56 60 </section>
57 61  
58 62 <nav id="api">
... ...
bower_components/iron-doc-viewer/test/index.html 100755 โ†’ 100644
bower_components/iron-doc-viewer/test/iron-doc-viewer.html 100755 โ†’ 100644
... ... @@ -106,12 +106,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
106 106  
107 107 describe('edge cases', function() {
108 108  
109   - // TODO(nevir): Cannot enable until https://github.com/Polymer/polymer/issues/1200
110   - it.skip('throws when a bound and JSON descriptor are provided', function() {
111   - expect(function() {
112   - fixture('json-and-bound', {descriptor: ELEMENT});
113   - }).to.throw(Error, /descriptor/i);
114   - });
  109 + // // TODO(nevir): Cannot enable until https://github.com/Polymer/polymer/issues/1200
  110 + // it.skip('throws when a bound and JSON descriptor are provided', function() {
  111 + // expect(function() {
  112 + // fixture('json-and-bound', {descriptor: ELEMENT});
  113 + // }).to.throw(Error, /descriptor/i);
  114 + // });
115 115  
116 116 });
117 117  
... ...
bower_components/iron-dropdown/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-dropdown",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "",
5 5 "authors": [
6 6 "The Polymer Authors"
... ... @@ -35,13 +35,13 @@
35 35 "web-component-tester": "*",
36 36 "iron-image": "polymerelements/iron-image#^1.0.0"
37 37 },
38   - "_release": "1.0.5",
  38 + "_release": "1.0.6",
39 39 "_resolution": {
40 40 "type": "version",
41   - "tag": "v1.0.5",
42   - "commit": "9c300a14a5aeca1c02f085e9117521af814ce640"
  41 + "tag": "v1.0.6",
  42 + "commit": "9b52ccb37577b0e4b3d34f3795117d95648b39ff"
43 43 },
44   - "_source": "git://github.com/PolymerElements/iron-dropdown.git",
  44 + "_source": "git://github.com/polymerelements/iron-dropdown.git",
45 45 "_target": "^1.0.0",
46   - "_originalSource": "PolymerElements/iron-dropdown"
  46 + "_originalSource": "polymerelements/iron-dropdown"
47 47 }
48 48 \ No newline at end of file
... ...
bower_components/iron-dropdown/.gitignore 100755 โ†’ 100644
bower_components/iron-dropdown/README.md 100755 โ†’ 100644
bower_components/iron-dropdown/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-dropdown",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "",
5 5 "authors": [
6 6 "The Polymer Authors"
... ...
bower_components/iron-dropdown/demo/grow-height-animation.html 100755 โ†’ 100644
bower_components/iron-dropdown/demo/index.html 100755 โ†’ 100644
bower_components/iron-dropdown/demo/x-select.html 100755 โ†’ 100644
bower_components/iron-dropdown/index.html 100755 โ†’ 100644
bower_components/iron-dropdown/iron-dropdown-scroll-manager.html 100755 โ†’ 100644
bower_components/iron-dropdown/iron-dropdown.html 100755 โ†’ 100644
... ... @@ -163,6 +163,17 @@ method is called on the element.
163 163 },
164 164  
165 165 /**
  166 + * By default, the dropdown will constrain scrolling on the page
  167 + * to itself when opened.
  168 + * Set to true in order to prevent scroll from being constrained
  169 + * to the dropdown when it opens.
  170 + */
  171 + allowOutsideScroll: {
  172 + type: Boolean,
  173 + value: false
  174 + },
  175 +
  176 + /**
166 177 * We memoize the positionTarget bounding rectangle so that we can
167 178 * limit the number of times it is queried per resize / relayout.
168 179 * @type {?Object}
... ... @@ -282,7 +293,10 @@ method is called on the element.
282 293 * Overridden from `IronOverlayBehavior`.
283 294 */
284 295 _renderOpened: function() {
285   - Polymer.IronDropdownScrollManager.pushScrollLock(this);
  296 + if (!this.allowOutsideScroll) {
  297 + Polymer.IronDropdownScrollManager.pushScrollLock(this);
  298 + }
  299 +
286 300 if (!this.noAnimations && this.animationConfig && this.animationConfig.open) {
287 301 this.$.contentWrapper.classList.add('animating');
288 302 this.playAnimation('open');
... ...
bower_components/iron-dropdown/test/index.html 100755 โ†’ 100644
bower_components/iron-dropdown/test/iron-dropdown-scroll-manager.html 100755 โ†’ 100644
bower_components/iron-dropdown/test/iron-dropdown.html 100755 โ†’ 100644
... ... @@ -33,6 +33,14 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
33 33 </template>
34 34 </test-fixture>
35 35  
  36 + <test-fixture id="NonLockingDropdown">
  37 + <template>
  38 + <iron-dropdown>
  39 + <div class="dropdown-content" allow-outside-scroll>I don't lock scroll!</div>
  40 + </iron-dropdown>
  41 + </template>
  42 + </test-fixture>
  43 +
36 44 <test-fixture id="AlignedDropdown">
37 45 <template>
38 46 <div style="display: block; position: relative; width: 100px; height: 100px;">
... ... @@ -131,6 +139,21 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
131 139 });
132 140 });
133 141  
  142 + suite('locking scroll', function() {
  143 + var dropdown;
  144 +
  145 + setup(function() {
  146 + dropdown = fixture('NonLockingDropdown');
  147 + });
  148 +
  149 + test('can be disabled with `allowOutsideScroll`', function() {
  150 + dropdown.open();
  151 +
  152 + expect(Polymer.IronDropdownScrollManager.elementIsScrollLocked(document.body))
  153 + .to.be.equal(false);
  154 + });
  155 + });
  156 +
134 157 suite('aligned dropdown', function() {
135 158 var parent;
136 159 setup(function() {
... ...
bower_components/iron-elements/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-elements",
3   - "version": "1.0.2",
  3 + "version": "1.0.4",
4 4 "description": "A set of visual and non-visual utility elements. Includes elements for working with layout, user input, selection, and scaffolding apps",
5 5 "keywords": [
6 6 "web-components",
... ... @@ -20,9 +20,11 @@
20 20 "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
21 21 "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.0",
22 22 "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
  23 + "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
23 24 "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
24 25 "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
25 26 "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.0",
  27 + "iron-dropdown": "PolymerElements/iron-dropdown#^1.0.0",
26 28 "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0",
27 29 "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
28 30 "iron-form": "PolymerElements/iron-form#^1.0.0",
... ... @@ -61,11 +63,11 @@
61 63 "test",
62 64 "tests"
63 65 ],
64   - "_release": "1.0.2",
  66 + "_release": "1.0.4",
65 67 "_resolution": {
66 68 "type": "version",
67   - "tag": "v1.0.2",
68   - "commit": "63d565ea42faa4e80b266dad1f879c6ff5bf4600"
  69 + "tag": "v1.0.4",
  70 + "commit": "c9b524fef9bd71a3cb3616eb61dcee266258b7d0"
69 71 },
70 72 "_source": "git://github.com/polymerelements/iron-elements.git",
71 73 "_target": "~1.0.1",
... ...
bower_components/iron-elements/README.md 100755 โ†’ 100644
... ... @@ -6,12 +6,12 @@ Basic building blocks for creating an application. Most of the `iron` elements w
6 6  
7 7 ### Elements in progress
8 8  
9   -* `iron-list` - the upgraded version of a virtualized infinite list, previously named `core-list`. ETA: Couple weeks.
  9 +_No `iron-elements` are currently in progress. [`iron-list`](https://github.com/polymerelements/iron-list) was the most recent to be released._
10 10  
11 11 ### Elements planned
12 12 _Elements we're planning on building soon but haven't started yet_
13 13  
14   -* `iron-label` - still looking for the right way to bring what used to be `core-label` into the 1.0 world.
  14 +* `iron-label` - still looking for the right way to bring what used to be `core-label` into the 1.0 world.
15 15  
16 16 ### Elements not planned, notably
17 17 _Elements we're not planning on building as part of this product line, but that one might be wondering about_
... ... @@ -30,5 +30,5 @@ A number of elements existed as `core` elements that are not in this product lin
30 30 * `core-scroll-header-panel` - This had UI opinion, so it's been moved to [`paper-scroll-header-panel`](https://github.com/polymerelements/paper-scroll-header-panel).
31 31 * `core-splitter` - This element was relatively trivial, so we've put it off for now.
32 32 * `core-style` - This element is not useful with Polymer's new styling system. Check out the latest docs for more.
33   -* `core-tooltip` - This will become `paper-tooltip`.
34   -* `core-menu` - This had UI opinion, and will become `paper-dropdown-menu`.
  33 +* `core-tooltip` - This has become `paper-tooltip`.
  34 +* `core-menu` - This had UI opinion, and has become `paper-dropdown-menu`.
... ...
bower_components/iron-elements/bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-elements",
3   - "version": "1.0.1",
  3 + "version": "1.0.4",
4 4 "description": "A set of visual and non-visual utility elements. Includes elements for working with layout, user input, selection, and scaffolding apps",
5 5 "keywords": [
6 6 "web-components",
... ... @@ -20,9 +20,11 @@
20 20 "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
21 21 "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.0",
22 22 "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
  23 + "iron-checked-element-behavior" : "PolymerElements/iron-checked-element-behavior#^1.0.0",
23 24 "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
24 25 "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
25 26 "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.0",
  27 + "iron-dropdown": "PolymerElements/iron-dropdown#^1.0.0",
26 28 "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0",
27 29 "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
28 30 "iron-form": "PolymerElements/iron-form#^1.0.0",
... ...
bower_components/iron-flex-layout/.bower.json 100755 โ†’ 100644
1 1 {
2 2 "name": "iron-flex-layout",
3   - "version": "1.0.3",
  3 + "version": "1.0.4",
4 4 "description": "Provide flexbox-based layouts",
5 5 "keywords": [
6 6 "web-components",
7 7 "polymer",
8 8 "layout"
9 9 ],
  10 + "main": "iron-flex-layout.html",
10 11 "private": true,
11 12 "license": "http://polymer.github.io/LICENSE.txt",
12 13 "authors": [
... ... @@ -21,14 +22,15 @@
21 22 },
22 23 "devDependencies": {
23 24 "paper-styles": "polymerelements/paper-styles#^1.0.0",
24   - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
  25 + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
  26 + "iron-component-page": "polymerelements/iron-component-page#^1.0.0"
25 27 },
26 28 "homepage": "https://github.com/PolymerElements/iron-flex-layout",
27   - "_release": "1.0.3",
  29 + "_release": "1.0.4",
28 30 "_resolution": {
29 31 "type": "version",
30   - "tag": "v1.0.3",
31   - "commit": "e6c2cfec18354973ac03e70dcd8afcc3c72d09b9"
  32 + "tag": "v1.0.4",
  33 + "commit": "dcfc54b0d358269bf0c72180b4ab090fc4931ecd"
32 34 },
33 35 "_source": "git://github.com/PolymerElements/iron-flex-layout.git",
34 36 "_target": "^1.0.0",
... ...