UNPKG

83.1 kBJavaScriptView Raw
1import ts from 'typescript';
2export function isPrimaryExpression(node) {
3 switch (node.kind) {
4 case ts.SyntaxKind.Identifier:
5 case ts.SyntaxKind.StringLiteral:
6 case ts.SyntaxKind.NullKeyword:
7 case ts.SyntaxKind.TrueKeyword:
8 case ts.SyntaxKind.FalseKeyword:
9 case ts.SyntaxKind.ThisKeyword:
10 case ts.SyntaxKind.SuperKeyword:
11 case ts.SyntaxKind.ImportKeyword:
12 case ts.SyntaxKind.FunctionExpression:
13 case ts.SyntaxKind.RegularExpressionLiteral:
14 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
15 case ts.SyntaxKind.NumericLiteral:
16 case ts.SyntaxKind.TemplateExpression:
17 case ts.SyntaxKind.ParenthesizedExpression:
18 case ts.SyntaxKind.ArrayLiteralExpression:
19 case ts.SyntaxKind.ObjectLiteralExpression:
20 case ts.SyntaxKind.NewExpression:
21 case ts.SyntaxKind.MetaProperty:
22 case ts.SyntaxKind.JsxElement:
23 case ts.SyntaxKind.JsxSelfClosingElement:
24 case ts.SyntaxKind.JsxFragment:
25 case ts.SyntaxKind.ClassExpression:
26 return true;
27 default:
28 return false;
29 }
30}
31export function isDeclaration(node) {
32 switch (node.kind) {
33 case ts.SyntaxKind.Identifier:
34 case ts.SyntaxKind.TypeParameter:
35 case ts.SyntaxKind.CallSignature:
36 case ts.SyntaxKind.ConstructSignature:
37 case ts.SyntaxKind.VariableDeclaration:
38 case ts.SyntaxKind.Parameter:
39 case ts.SyntaxKind.BindingElement:
40 case ts.SyntaxKind.PropertySignature:
41 case ts.SyntaxKind.PropertyDeclaration:
42 case ts.SyntaxKind.PropertyAssignment:
43 case ts.SyntaxKind.ShorthandPropertyAssignment:
44 case ts.SyntaxKind.SpreadAssignment:
45 case ts.SyntaxKind.FunctionDeclaration:
46 case ts.SyntaxKind.MethodSignature:
47 case ts.SyntaxKind.MethodDeclaration:
48 case ts.SyntaxKind.Constructor:
49 case ts.SyntaxKind.SemicolonClassElement:
50 case ts.SyntaxKind.GetAccessor:
51 case ts.SyntaxKind.SetAccessor:
52 case ts.SyntaxKind.IndexSignature:
53 case ts.SyntaxKind.FunctionType:
54 case ts.SyntaxKind.ConstructorType:
55 case ts.SyntaxKind.TypeLiteral:
56 case ts.SyntaxKind.MappedType:
57 case ts.SyntaxKind.BinaryExpression:
58 case ts.SyntaxKind.FunctionExpression:
59 case ts.SyntaxKind.ArrowFunction:
60 case ts.SyntaxKind.ObjectLiteralExpression:
61 case ts.SyntaxKind.PropertyAccessExpression:
62 case ts.SyntaxKind.CallExpression:
63 case ts.SyntaxKind.NewExpression:
64 case ts.SyntaxKind.JsxAttribute:
65 case ts.SyntaxKind.JsxSpreadAttribute:
66 case ts.SyntaxKind.MissingDeclaration:
67 case ts.SyntaxKind.ClassDeclaration:
68 case ts.SyntaxKind.ClassExpression:
69 case ts.SyntaxKind.InterfaceDeclaration:
70 case ts.SyntaxKind.TypeAliasDeclaration:
71 case ts.SyntaxKind.EnumMember:
72 case ts.SyntaxKind.EnumDeclaration:
73 case ts.SyntaxKind.ModuleDeclaration:
74 case ts.SyntaxKind.ImportEqualsDeclaration:
75 case ts.SyntaxKind.ImportClause:
76 case ts.SyntaxKind.NamespaceImport:
77 case ts.SyntaxKind.NamespaceExportDeclaration:
78 case ts.SyntaxKind.ExportDeclaration:
79 case ts.SyntaxKind.ImportSpecifier:
80 case ts.SyntaxKind.ExportSpecifier:
81 case ts.SyntaxKind.ExportAssignment:
82 case ts.SyntaxKind.JSDocFunctionType:
83 case ts.SyntaxKind.JSDocTypedefTag:
84 case ts.SyntaxKind.JSDocCallbackTag:
85 case ts.SyntaxKind.JSDocSignature:
86 case ts.SyntaxKind.JSDocPropertyTag:
87 case ts.SyntaxKind.JSDocParameterTag:
88 case ts.SyntaxKind.SourceFile:
89 return true;
90 default:
91 return false;
92 }
93}
94export function isMemberExpression(node) {
95 switch (node.kind) {
96 case ts.SyntaxKind.Identifier:
97 case ts.SyntaxKind.StringLiteral:
98 case ts.SyntaxKind.NullKeyword:
99 case ts.SyntaxKind.TrueKeyword:
100 case ts.SyntaxKind.FalseKeyword:
101 case ts.SyntaxKind.ThisKeyword:
102 case ts.SyntaxKind.SuperKeyword:
103 case ts.SyntaxKind.ImportKeyword:
104 case ts.SyntaxKind.FunctionExpression:
105 case ts.SyntaxKind.RegularExpressionLiteral:
106 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
107 case ts.SyntaxKind.NumericLiteral:
108 case ts.SyntaxKind.TemplateExpression:
109 case ts.SyntaxKind.ParenthesizedExpression:
110 case ts.SyntaxKind.ArrayLiteralExpression:
111 case ts.SyntaxKind.ObjectLiteralExpression:
112 case ts.SyntaxKind.PropertyAccessExpression:
113 case ts.SyntaxKind.ElementAccessExpression:
114 case ts.SyntaxKind.NewExpression:
115 case ts.SyntaxKind.TaggedTemplateExpression:
116 case ts.SyntaxKind.MetaProperty:
117 case ts.SyntaxKind.JsxElement:
118 case ts.SyntaxKind.JsxSelfClosingElement:
119 case ts.SyntaxKind.JsxFragment:
120 case ts.SyntaxKind.ClassExpression:
121 return true;
122 default:
123 return false;
124 }
125}
126export function isLeftHandSideExpression(node) {
127 switch (node.kind) {
128 case ts.SyntaxKind.Identifier:
129 case ts.SyntaxKind.StringLiteral:
130 case ts.SyntaxKind.PartiallyEmittedExpression:
131 case ts.SyntaxKind.NullKeyword:
132 case ts.SyntaxKind.TrueKeyword:
133 case ts.SyntaxKind.FalseKeyword:
134 case ts.SyntaxKind.ThisKeyword:
135 case ts.SyntaxKind.SuperKeyword:
136 case ts.SyntaxKind.ImportKeyword:
137 case ts.SyntaxKind.FunctionExpression:
138 case ts.SyntaxKind.RegularExpressionLiteral:
139 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
140 case ts.SyntaxKind.NumericLiteral:
141 case ts.SyntaxKind.TemplateExpression:
142 case ts.SyntaxKind.ParenthesizedExpression:
143 case ts.SyntaxKind.ArrayLiteralExpression:
144 case ts.SyntaxKind.ObjectLiteralExpression:
145 case ts.SyntaxKind.PropertyAccessExpression:
146 case ts.SyntaxKind.ElementAccessExpression:
147 case ts.SyntaxKind.CallExpression:
148 case ts.SyntaxKind.NewExpression:
149 case ts.SyntaxKind.TaggedTemplateExpression:
150 case ts.SyntaxKind.NonNullExpression:
151 case ts.SyntaxKind.MetaProperty:
152 case ts.SyntaxKind.JsxElement:
153 case ts.SyntaxKind.JsxSelfClosingElement:
154 case ts.SyntaxKind.JsxFragment:
155 case ts.SyntaxKind.ClassExpression:
156 return true;
157 default:
158 return false;
159 }
160}
161export function isUpdateExpression(node) {
162 switch (node.kind) {
163 case ts.SyntaxKind.Identifier:
164 case ts.SyntaxKind.StringLiteral:
165 case ts.SyntaxKind.PartiallyEmittedExpression:
166 case ts.SyntaxKind.PrefixUnaryExpression:
167 case ts.SyntaxKind.PostfixUnaryExpression:
168 case ts.SyntaxKind.NullKeyword:
169 case ts.SyntaxKind.TrueKeyword:
170 case ts.SyntaxKind.FalseKeyword:
171 case ts.SyntaxKind.ThisKeyword:
172 case ts.SyntaxKind.SuperKeyword:
173 case ts.SyntaxKind.ImportKeyword:
174 case ts.SyntaxKind.FunctionExpression:
175 case ts.SyntaxKind.RegularExpressionLiteral:
176 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
177 case ts.SyntaxKind.NumericLiteral:
178 case ts.SyntaxKind.TemplateExpression:
179 case ts.SyntaxKind.ParenthesizedExpression:
180 case ts.SyntaxKind.ArrayLiteralExpression:
181 case ts.SyntaxKind.ObjectLiteralExpression:
182 case ts.SyntaxKind.PropertyAccessExpression:
183 case ts.SyntaxKind.ElementAccessExpression:
184 case ts.SyntaxKind.CallExpression:
185 case ts.SyntaxKind.NewExpression:
186 case ts.SyntaxKind.TaggedTemplateExpression:
187 case ts.SyntaxKind.NonNullExpression:
188 case ts.SyntaxKind.MetaProperty:
189 case ts.SyntaxKind.JsxElement:
190 case ts.SyntaxKind.JsxSelfClosingElement:
191 case ts.SyntaxKind.JsxFragment:
192 case ts.SyntaxKind.ClassExpression:
193 return true;
194 default:
195 return false;
196 }
197}
198export function isUnaryExpression(node) {
199 switch (node.kind) {
200 case ts.SyntaxKind.Identifier:
201 case ts.SyntaxKind.StringLiteral:
202 case ts.SyntaxKind.PartiallyEmittedExpression:
203 case ts.SyntaxKind.PrefixUnaryExpression:
204 case ts.SyntaxKind.PostfixUnaryExpression:
205 case ts.SyntaxKind.NullKeyword:
206 case ts.SyntaxKind.TrueKeyword:
207 case ts.SyntaxKind.FalseKeyword:
208 case ts.SyntaxKind.ThisKeyword:
209 case ts.SyntaxKind.SuperKeyword:
210 case ts.SyntaxKind.ImportKeyword:
211 case ts.SyntaxKind.DeleteExpression:
212 case ts.SyntaxKind.TypeOfExpression:
213 case ts.SyntaxKind.VoidExpression:
214 case ts.SyntaxKind.AwaitExpression:
215 case ts.SyntaxKind.FunctionExpression:
216 case ts.SyntaxKind.RegularExpressionLiteral:
217 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
218 case ts.SyntaxKind.NumericLiteral:
219 case ts.SyntaxKind.TemplateExpression:
220 case ts.SyntaxKind.ParenthesizedExpression:
221 case ts.SyntaxKind.ArrayLiteralExpression:
222 case ts.SyntaxKind.ObjectLiteralExpression:
223 case ts.SyntaxKind.PropertyAccessExpression:
224 case ts.SyntaxKind.ElementAccessExpression:
225 case ts.SyntaxKind.CallExpression:
226 case ts.SyntaxKind.NewExpression:
227 case ts.SyntaxKind.TaggedTemplateExpression:
228 case ts.SyntaxKind.TypeAssertionExpression:
229 case ts.SyntaxKind.NonNullExpression:
230 case ts.SyntaxKind.MetaProperty:
231 case ts.SyntaxKind.JsxElement:
232 case ts.SyntaxKind.JsxSelfClosingElement:
233 case ts.SyntaxKind.JsxFragment:
234 case ts.SyntaxKind.ClassExpression:
235 return true;
236 default:
237 return false;
238 }
239}
240export function isExpression(node) {
241 switch (node.kind) {
242 case ts.SyntaxKind.Identifier:
243 case ts.SyntaxKind.StringLiteral:
244 case ts.SyntaxKind.OmittedExpression:
245 case ts.SyntaxKind.PartiallyEmittedExpression:
246 case ts.SyntaxKind.PrefixUnaryExpression:
247 case ts.SyntaxKind.PostfixUnaryExpression:
248 case ts.SyntaxKind.NullKeyword:
249 case ts.SyntaxKind.TrueKeyword:
250 case ts.SyntaxKind.FalseKeyword:
251 case ts.SyntaxKind.ThisKeyword:
252 case ts.SyntaxKind.SuperKeyword:
253 case ts.SyntaxKind.ImportKeyword:
254 case ts.SyntaxKind.DeleteExpression:
255 case ts.SyntaxKind.TypeOfExpression:
256 case ts.SyntaxKind.VoidExpression:
257 case ts.SyntaxKind.AwaitExpression:
258 case ts.SyntaxKind.YieldExpression:
259 case ts.SyntaxKind.SyntheticExpression:
260 case ts.SyntaxKind.BinaryExpression:
261 case ts.SyntaxKind.ConditionalExpression:
262 case ts.SyntaxKind.FunctionExpression:
263 case ts.SyntaxKind.ArrowFunction:
264 case ts.SyntaxKind.RegularExpressionLiteral:
265 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
266 case ts.SyntaxKind.NumericLiteral:
267 case ts.SyntaxKind.TemplateExpression:
268 case ts.SyntaxKind.ParenthesizedExpression:
269 case ts.SyntaxKind.ArrayLiteralExpression:
270 case ts.SyntaxKind.SpreadElement:
271 case ts.SyntaxKind.ObjectLiteralExpression:
272 case ts.SyntaxKind.PropertyAccessExpression:
273 case ts.SyntaxKind.ElementAccessExpression:
274 case ts.SyntaxKind.CallExpression:
275 case ts.SyntaxKind.NewExpression:
276 case ts.SyntaxKind.TaggedTemplateExpression:
277 case ts.SyntaxKind.AsExpression:
278 case ts.SyntaxKind.TypeAssertionExpression:
279 case ts.SyntaxKind.NonNullExpression:
280 case ts.SyntaxKind.MetaProperty:
281 case ts.SyntaxKind.JsxElement:
282 case ts.SyntaxKind.JsxOpeningElement:
283 case ts.SyntaxKind.JsxSelfClosingElement:
284 case ts.SyntaxKind.JsxFragment:
285 case ts.SyntaxKind.JsxOpeningFragment:
286 case ts.SyntaxKind.JsxClosingFragment:
287 case ts.SyntaxKind.JsxExpression:
288 case ts.SyntaxKind.CommaListExpression:
289 case ts.SyntaxKind.ClassExpression:
290 return true;
291 default:
292 return false;
293 }
294}
295export function isNamedDeclaration(node) {
296 switch (node.kind) {
297 case ts.SyntaxKind.TypeParameter:
298 case ts.SyntaxKind.CallSignature:
299 case ts.SyntaxKind.ConstructSignature:
300 case ts.SyntaxKind.VariableDeclaration:
301 case ts.SyntaxKind.Parameter:
302 case ts.SyntaxKind.BindingElement:
303 case ts.SyntaxKind.PropertySignature:
304 case ts.SyntaxKind.PropertyDeclaration:
305 case ts.SyntaxKind.PropertyAssignment:
306 case ts.SyntaxKind.ShorthandPropertyAssignment:
307 case ts.SyntaxKind.SpreadAssignment:
308 case ts.SyntaxKind.FunctionDeclaration:
309 case ts.SyntaxKind.MethodSignature:
310 case ts.SyntaxKind.MethodDeclaration:
311 case ts.SyntaxKind.Constructor:
312 case ts.SyntaxKind.SemicolonClassElement:
313 case ts.SyntaxKind.GetAccessor:
314 case ts.SyntaxKind.SetAccessor:
315 case ts.SyntaxKind.IndexSignature:
316 case ts.SyntaxKind.FunctionType:
317 case ts.SyntaxKind.ConstructorType:
318 case ts.SyntaxKind.FunctionExpression:
319 case ts.SyntaxKind.ArrowFunction:
320 case ts.SyntaxKind.PropertyAccessExpression:
321 case ts.SyntaxKind.JsxAttribute:
322 case ts.SyntaxKind.JsxSpreadAttribute:
323 case ts.SyntaxKind.MissingDeclaration:
324 case ts.SyntaxKind.ClassDeclaration:
325 case ts.SyntaxKind.ClassExpression:
326 case ts.SyntaxKind.InterfaceDeclaration:
327 case ts.SyntaxKind.TypeAliasDeclaration:
328 case ts.SyntaxKind.EnumMember:
329 case ts.SyntaxKind.EnumDeclaration:
330 case ts.SyntaxKind.ModuleDeclaration:
331 case ts.SyntaxKind.ImportEqualsDeclaration:
332 case ts.SyntaxKind.ImportClause:
333 case ts.SyntaxKind.NamespaceImport:
334 case ts.SyntaxKind.NamespaceExportDeclaration:
335 case ts.SyntaxKind.ExportDeclaration:
336 case ts.SyntaxKind.ImportSpecifier:
337 case ts.SyntaxKind.ExportSpecifier:
338 case ts.SyntaxKind.ExportAssignment:
339 case ts.SyntaxKind.JSDocFunctionType:
340 case ts.SyntaxKind.JSDocTypedefTag:
341 case ts.SyntaxKind.JSDocCallbackTag:
342 return true;
343 default:
344 return false;
345 }
346}
347export function isDeclarationStatement(node) {
348 switch (node.kind) {
349 case ts.SyntaxKind.FunctionDeclaration:
350 case ts.SyntaxKind.MissingDeclaration:
351 case ts.SyntaxKind.ClassDeclaration:
352 case ts.SyntaxKind.InterfaceDeclaration:
353 case ts.SyntaxKind.TypeAliasDeclaration:
354 case ts.SyntaxKind.EnumDeclaration:
355 case ts.SyntaxKind.ModuleDeclaration:
356 case ts.SyntaxKind.ImportEqualsDeclaration:
357 case ts.SyntaxKind.NamespaceExportDeclaration:
358 case ts.SyntaxKind.ExportDeclaration:
359 case ts.SyntaxKind.ExportAssignment:
360 return true;
361 default:
362 return false;
363 }
364}
365export function isStatement(node) {
366 switch (node.kind) {
367 case ts.SyntaxKind.FunctionDeclaration:
368 case ts.SyntaxKind.NotEmittedStatement:
369 case ts.SyntaxKind.EmptyStatement:
370 case ts.SyntaxKind.DebuggerStatement:
371 case ts.SyntaxKind.MissingDeclaration:
372 case ts.SyntaxKind.Block:
373 case ts.SyntaxKind.VariableStatement:
374 case ts.SyntaxKind.ExpressionStatement:
375 case ts.SyntaxKind.IfStatement:
376 case ts.SyntaxKind.DoStatement:
377 case ts.SyntaxKind.WhileStatement:
378 case ts.SyntaxKind.ForStatement:
379 case ts.SyntaxKind.ForInStatement:
380 case ts.SyntaxKind.ForOfStatement:
381 case ts.SyntaxKind.BreakStatement:
382 case ts.SyntaxKind.ContinueStatement:
383 case ts.SyntaxKind.ReturnStatement:
384 case ts.SyntaxKind.WithStatement:
385 case ts.SyntaxKind.SwitchStatement:
386 case ts.SyntaxKind.LabeledStatement:
387 case ts.SyntaxKind.ThrowStatement:
388 case ts.SyntaxKind.TryStatement:
389 case ts.SyntaxKind.ClassDeclaration:
390 case ts.SyntaxKind.InterfaceDeclaration:
391 case ts.SyntaxKind.TypeAliasDeclaration:
392 case ts.SyntaxKind.EnumDeclaration:
393 case ts.SyntaxKind.ModuleDeclaration:
394 case ts.SyntaxKind.ModuleBlock:
395 case ts.SyntaxKind.ImportEqualsDeclaration:
396 case ts.SyntaxKind.ImportDeclaration:
397 case ts.SyntaxKind.NamespaceExportDeclaration:
398 case ts.SyntaxKind.ExportDeclaration:
399 case ts.SyntaxKind.ExportAssignment:
400 return true;
401 default:
402 return false;
403 }
404}
405export function isSignatureDeclarationBase(node) {
406 switch (node.kind) {
407 case ts.SyntaxKind.CallSignature:
408 case ts.SyntaxKind.ConstructSignature:
409 case ts.SyntaxKind.FunctionDeclaration:
410 case ts.SyntaxKind.MethodSignature:
411 case ts.SyntaxKind.MethodDeclaration:
412 case ts.SyntaxKind.Constructor:
413 case ts.SyntaxKind.GetAccessor:
414 case ts.SyntaxKind.SetAccessor:
415 case ts.SyntaxKind.IndexSignature:
416 case ts.SyntaxKind.FunctionType:
417 case ts.SyntaxKind.ConstructorType:
418 case ts.SyntaxKind.FunctionExpression:
419 case ts.SyntaxKind.ArrowFunction:
420 case ts.SyntaxKind.JSDocFunctionType:
421 return true;
422 default:
423 return false;
424 }
425}
426export function isParameterDeclaration(node) {
427 switch (node.kind) {
428 case ts.SyntaxKind.Parameter:
429 return true;
430 default:
431 return false;
432 }
433}
434export function isFunctionLikeDeclarationBase(node) {
435 switch (node.kind) {
436 case ts.SyntaxKind.FunctionDeclaration:
437 case ts.SyntaxKind.MethodDeclaration:
438 case ts.SyntaxKind.Constructor:
439 case ts.SyntaxKind.GetAccessor:
440 case ts.SyntaxKind.SetAccessor:
441 case ts.SyntaxKind.FunctionExpression:
442 case ts.SyntaxKind.ArrowFunction:
443 return true;
444 default:
445 return false;
446 }
447}
448export function isKeywordTypeNode(node) {
449 switch (node.kind) {
450 case ts.SyntaxKind.ThisKeyword:
451 return true;
452 default:
453 return false;
454 }
455}
456export function isNodeWithTypeArguments(node) {
457 switch (node.kind) {
458 case ts.SyntaxKind.ImportType:
459 case ts.SyntaxKind.TypeReference:
460 case ts.SyntaxKind.ExpressionWithTypeArguments:
461 return true;
462 default:
463 return false;
464 }
465}
466export function isFunctionOrConstructorTypeNodeBase(node) {
467 switch (node.kind) {
468 case ts.SyntaxKind.FunctionType:
469 case ts.SyntaxKind.ConstructorType:
470 return true;
471 default:
472 return false;
473 }
474}
475export function isOptionalTypeNode(node) {
476 switch (node.kind) {
477 case ts.SyntaxKind.OptionalType:
478 return true;
479 default:
480 return false;
481 }
482}
483export function isRestTypeNode(node) {
484 switch (node.kind) {
485 case ts.SyntaxKind.RestType:
486 return true;
487 default:
488 return false;
489 }
490}
491export function isLiteralLikeNode(node) {
492 switch (node.kind) {
493 case ts.SyntaxKind.StringLiteral:
494 case ts.SyntaxKind.RegularExpressionLiteral:
495 case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
496 case ts.SyntaxKind.NumericLiteral:
497 case ts.SyntaxKind.TemplateHead:
498 case ts.SyntaxKind.TemplateMiddle:
499 case ts.SyntaxKind.TemplateTail:
500 return true;
501 default:
502 return false;
503 }
504}
505export function isPartiallyEmittedExpression(node) {
506 switch (node.kind) {
507 case ts.SyntaxKind.PartiallyEmittedExpression:
508 return true;
509 default:
510 return false;
511 }
512}
513export function isNullLiteral(node) {
514 switch (node.kind) {
515 case ts.SyntaxKind.NullKeyword:
516 return true;
517 default:
518 return false;
519 }
520}
521export function isBooleanLiteral(node) {
522 switch (node.kind) {
523 case ts.SyntaxKind.TrueKeyword:
524 case ts.SyntaxKind.FalseKeyword:
525 return true;
526 default:
527 return false;
528 }
529}
530export function isThisExpression(node) {
531 switch (node.kind) {
532 case ts.SyntaxKind.ThisKeyword:
533 return true;
534 default:
535 return false;
536 }
537}
538export function isSuperExpression(node) {
539 switch (node.kind) {
540 case ts.SyntaxKind.SuperKeyword:
541 return true;
542 default:
543 return false;
544 }
545}
546export function isImportExpression(node) {
547 switch (node.kind) {
548 case ts.SyntaxKind.ImportKeyword:
549 return true;
550 default:
551 return false;
552 }
553}
554export function isSyntheticExpression(node) {
555 switch (node.kind) {
556 case ts.SyntaxKind.SyntheticExpression:
557 return true;
558 default:
559 return false;
560 }
561}
562export function isObjectLiteralExpressionBase(node) {
563 switch (node.kind) {
564 case ts.SyntaxKind.ObjectLiteralExpression:
565 return true;
566 default:
567 return false;
568 }
569}
570export function isNotEmittedStatement(node) {
571 switch (node.kind) {
572 case ts.SyntaxKind.NotEmittedStatement:
573 return true;
574 default:
575 return false;
576 }
577}
578export function isCommaListExpression(node) {
579 switch (node.kind) {
580 case ts.SyntaxKind.CommaListExpression:
581 return true;
582 default:
583 return false;
584 }
585}
586export function isClassLikeDeclarationBase(node) {
587 switch (node.kind) {
588 case ts.SyntaxKind.ClassDeclaration:
589 case ts.SyntaxKind.ClassExpression:
590 return true;
591 default:
592 return false;
593 }
594}
595export function isJSDocType(node) {
596 switch (node.kind) {
597 case ts.SyntaxKind.JSDocAllType:
598 case ts.SyntaxKind.JSDocUnknownType:
599 case ts.SyntaxKind.JSDocNonNullableType:
600 case ts.SyntaxKind.JSDocNullableType:
601 case ts.SyntaxKind.JSDocOptionalType:
602 case ts.SyntaxKind.JSDocFunctionType:
603 case ts.SyntaxKind.JSDocVariadicType:
604 case ts.SyntaxKind.JSDocSignature:
605 case ts.SyntaxKind.JSDocTypeLiteral:
606 return true;
607 default:
608 return false;
609 }
610}
611export function isJSDocTag(node) {
612 switch (node.kind) {
613 case ts.SyntaxKind.JSDocTag:
614 case ts.SyntaxKind.JSDocAugmentsTag:
615 case ts.SyntaxKind.JSDocClassTag:
616 case ts.SyntaxKind.JSDocThisTag:
617 case ts.SyntaxKind.JSDocTemplateTag:
618 case ts.SyntaxKind.JSDocReturnTag:
619 case ts.SyntaxKind.JSDocTypeTag:
620 case ts.SyntaxKind.JSDocTypedefTag:
621 case ts.SyntaxKind.JSDocCallbackTag:
622 case ts.SyntaxKind.JSDocPropertyTag:
623 case ts.SyntaxKind.JSDocParameterTag:
624 return true;
625 default:
626 return false;
627 }
628}
629export function isJSDocUnknownTag(node) {
630 switch (node.kind) {
631 case ts.SyntaxKind.JSDocTag:
632 return true;
633 default:
634 return false;
635 }
636}
637export function isInputFiles(node) {
638 switch (node.kind) {
639 case ts.SyntaxKind.InputFiles:
640 return true;
641 default:
642 return false;
643 }
644}
645export function isJsonMinusNumericLiteral(node) {
646 switch (node.kind) {
647 case ts.SyntaxKind.PrefixUnaryExpression:
648 return true;
649 default:
650 return false;
651 }
652}
653
654//# sourceMappingURL=data:application/json;charset=utf8;base64,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LEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUM3QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBYTtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFhO0lBQ3JELFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUMiLCJmaWxlIjoibmVvLW9uZS10cy11dGlscy9zcmMvZ3VhcmRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGVcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWFyeUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUHJpbWFyeUV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN1cGVyS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0S2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5vU3Vic3RpdHV0aW9uVGVtcGxhdGVMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJlbnRoZXNpemVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5EZWNsYXJhdGlvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVQYXJhbWV0ZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNhbGxTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVmFyaWFibGVEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyYW1ldGVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5CaW5kaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QXNzaWdubWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2VtaWNvbG9uQ2xhc3NFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1hcHBlZFR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkJpbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyb3dGdW5jdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEF0dHJpYnV0ZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U3ByZWFkQXR0cmlidXRlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NaXNzaW5nRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtTWVtYmVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0Q2xhdXNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VJbXBvcnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0U3BlY2lmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnRTcGVjaWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jRnVuY3Rpb25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVkZWZUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jQ2FsbGJhY2tUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1Byb3BlcnR5VGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1BhcmFtZXRlclRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU291cmNlRmlsZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVtYmVyRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5NZW1iZXJFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSWRlbnRpZmllcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OZXdFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkxlZnRIYW5kU2lkZUV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTmV3RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob25OdWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWV0YVByb3BlcnR5OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hTZWxmQ2xvc2luZ0VsZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEZyYWdtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwZGF0ZUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuVXBkYXRlRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcnRpYWxseUVtaXR0ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QcmVmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBvc3RmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UaGlzS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3VwZXJLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbGVtZW50QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmFyeUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuVW5hcnlFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSWRlbnRpZmllcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFydGlhbGx5RW1pdHRlZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByZWZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkRlbGV0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVPZkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Bd2FpdEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTmV3RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PbWl0dGVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFydGlhbGx5RW1pdHRlZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByZWZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkRlbGV0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVPZkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Bd2FpdEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLllpZWxkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3ludGhldGljRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQmluYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ29uZGl0aW9uYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycm93RnVuY3Rpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbGVtZW50QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXNFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4T3BlbmluZ0VsZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeFNlbGZDbG9zaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RnJhZ21lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeE9wZW5pbmdGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4Q2xvc2luZ0ZyYWdtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db21tYUxpc3RFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuTmFtZWREZWNsYXJhdGlvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVQYXJhbWV0ZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNhbGxTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVmFyaWFibGVEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyYW1ldGVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5CaW5kaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QXNzaWdubWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2VtaWNvbG9uQ2xhc3NFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEF0dHJpYnV0ZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U3ByZWFkQXR0cmlidXRlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NaXNzaW5nRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtTWVtYmVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0Q2xhdXNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VJbXBvcnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0U3BlY2lmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnRTcGVjaWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jRnVuY3Rpb25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVkZWZUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jQ2FsbGJhY2tUYWc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uU3RhdGVtZW50KG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkRlY2xhcmF0aW9uU3RhdGVtZW50IHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWlzc2luZ0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcmZhY2VEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUFsaWFzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVudW1EZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTW9kdWxlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEVxdWFsc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRlbWVudChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TdGF0ZW1lbnQge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbXB0eVN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRGVidWdnZXJTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1pc3NpbmdEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQmxvY2s6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZhcmlhYmxlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHByZXNzaW9uU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZlN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRG9TdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLldoaWxlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Gb3JTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZvckluU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Gb3JPZlN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQnJlYWtTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnRpbnVlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZXR1cm5TdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLldpdGhTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN3aXRjaFN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTGFiZWxlZFN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhyb3dTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRyeVN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Nb2R1bGVCbG9jazpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZ25hdHVyZURlY2xhcmF0aW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TaWduYXR1cmVEZWNsYXJhdGlvbkJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWV0aG9kRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0Z1bmN0aW9uVHlwZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYW1ldGVyRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUGFyYW1ldGVyRGVjbGFyYXRpb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJhbWV0ZXI6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uTGlrZURlY2xhcmF0aW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5GdW5jdGlvbkxpa2VEZWNsYXJhdGlvbkJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2REZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ29uc3RydWN0b3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkdldEFjY2Vzc29yOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLZXl3b3JkVHlwZU5vZGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuS2V5d29yZFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVXaXRoVHlwZUFyZ3VtZW50cyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5Ob2RlV2l0aFR5cGVBcmd1bWVudHMge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGVOb2RlQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5GdW5jdGlvbk9yQ29uc3RydWN0b3JUeXBlTm9kZUJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT3B0aW9uYWxUeXBlTm9kZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5PcHRpb25hbFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT3B0aW9uYWxUeXBlOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXN0VHlwZU5vZGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUmVzdFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVzdFR5cGU6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWxMaWtlTm9kZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5MaXRlcmFsTGlrZU5vZGUge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5vU3Vic3RpdHV0aW9uVGVtcGxhdGVMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVIZWFkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZU1pZGRsZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVUYWlsOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5QYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcnRpYWxseUVtaXR0ZWRFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsTGl0ZXJhbChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5OdWxsTGl0ZXJhbCB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuTGl0ZXJhbChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5Cb29sZWFuTGl0ZXJhbCB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLlRoaXNFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N1cGVyRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TdXBlckV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ltcG9ydEV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSW1wb3J0RXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bnRoZXRpY0V4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuU3ludGhldGljRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN5bnRoZXRpY0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdExpdGVyYWxFeHByZXNzaW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbkJhc2U8YW55PiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbWl0dGVkU3RhdGVtZW50KG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLk5vdEVtaXR0ZWRTdGF0ZW1lbnQge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50OlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYUxpc3RFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkNvbW1hTGlzdEV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db21tYUxpc3RFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzc0xpa2VEZWNsYXJhdGlvbkJhc2Uobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuQ2xhc3NMaWtlRGVjbGFyYXRpb25CYXNlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNKU0RvY1R5cGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSlNEb2NUeXBlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NBbGxUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1Vua25vd25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY05vbk51bGxhYmxlVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NOdWxsYWJsZVR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jT3B0aW9uYWxUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0Z1bmN0aW9uVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NWYXJpYWRpY1R5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVMaXRlcmFsOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNKU0RvY1RhZyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5KU0RvY1RhZyB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0F1Z21lbnRzVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0NsYXNzVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1RoaXNUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVGVtcGxhdGVUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jUmV0dXJuVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVHlwZWRlZlRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NDYWxsYmFja1RhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NQcm9wZXJ0eVRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NQYXJhbWV0ZXJUYWc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0pTRG9jVW5rbm93blRhZyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5KU0RvY1Vua25vd25UYWcge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1RhZzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5wdXRGaWxlcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5JbnB1dEZpbGVzIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5wdXRGaWxlczpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSnNvbk1pbnVzTnVtZXJpY0xpdGVyYWwobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSnNvbk1pbnVzTnVtZXJpY0xpdGVyYWwge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QcmVmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=