ember-appkit-rails 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ember/appkit/rails.rb +4 -0
  3. data/lib/ember/appkit/rails/engine.rb +6 -1
  4. data/lib/ember/appkit/rails/teaspoon.rb +5 -0
  5. data/lib/ember/appkit/rails/teaspoon/engine.rb +3 -0
  6. data/lib/ember/appkit/rails/teaspoon/suite.rb +7 -0
  7. data/lib/ember/appkit/rails/version.rb +1 -1
  8. data/lib/ember/appkit/rails/views/teaspoon/spec/_eak_rails.html.erb +10 -0
  9. data/lib/generators/ember/bootstrap_generator.rb +27 -9
  10. data/lib/generators/ember/component_generator.rb +2 -2
  11. data/lib/generators/ember/controller_generator.rb +4 -4
  12. data/lib/generators/ember/generator_helpers.rb +4 -0
  13. data/lib/generators/ember/install_generator.rb +150 -0
  14. data/lib/generators/ember/model_generator.rb +7 -2
  15. data/lib/generators/ember/resource_generator.rb +1 -1
  16. data/lib/generators/ember/route_generator.rb +2 -2
  17. data/lib/generators/ember/scaffold_generator.rb +17 -3
  18. data/lib/generators/ember/serializer_override.rb +18 -0
  19. data/lib/generators/ember/view_generator.rb +2 -2
  20. data/{test/dummy/config/adapters/application.js.es6.erb → lib/generators/templates/adapters/application.es6.erb} +0 -0
  21. data/lib/generators/templates/application.js.erb +1 -0
  22. data/lib/generators/templates/{array_controller.js.es6 → array_controller.es6} +0 -0
  23. data/lib/generators/templates/{component.js.es6 → component.es6} +0 -0
  24. data/lib/generators/templates/{controller.js.es6 → controller.es6} +0 -0
  25. data/lib/generators/templates/environment.js.erb +2 -0
  26. data/lib/generators/templates/environments/development.js.erb +5 -5
  27. data/lib/generators/templates/environments/production.js.erb +2 -2
  28. data/lib/generators/templates/environments/test.js.erb +1 -1
  29. data/lib/generators/templates/initializers/teaspoon.rb +63 -0
  30. data/lib/generators/templates/{model.js.es6 → model.es6} +0 -0
  31. data/lib/generators/templates/{object_controller.js.es6 → object_controller.es6} +0 -0
  32. data/lib/generators/templates/{route.js.es6 → route.es6} +0 -0
  33. data/lib/generators/templates/{router.js.es6 → router.es6} +0 -0
  34. data/lib/generators/templates/scaffold/route/{edit.js.es6 → edit.es6} +1 -1
  35. data/lib/generators/templates/scaffold/route/{index.js.es6 → index.es6} +1 -1
  36. data/lib/generators/templates/scaffold/route/{new.js.es6 → new.es6} +1 -1
  37. data/lib/generators/templates/scaffold/route/{show.js.es6 → show.es6} +1 -1
  38. data/lib/generators/templates/scaffold/template/form.hbs +3 -4
  39. data/lib/generators/templates/scaffold/template/index.hbs +2 -2
  40. data/lib/generators/templates/scaffold/template/show.hbs +2 -2
  41. data/lib/generators/templates/scaffold_controller/controller.rb +2 -2
  42. data/lib/generators/templates/test/model.es6 +7 -0
  43. data/lib/generators/templates/test/route.es6 +23 -0
  44. data/lib/generators/templates/test/teaspoon_env.rb +38 -0
  45. data/lib/generators/templates/test/test_helper.js +55 -0
  46. data/lib/generators/templates/{view.js.es6 → view.es6} +0 -0
  47. data/test/dummy/config/adapters/application.es6.erb +3 -0
  48. data/test/dummy/config/application.js +1 -0
  49. data/test/dummy/config/environment.js.erb +2 -0
  50. data/test/dummy/config/environments/development.js.erb +5 -5
  51. data/test/dummy/config/environments/production.js.erb +2 -2
  52. data/test/dummy/config/environments/test.js.erb +1 -1
  53. data/test/dummy/config/initializers/secret_token.rb +1 -1
  54. data/test/dummy/config/initializers/teaspoon.rb +63 -0
  55. data/test/dummy/config/{router.js.es6 → router.es6} +0 -0
  56. data/test/dummy/log/test.log +71 -8
  57. data/test/dummy/test/teaspoon_env.rb +38 -0
  58. data/test/dummy/test/test_helper.js +55 -0
  59. data/test/dummy/tmp/cache/assets/test/sprockets/{eeb5bd38d1dad0d908461fd114f702bc → 08230536deeb8bca57aa54c1cf9a8a67} +0 -0
  60. data/test/dummy/tmp/cache/assets/test/sprockets/0f4e288e1e01cda64059f8f521519f5a +0 -0
  61. data/test/dummy/tmp/cache/assets/test/sprockets/{492d1909e24832f58ebca96dade2a876 → 1318d49b0a8b80264cc6d140438953bf} +0 -0
  62. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  63. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  64. data/test/dummy/tmp/cache/assets/test/sprockets/39492898b23538577ff8db562a35fb7c +0 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/3f9cb5a26b08b9e25de91fe142228ad2 +0 -0
  66. data/test/dummy/tmp/cache/assets/test/sprockets/4a1d4e32cd7b9fd1c62bfd553ae56051 +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/4d3cadf0ab91b4a77adf81282a5550a1 +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/{1f15c49a05b13c3a7ee50d2ac3900f38 → 571f65ff5db500e9ad70fc11060270a8} +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/660bc633c8899c6c1b20514637fa0169 +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/67afcba9807cd5e57b80b5fdf9f26758 +0 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/{47fb03bce147145961cb3deeafca54d7 → 7190c4707840ff0d7c60920ae9739c79} +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/7ca4966e0a480430a858a7ab74518c75 +0 -0
  73. data/test/dummy/tmp/cache/assets/test/sprockets/83030d43d9bff738a1a01366d61d7691 +0 -0
  74. data/test/dummy/tmp/cache/assets/test/sprockets/83af35bb6b852de883a26a9458fd4e3a +0 -0
  75. data/test/dummy/tmp/cache/assets/test/sprockets/8adfb5e646dca2c629e5d3dc88e2c2e9 +0 -0
  76. data/test/dummy/tmp/cache/assets/test/sprockets/9160f792acb62d1f7721c714681fcfe6 +0 -0
  77. data/test/dummy/tmp/cache/assets/test/sprockets/a6a0d79927cb0ec286aa0afb9812685c +0 -0
  78. data/test/dummy/tmp/cache/assets/test/sprockets/bb4a2293175928af3e23c47488077098 +0 -0
  79. data/test/dummy/tmp/cache/assets/test/sprockets/bf689240392e7355c0de5cfd47272146 +0 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/{66c0ce49a71def0f29dcf0bcaf8fb28d → c4eca8931f39b747ea9f916a3b42d8da} +0 -0
  81. data/test/dummy/tmp/cache/assets/test/sprockets/cdbe9110f011148cc7a1f172dc18a883 +0 -0
  82. data/test/dummy/tmp/cache/assets/test/sprockets/d5a48c6656341c56cac8a8e42bb925a5 +0 -0
  83. data/test/dummy/tmp/cache/assets/test/sprockets/{d4cb455bee790d041fb3111fb1636531 → d5b1e7219e29c039a8ebb0a4e5b19a2b} +0 -0
  84. data/test/dummy/tmp/cache/assets/test/sprockets/{ce7582379ff02bb25cee3ac0486fe1f2 → d5ce5243d4ca4a3739a15e60e3c685ba} +0 -0
  85. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  86. data/test/dummy/tmp/cache/assets/test/sprockets/de0932670a6c856bc6eda1586fd29061 +0 -0
  87. data/test/dummy/tmp/cache/assets/test/sprockets/e9abb671d48f6ff2be6ffb463ea652bf +0 -0
  88. data/test/dummy/tmp/cache/assets/test/sprockets/{e36a853a1349d7f33f6c0083c05f897b → fb43f1b92235ac87bedc9ac12be00188} +0 -0
  89. data/test/dummy/tmp/generator_test_output/app/views/{post.js.es6 → post.es6} +0 -0
  90. data/test/fixtures/vcr_cassettes/fetch_ember_beta.yml +39609 -0
  91. data/test/fixtures/vcr_cassettes/fetch_ember_canary.yml +41381 -0
  92. data/test/fixtures/vcr_cassettes/fetch_ember_data_tagged.yml +4283 -0
  93. data/test/fixtures/vcr_cassettes/fetch_ember_release.yml +38824 -0
  94. data/test/fixtures/vcr_cassettes/fetch_ember_tagged.yml +29518 -0
  95. data/test/generators/bootstrap_generator_test.rb +12 -4
  96. data/test/generators/component_generator_test.rb +6 -6
  97. data/test/generators/controller_generator_test.rb +5 -5
  98. data/test/generators/install_generator_test.rb +163 -0
  99. data/test/generators/model_generator_test.rb +29 -7
  100. data/test/generators/resource_generator_test.rb +6 -6
  101. data/test/generators/route_generator_test.rb +1 -1
  102. data/test/generators/scaffold_generator_test.rb +59 -10
  103. data/test/generators/serializer_override_test.rb +19 -0
  104. data/test/generators/view_generator_test.rb +6 -6
  105. data/test/integration/engine_test.rb +4 -0
  106. data/test/support/generator_test_support.rb +2 -2
  107. data/vendor/assets/javascripts/{app.js.es6.erb → app.es6.erb} +3 -1
  108. data/vendor/assets/javascripts/ember-appkit/index.js +0 -1
  109. data/vendor/assets/javascripts/ember-appkit/resolver.js +235 -32
  110. data/vendor/assets/javascripts/fake_xml_http_request.js +473 -0
  111. data/vendor/assets/javascripts/fakehr.js +52 -0
  112. data/vendor/assets/javascripts/httpRespond.js +24 -0
  113. metadata +126 -55
  114. data/lib/generators/templates/adapter.js.erb +0 -3
  115. data/test/dummy/tmp/cache/assets/test/sprockets/10fe949cc641775f5630b5dad6deb5fc +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sprockets/129b422236f443119233cdb0a4525a06 +0 -0
  117. data/test/dummy/tmp/cache/assets/test/sprockets/25b8b60341168a02f48dabd2b0aa82ad +0 -0
  118. data/test/dummy/tmp/cache/assets/test/sprockets/827fafc13575b345cc572fd041ef1fba +0 -0
  119. data/test/dummy/tmp/cache/assets/test/sprockets/83a9a7d15d681a382363d2bccb9528bb +0 -0
  120. data/test/dummy/tmp/cache/assets/test/sprockets/de94a60b438eb5bf57653f3a220acd80 +0 -0
  121. data/vendor/assets/javascripts/ember-appkit/resolver_ext.js +0 -40
@@ -0,0 +1,4283 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://builds.emberjs.com/tags/v1.0.0-beta.1/ember-data.js
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - builds.emberjs.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ X-Amz-Id-2:
24
+ - cKB1NvBMCMXyzmglhVgd1u4e4s13hLCdLXuTzMqnAn1PZxM4EI11VQvuKVKtg5oG
25
+ X-Amz-Request-Id:
26
+ - 15EB4E489F8710FA
27
+ Date:
28
+ - Mon, 17 Feb 2014 11:45:23 GMT
29
+ Last-Modified:
30
+ - Sun, 01 Sep 2013 07:45:26 GMT
31
+ Etag:
32
+ - '"5829a6a7e731efc80e1d5677513e2d24"'
33
+ Content-Type:
34
+ - text/javascript
35
+ Content-Length:
36
+ - '184834'
37
+ Server:
38
+ - AmazonS3
39
+ body:
40
+ encoding: ASCII-8BIT
41
+ string: !binary |-
42
+ Ly8gVmVyc2lvbjogdjEuMC4wLWJldGEuMQovLyBMYXN0IGNvbW1pdDogY2Fm
43
+ YWI5ZCAoMjAxMy0wOS0wMSAwMDo0MjozOSAtMDcwMCkKCgooZnVuY3Rpb24o
44
+ KSB7CnZhciBkZWZpbmUsIHJlcXVpcmVNb2R1bGU7CgooZnVuY3Rpb24oKSB7
45
+ CiAgdmFyIHJlZ2lzdHJ5ID0ge30sIHNlZW4gPSB7fTsKCiAgZGVmaW5lID0g
46
+ ZnVuY3Rpb24obmFtZSwgZGVwcywgY2FsbGJhY2spIHsKICAgIHJlZ2lzdHJ5
47
+ W25hbWVdID0geyBkZXBzOiBkZXBzLCBjYWxsYmFjazogY2FsbGJhY2sgfTsK
48
+ ICB9OwoKICByZXF1aXJlTW9kdWxlID0gZnVuY3Rpb24obmFtZSkgewogICAg
49
+ aWYgKHNlZW5bbmFtZV0pIHsgcmV0dXJuIHNlZW5bbmFtZV07IH0KICAgIHNl
50
+ ZW5bbmFtZV0gPSB7fTsKCiAgICB2YXIgbW9kLCBkZXBzLCBjYWxsYmFjaywg
51
+ cmVpZmllZCAsIGV4cG9ydHM7CgogICAgbW9kID0gcmVnaXN0cnlbbmFtZV07
52
+ CgogICAgaWYgKCFtb2QpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJNb2R1
53
+ bGUgJyIgKyBuYW1lICsgIicgbm90IGZvdW5kLiIpOwogICAgfQoKICAgIGRl
54
+ cHMgPSBtb2QuZGVwczsKICAgIGNhbGxiYWNrID0gbW9kLmNhbGxiYWNrOwog
55
+ ICAgcmVpZmllZCA9IFtdOwogICAgZXhwb3J0czsKCiAgICBmb3IgKHZhciBp
56
+ PTAsIGw9ZGVwcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgIGlmIChkZXBz
57
+ W2ldID09PSAnZXhwb3J0cycpIHsKICAgICAgICByZWlmaWVkLnB1c2goZXhw
58
+ b3J0cyA9IHt9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWlmaWVkLnB1
59
+ c2gocmVxdWlyZU1vZHVsZShkZXBzW2ldKSk7CiAgICAgIH0KICAgIH0KCiAg
60
+ ICB2YXIgdmFsdWUgPSBjYWxsYmFjay5hcHBseSh0aGlzLCByZWlmaWVkKTsK
61
+ ICAgIHJldHVybiBzZWVuW25hbWVdID0gZXhwb3J0cyB8fCB2YWx1ZTsKICB9
62
+ Owp9KSgpOwooZnVuY3Rpb24oKSB7CkVtYmVyLlN0cmluZy5wbHVyYWxpemUg
63
+ PSBmdW5jdGlvbih3b3JkKSB7CiAgcmV0dXJuIEVtYmVyLkluZmxlY3Rvci5p
64
+ bmZsZWN0b3IucGx1cmFsaXplKHdvcmQpOwp9OwoKRW1iZXIuU3RyaW5nLnNp
65
+ bmd1bGFyaXplID0gZnVuY3Rpb24od29yZCkgewogIHJldHVybiBFbWJlci5J
66
+ bmZsZWN0b3IuaW5mbGVjdG9yLnNpbmd1bGFyaXplKHdvcmQpOwp9OwoKfSko
67
+ KTsKCgoKKGZ1bmN0aW9uKCkgewp2YXIgQkxBTktfUkVHRVggPSAvXlxzKiQv
68
+ OwoKZnVuY3Rpb24gbG9hZFVuY291bnRhYmxlKHJ1bGVzLCB1bmNvdW50YWJs
69
+ ZSkgewogIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB1bmNvdW50YWJsZS5s
70
+ ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgcnVsZXMudW5jb3VudGFi
71
+ bGVbdW5jb3VudGFibGVbaV1dID0gdHJ1ZTsKICB9Cn0KCmZ1bmN0aW9uIGxv
72
+ YWRJcnJlZ3VsYXIocnVsZXMsIGlycmVndWxhclBhaXJzKSB7CiAgdmFyIHBh
73
+ aXI7CgogIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBpcnJlZ3VsYXJQYWly
74
+ cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgcGFpciA9IGlycmVn
75
+ dWxhclBhaXJzW2ldOwoKICAgIHJ1bGVzLmlycmVndWxhcltwYWlyWzBdXSA9
76
+ IHBhaXJbMV07CiAgICBydWxlcy5pcnJlZ3VsYXJJbnZlcnNlW3BhaXJbMV1d
77
+ ID0gcGFpclswXTsKICB9Cn0KCmZ1bmN0aW9uIEluZmxlY3RvcihydWxlU2V0
78
+ KSB7CiAgcnVsZVNldCA9IHJ1bGVTZXQgfHwge307CiAgcnVsZVNldC51bmNv
79
+ dW50YWJsZSA9IHJ1bGVTZXQudW5jb3VudGFibGUgfHwge307CiAgcnVsZVNl
80
+ dC5pcnJlZ3VsYXJQYWlycz0gcnVsZVNldC5pcnJlZ3VsYXJQYWlyc3x8IHt9
81
+ OwoKICB2YXIgcnVsZXMgPSB0aGlzLnJ1bGVzID0gewogICAgcGx1cmFsczog
82
+ IHJ1bGVTZXQucGx1cmFscyB8fCBbXSwKICAgIHNpbmd1bGFyOiBydWxlU2V0
83
+ LnNpbmd1bGFyIHx8IFtdLAogICAgaXJyZWd1bGFyOiB7fSwKICAgIGlycmVn
84
+ dWxhckludmVyc2U6IHt9LAogICAgdW5jb3VudGFibGU6IHt9CiAgfTsKCiAg
85
+ bG9hZFVuY291bnRhYmxlKHJ1bGVzLCBydWxlU2V0LnVuY291bnRhYmxlKTsK
86
+ ICBsb2FkSXJyZWd1bGFyKHJ1bGVzLCBydWxlU2V0LmlycmVndWxhclBhaXJz
87
+ KTsKfQoKSW5mbGVjdG9yLnByb3RvdHlwZSA9IHsKICBwbHVyYWxpemU6IGZ1
88
+ bmN0aW9uKHdvcmQpIHsKICAgIHJldHVybiB0aGlzLmluZmxlY3Qod29yZCwg
89
+ dGhpcy5ydWxlcy5wbHVyYWxzKTsKICB9LAoKICBzaW5ndWxhcml6ZTogZnVu
90
+ Y3Rpb24od29yZCkgewogICAgcmV0dXJuIHRoaXMuaW5mbGVjdCh3b3JkLCB0
91
+ aGlzLnJ1bGVzLnNpbmd1bGFyKTsKICB9LAoKICBpbmZsZWN0OiBmdW5jdGlv
92
+ bih3b3JkLCB0eXBlUnVsZXMpIHsKICAgIHZhciBpbmZsZWN0aW9uLCBzdWJz
93
+ dGl0dXRpb24sIHJlc3VsdCwgbG93ZXJjYXNlLCBpc0JsYW5rLAogICAgaXNV
94
+ bmNvdW50YWJsZSwgaXNJcnJlZ3VsYXIsIGlzSXJyZWd1bGFySW52ZXJzZSwg
95
+ cnVsZTsKCiAgICBpc0JsYW5rID0gQkxBTktfUkVHRVgudGVzdCh3b3JkKTsK
96
+ CiAgICBpZiAoaXNCbGFuaykgewogICAgICByZXR1cm4gd29yZDsKICAgIH0K
97
+ CiAgICBsb3dlcmNhc2UgPSB3b3JkLnRvTG93ZXJDYXNlKCk7CgogICAgaXNV
98
+ bmNvdW50YWJsZSA9IHRoaXMucnVsZXMudW5jb3VudGFibGVbbG93ZXJjYXNl
99
+ XTsKCiAgICBpZiAoaXNVbmNvdW50YWJsZSkgewogICAgICByZXR1cm4gd29y
100
+ ZDsKICAgIH0KCiAgICBpc0lycmVndWxhciA9IHRoaXMucnVsZXMuaXJyZWd1
101
+ bGFyW2xvd2VyY2FzZV07CgogICAgaWYgKGlzSXJyZWd1bGFyKSB7CiAgICAg
102
+ IHJldHVybiBpc0lycmVndWxhcjsKICAgIH0KCiAgICBpc0lycmVndWxhcklu
103
+ dmVyc2UgPSB0aGlzLnJ1bGVzLmlycmVndWxhckludmVyc2VbbG93ZXJjYXNl
104
+ XTsKCiAgICBpZiAoaXNJcnJlZ3VsYXJJbnZlcnNlKSB7CiAgICAgIHJldHVy
105
+ biBpc0lycmVndWxhckludmVyc2U7CiAgICB9CgogICAgZm9yICh2YXIgaSA9
106
+ IHR5cGVSdWxlcy5sZW5ndGgsIG1pbiA9IDA7IGkgPiBtaW47IGktLSkgewog
107
+ ICAgICAgaW5mbGVjdGlvbiA9IHR5cGVSdWxlc1tpLTFdOwogICAgICAgcnVs
108
+ ZSA9IGluZmxlY3Rpb25bMF07CgogICAgICBpZiAocnVsZS50ZXN0KHdvcmQp
109
+ KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpbmZsZWN0
110
+ aW9uID0gaW5mbGVjdGlvbiB8fCBbXTsKCiAgICBydWxlID0gaW5mbGVjdGlv
111
+ blswXTsKICAgIHN1YnN0aXR1dGlvbiA9IGluZmxlY3Rpb25bMV07CgogICAg
112
+ cmVzdWx0ID0gd29yZC5yZXBsYWNlKHJ1bGUsIHN1YnN0aXR1dGlvbik7Cgog
113
+ ICAgcmV0dXJuIHJlc3VsdDsKICB9Cn07CgpFbWJlci5JbmZsZWN0b3IgPSBJ
114
+ bmZsZWN0b3I7Cgp9KSgpOwoKCgooZnVuY3Rpb24oKSB7CkVtYmVyLkluZmxl
115
+ Y3Rvci5kZWZhdWx0UnVsZXMgPSB7CiAgcGx1cmFsczogWwogICAgWy8kLywg
116
+ J3MnXSwKICAgIFsvcyQvaSwgJ3MnXSwKICAgIFsvXihheHx0ZXN0KWlzJC9p
117
+ LCAnJDFlcyddLAogICAgWy8ob2N0b3B8dmlyKXVzJC9pLCAnJDFpJ10sCiAg
118
+ ICBbLyhvY3RvcHx2aXIpaSQvaSwgJyQxaSddLAogICAgWy8oYWxpYXN8c3Rh
119
+ dHVzKSQvaSwgJyQxZXMnXSwKICAgIFsvKGJ1KXMkL2ksICckMXNlcyddLAog
120
+ ICAgWy8oYnVmZmFsfHRvbWF0KW8kL2ksICckMW9lcyddLAogICAgWy8oW3Rp
121
+ XSl1bSQvaSwgJyQxYSddLAogICAgWy8oW3RpXSlhJC9pLCAnJDFhJ10sCiAg
122
+ ICBbL3NpcyQvaSwgJ3NlcyddLAogICAgWy8oPzooW15mXSlmZXwoW2xyXSlm
123
+ KSQvaSwgJyQxJDJ2ZXMnXSwKICAgIFsvKGhpdmUpJC9pLCAnJDFzJ10sCiAg
124
+ ICBbLyhbXmFlaW91eV18cXUpeSQvaSwgJyQxaWVzJ10sCiAgICBbLyh4fGNo
125
+ fHNzfHNoKSQvaSwgJyQxZXMnXSwKICAgIFsvKG1hdHJ8dmVydHxpbmQpKD86
126
+ aXh8ZXgpJC9pLCAnJDFpY2VzJ10sCiAgICBbL14obXxsKW91c2UkL2ksICck
127
+ MWljZSddLAogICAgWy9eKG18bClpY2UkL2ksICckMWljZSddLAogICAgWy9e
128
+ KG94KSQvaSwgJyQxZW4nXSwKICAgIFsvXihveGVuKSQvaSwgJyQxJ10sCiAg
129
+ ICBbLyhxdWl6KSQvaSwgJyQxemVzJ10KICBdLAoKICBzaW5ndWxhcjogWwog
130
+ ICAgWy9zJC9pLCAnJ10sCiAgICBbLyhzcykkL2ksICckMSddLAogICAgWy8o
131
+ billd3MkL2ksICckMWV3cyddLAogICAgWy8oW3RpXSlhJC9pLCAnJDF1bSdd
132
+ LAogICAgWy8oKGEpbmFseXwoYilhfChkKWlhZ25vfChwKWFyZW50aGV8KHAp
133
+ cm9nbm98KHMpeW5vcHwodCloZSkoc2lzfHNlcykkL2ksICckMXNpcyddLAog
134
+ ICAgWy8oXmFuYWx5KShzaXN8c2VzKSQvaSwgJyQxc2lzJ10sCiAgICBbLyhb
135
+ XmZdKXZlcyQvaSwgJyQxZmUnXSwKICAgIFsvKGhpdmUpcyQvaSwgJyQxJ10s
136
+ CiAgICBbLyh0aXZlKXMkL2ksICckMSddLAogICAgWy8oW2xyXSl2ZXMkL2ks
137
+ ICckMWYnXSwKICAgIFsvKFteYWVpb3V5XXxxdSlpZXMkL2ksICckMXknXSwK
138
+ ICAgIFsvKHMpZXJpZXMkL2ksICckMWVyaWVzJ10sCiAgICBbLyhtKW92aWVz
139
+ JC9pLCAnJDFvdmllJ10sCiAgICBbLyh4fGNofHNzfHNoKWVzJC9pLCAnJDEn
140
+ XSwKICAgIFsvXihtfGwpaWNlJC9pLCAnJDFvdXNlJ10sCiAgICBbLyhidXMp
141
+ KGVzKT8kL2ksICckMSddLAogICAgWy8obyllcyQvaSwgJyQxJ10sCiAgICBb
142
+ LyhzaG9lKXMkL2ksICckMSddLAogICAgWy8oY3Jpc3x0ZXN0KShpc3xlcykk
143
+ L2ksICckMWlzJ10sCiAgICBbL14oYSl4W2llXXMkL2ksICckMXhpcyddLAog
144
+ ICAgWy8ob2N0b3B8dmlyKSh1c3xpKSQvaSwgJyQxdXMnXSwKICAgIFsvKGFs
145
+ aWFzfHN0YXR1cykoZXMpPyQvaSwgJyQxJ10sCiAgICBbL14ob3gpZW4vaSwg
146
+ JyQxJ10sCiAgICBbLyh2ZXJ0fGluZClpY2VzJC9pLCAnJDFleCddLAogICAg
147
+ Wy8obWF0cilpY2VzJC9pLCAnJDFpeCddLAogICAgWy8ocXVpeil6ZXMkL2ks
148
+ ICckMSddLAogICAgWy8oZGF0YWJhc2UpcyQvaSwgJyQxJ10KICBdLAoKICBp
149
+ cnJlZ3VsYXJQYWlyczogWwogICAgWydwZXJzb24nLCAncGVvcGxlJ10sCiAg
150
+ ICBbJ21hbicsICdtZW4nXSwKICAgIFsnY2hpbGQnLCAnY2hpbGRyZW4nXSwK
151
+ ICAgIFsnc2V4JywgJ3NleGVzJ10sCiAgICBbJ21vdmUnLCAnbW92ZXMnXSwK
152
+ ICAgIFsnY293JywgJ2tpbmUnXSwKICAgIFsnem9tYmllJywgJ3pvbWJpZXMn
153
+ XQogIF0sCgogIHVuY291bnRhYmxlOiBbCiAgICAnZXF1aXBtZW50JywKICAg
154
+ ICdpbmZvcm1hdGlvbicsCiAgICAncmljZScsCiAgICAnbW9uZXknLAogICAg
155
+ J3NwZWNpZXMnLAogICAgJ3NlcmllcycsCiAgICAnZmlzaCcsCiAgICAnc2hl
156
+ ZXAnLAogICAgJ2plYW5zJywKICAgICdwb2xpY2UnCiAgXQp9OwoKfSkoKTsK
157
+ CgoKKGZ1bmN0aW9uKCkgewppZiAoRW1iZXIuRVhURU5EX1BST1RPVFlQRVMp
158
+ IHsNCiAgLyoqDQogICAgU2VlIHt7I2Nyb3NzTGluayAiRW1iZXIuU3RyaW5n
159
+ L3BsdXJhbGl6ZSJ9fXt7L2Nyb3NzTGlua319DQoNCiAgICBAbWV0aG9kIHBs
160
+ dXJhbGl6ZQ0KICAgIEBmb3IgU3RyaW5nDQogICovDQogIFN0cmluZy5wcm90
161
+ b3R5cGUucGx1cmFsaXplID0gZnVuY3Rpb24oKSB7DQogICAgcmV0dXJuIEVt
162
+ YmVyLlN0cmluZy5wbHVyYWxpemUodGhpcyk7DQogIH07DQoNCiAgLyoqDQog
163
+ ICAgU2VlIHt7I2Nyb3NzTGluayAiRW1iZXIuU3RyaW5nL3Npbmd1bGFyaXpl
164
+ In19e3svY3Jvc3NMaW5rfX0NCg0KICAgIEBtZXRob2Qgc2luZ3VsYXJpemUN
165
+ CiAgICBAZm9yIFN0cmluZw0KICAqLw0KICBTdHJpbmcucHJvdG90eXBlLnNp
166
+ bmd1bGFyaXplID0gZnVuY3Rpb24oKSB7DQogICAgcmV0dXJuIEVtYmVyLlN0
167
+ cmluZy5zaW5ndWxhcml6ZSh0aGlzKTsNCiAgfTsNCn0NCgp9KSgpOwoKCgoo
168
+ ZnVuY3Rpb24oKSB7CkVtYmVyLkluZmxlY3Rvci5pbmZsZWN0b3IgPSBuZXcg
169
+ RW1iZXIuSW5mbGVjdG9yKEVtYmVyLkluZmxlY3Rvci5kZWZhdWx0UnVsZXMp
170
+ Ow0KCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKCn0pKCk7CgoKfSkoKTsKLy8g
171
+ VmVyc2lvbjogdjEuMC4wLWJldGEuMQovLyBMYXN0IGNvbW1pdDogY2FmYWI5
172
+ ZCAoMjAxMy0wOS0wMSAwMDo0MjozOSAtMDcwMCkKCgooZnVuY3Rpb24oKSB7
173
+ Ci8qKgogIEBtb2R1bGUgZW1iZXItZGF0YQoqLwoKLyoqCiAgQWxsIEVtYmVy
174
+ IERhdGEgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluc2lk
175
+ ZSBvZiB0aGlzIG5hbWVzcGFjZS4KCiAgQGNsYXNzIERTCiAgQHN0YXRpYwoq
176
+ LwoKaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2YgRFMpIHsKICBEUyA9IEVt
177
+ YmVyLk5hbWVzcGFjZS5jcmVhdGUoewogICAgVkVSU0lPTjogJzEuMC4wLWJl
178
+ dGEuMScKICB9KTsKCiAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2lu
179
+ ZG93KSB7CiAgICB3aW5kb3cuRFMgPSBEUzsKICB9Cn0KfSkoKTsKCgoKKGZ1
180
+ bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCnZhciBp
181
+ c05vbmUgPSBFbWJlci5pc05vbmUsIGlzRW1wdHkgPSBFbWJlci5pc0VtcHR5
182
+ OwoKLyoqCiAgRFMuSlNPTlRyYW5zZm9ybXMgaXMgYSBoYXNoIG9mIHRyYW5z
183
+ Zm9ybXMgdXNlZCBieSBEUy5TZXJpYWxpemVyLgoKICBAY2xhc3MgSlNPTlRy
184
+ YW5zZm9ybXMKICBAc3RhdGljCiAgQG5hbWVzcGFjZSBEUwoqLwpEUy5KU09O
185
+ VHJhbnNmb3JtcyA9IHsKICBzdHJpbmc6IHsKICAgIGRlc2VyaWFsaXplOiBm
186
+ dW5jdGlvbihzZXJpYWxpemVkKSB7CiAgICAgIHJldHVybiBpc05vbmUoc2Vy
187
+ aWFsaXplZCkgPyBudWxsIDogU3RyaW5nKHNlcmlhbGl6ZWQpOwogICAgfSwK
188
+ CiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKGRlc2VyaWFsaXplZCkgewogICAg
189
+ ICByZXR1cm4gaXNOb25lKGRlc2VyaWFsaXplZCkgPyBudWxsIDogU3RyaW5n
190
+ KGRlc2VyaWFsaXplZCk7CiAgICB9CiAgfSwKCiAgbnVtYmVyOiB7CiAgICBk
191
+ ZXNlcmlhbGl6ZTogZnVuY3Rpb24oc2VyaWFsaXplZCkgewogICAgICByZXR1
192
+ cm4gaXNFbXB0eShzZXJpYWxpemVkKSA/IG51bGwgOiBOdW1iZXIoc2VyaWFs
193
+ aXplZCk7CiAgICB9LAoKICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJp
194
+ YWxpemVkKSB7CiAgICAgIHJldHVybiBpc0VtcHR5KGRlc2VyaWFsaXplZCkg
195
+ PyBudWxsIDogTnVtYmVyKGRlc2VyaWFsaXplZCk7CiAgICB9CiAgfSwKCiAg
196
+ Ly8gSGFuZGxlcyB0aGUgZm9sbG93aW5nIGJvb2xlYW4gaW5wdXRzOgogIC8v
197
+ ICJUclVlIiwgInQiLCAiZiIsICJGQUxTRSIsIDAsIChub24temVybyksIG9y
198
+ IGJvb2xlYW4gdHJ1ZS9mYWxzZQogICdib29sZWFuJzogewogICAgZGVzZXJp
199
+ YWxpemU6IGZ1bmN0aW9uKHNlcmlhbGl6ZWQpIHsKICAgICAgdmFyIHR5cGUg
200
+ PSB0eXBlb2Ygc2VyaWFsaXplZDsKCiAgICAgIGlmICh0eXBlID09PSAiYm9v
201
+ bGVhbiIpIHsKICAgICAgICByZXR1cm4gc2VyaWFsaXplZDsKICAgICAgfSBl
202
+ bHNlIGlmICh0eXBlID09PSAic3RyaW5nIikgewogICAgICAgIHJldHVybiBz
203
+ ZXJpYWxpemVkLm1hdGNoKC9edHJ1ZSR8XnQkfF4xJC9pKSAhPT0gbnVsbDsK
204
+ ICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAibnVtYmVyIikgewogICAgICAg
205
+ IHJldHVybiBzZXJpYWxpemVkID09PSAxOwogICAgICB9IGVsc2UgewogICAg
206
+ ICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSwKCiAgICBzZXJpYWxp
207
+ emU6IGZ1bmN0aW9uKGRlc2VyaWFsaXplZCkgewogICAgICByZXR1cm4gQm9v
208
+ bGVhbihkZXNlcmlhbGl6ZWQpOwogICAgfQogIH0sCgogIGRhdGU6IHsKICAg
209
+ IGRlc2VyaWFsaXplOiBmdW5jdGlvbihzZXJpYWxpemVkKSB7CiAgICAgIHZh
210
+ ciB0eXBlID0gdHlwZW9mIHNlcmlhbGl6ZWQ7CgogICAgICBpZiAodHlwZSA9
211
+ PT0gInN0cmluZyIpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRW1iZXIu
212
+ RGF0ZS5wYXJzZShzZXJpYWxpemVkKSk7CiAgICAgIH0gZWxzZSBpZiAodHlw
213
+ ZSA9PT0gIm51bWJlciIpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoc2Vy
214
+ aWFsaXplZCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZCA9PT0gbnVs
215
+ bCB8fCBzZXJpYWxpemVkID09PSB1bmRlZmluZWQpIHsKICAgICAgICAvLyBp
216
+ ZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGRhdGEsCiAgICAg
217
+ ICAgLy8gcmV0dXJuIHVuZGVmaW5lZCwgbm90IG51bGwuCiAgICAgICAgcmV0
218
+ dXJuIHNlcmlhbGl6ZWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJu
219
+ IG51bGw7CiAgICAgIH0KICAgIH0sCgogICAgc2VyaWFsaXplOiBmdW5jdGlv
220
+ bihkYXRlKSB7CiAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgewog
221
+ ICAgICAgIHZhciBkYXlzID0gWyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQi
222
+ LCAiVGh1IiwgIkZyaSIsICJTYXQiXTsKICAgICAgICB2YXIgbW9udGhzID0g
223
+ WyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJK
224
+ dWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdOwoKICAg
225
+ ICAgICB2YXIgcGFkID0gZnVuY3Rpb24obnVtKSB7CiAgICAgICAgICByZXR1
226
+ cm4gbnVtIDwgMTAgPyAiMCIrbnVtIDogIiIrbnVtOwogICAgICAgIH07Cgog
227
+ ICAgICAgIHZhciB1dGNZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpLAog
228
+ ICAgICAgICAgICB1dGNNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKSwKICAg
229
+ ICAgICAgICAgdXRjRGF5T2ZNb250aCA9IGRhdGUuZ2V0VVRDRGF0ZSgpLAog
230
+ ICAgICAgICAgICB1dGNEYXkgPSBkYXRlLmdldFVUQ0RheSgpLAogICAgICAg
231
+ ICAgICB1dGNIb3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSwKICAgICAgICAg
232
+ ICAgdXRjTWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLAogICAgICAg
233
+ ICAgICB1dGNTZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCk7CgoKICAg
234
+ ICAgICB2YXIgZGF5T2ZXZWVrID0gZGF5c1t1dGNEYXldOwogICAgICAgIHZh
235
+ ciBkYXlPZk1vbnRoID0gcGFkKHV0Y0RheU9mTW9udGgpOwogICAgICAgIHZh
236
+ ciBtb250aCA9IG1vbnRoc1t1dGNNb250aF07CgogICAgICAgIHJldHVybiBk
237
+ YXlPZldlZWsgKyAiLCAiICsgZGF5T2ZNb250aCArICIgIiArIG1vbnRoICsg
238
+ IiAiICsgdXRjWWVhciArICIgIiArCiAgICAgICAgICAgICAgIHBhZCh1dGNI
239
+ b3VycykgKyAiOiIgKyBwYWQodXRjTWludXRlcykgKyAiOiIgKyBwYWQodXRj
240
+ U2Vjb25kcykgKyAiIEdNVCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0
241
+ dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICB9Cn07Cgp9KSgpOwoKCgooZnVu
242
+ Y3Rpb24oKSB7CnZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNl
243
+ dCwgaXNOb25lID0gRW1iZXIuaXNOb25lOwoKdmFyIHRyYW5zZm9ybXMgPSBE
244
+ Uy5KU09OVHJhbnNmb3JtczsKCi8vIFNpbXBsZSBkaXNwYXRjaGVyIHRvIHN1
245
+ cHBvcnQgb3ZlcnJpZGluZyB0aGUgYWxpYXNlZAovLyBtZXRob2QgaW4gc3Vi
246
+ Y2xhc3Nlcy4KZnVuY3Rpb24gYWxpYXNNZXRob2QobWV0aG9kTmFtZSkgewog
247
+ IHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzW21ldGhvZE5h
248
+ bWVdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfTsKfQoKRFMuSlNPTlNl
249
+ cmlhbGl6ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKICBwcmltYXJ5S2V5
250
+ OiAnaWQnLAoKICBkZXNlcmlhbGl6ZTogZnVuY3Rpb24odHlwZSwgZGF0YSkg
251
+ ewogICAgdmFyIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScpOwoKICAgIHR5
252
+ cGUuZWFjaFRyYW5zZm9ybWVkQXR0cmlidXRlKGZ1bmN0aW9uKGtleSwgdHlw
253
+ ZSkgewogICAgICBkYXRhW2tleV0gPSB0cmFuc2Zvcm1zW3R5cGVdLmRlc2Vy
254
+ aWFsaXplKGRhdGFba2V5XSk7CiAgICB9KTsKCiAgICB0eXBlLmVhY2hSZWxh
255
+ dGlvbnNoaXAoZnVuY3Rpb24oa2V5LCByZWxhdGlvbnNoaXApIHsKICAgICAg
256
+ Ly8gQSBsaW5rICh1c3VhbGx5IGEgVVJMKSB3YXMgYWxyZWFkeSBwcm92aWRl
257
+ ZCBpbgogICAgICAvLyBub3JtYWxpemVkIGZvcm0KICAgICAgaWYgKGRhdGEu
258
+ bGlua3MgJiYgZGF0YS5saW5rc1trZXldKSB7CiAgICAgICAgcmV0dXJuOwog
259
+ ICAgICB9CgogICAgICB2YXIgdHlwZSA9IHJlbGF0aW9uc2hpcC50eXBlLAog
260
+ ICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07CgogICAgICBpZiAodmFsdWUg
261
+ PT0gbnVsbCkgeyByZXR1cm47IH0KCiAgICAgIGlmIChyZWxhdGlvbnNoaXAu
262
+ a2luZCA9PT0gJ2JlbG9uZ3NUbycpIHsKICAgICAgICB0aGlzLmRlc2VyaWFs
263
+ aXplUmVjb3JkSWQoZGF0YSwga2V5LCByZWxhdGlvbnNoaXAsIHZhbHVlKTsK
264
+ ICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2hhc01h
265
+ bnknKSB7CiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZVJlY29yZElkcyhkYXRh
266
+ LCBrZXksIHJlbGF0aW9uc2hpcCwgdmFsdWUpOwogICAgICB9CiAgICB9LCB0
267
+ aGlzKTsKCiAgICByZXR1cm4gZGF0YTsKICB9LAoKICBkZXNlcmlhbGl6ZVJl
268
+ Y29yZElkOiBmdW5jdGlvbihkYXRhLCBrZXksIHJlbGF0aW9uc2hpcCwgaWQp
269
+ IHsKICAgIGlmIChpc05vbmUoaWQpIHx8IGlkIGluc3RhbmNlb2YgRFMuTW9k
270
+ ZWwpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciB0eXBlOwoKICAg
271
+ IGlmICh0eXBlb2YgaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBpZCA9PT0g
272
+ J3N0cmluZycpIHsKICAgICAgdHlwZSA9IHRoaXMudHlwZUZvcihyZWxhdGlv
273
+ bnNoaXAsIGtleSwgZGF0YSk7CiAgICAgIGRhdGFba2V5XSA9IGdldCh0aGlz
274
+ LCAnc3RvcmUnKS5yZWNvcmRGb3JJZCh0eXBlLCBpZCk7CiAgICB9IGVsc2Ug
275
+ aWYgKHR5cGVvZiBpZCA9PT0gJ29iamVjdCcpIHsKICAgICAgLy8gcG9seW1v
276
+ cnBoaWMKICAgICAgZGF0YVtrZXldID0gZ2V0KHRoaXMsICdzdG9yZScpLnJl
277
+ Y29yZEZvcklkKGlkLnR5cGUsIGlkLmlkKTsKICAgIH0KICB9LAoKICBkZXNl
278
+ cmlhbGl6ZVJlY29yZElkczogZnVuY3Rpb24oZGF0YSwga2V5LCByZWxhdGlv
279
+ bnNoaXAsIGlkcykgewogICAgZm9yICh2YXIgaT0wLCBsPWlkcy5sZW5ndGg7
280
+ IGk8bDsgaSsrKSB7CiAgICAgIHRoaXMuZGVzZXJpYWxpemVSZWNvcmRJZChp
281
+ ZHMsIGksIHJlbGF0aW9uc2hpcCwgaWRzW2ldKTsKICAgIH0KICB9LAoKICAv
282
+ LyBTRVJJQUxJWkUKCiAgc2VyaWFsaXplOiBmdW5jdGlvbihyZWNvcmQsIG9w
283
+ dGlvbnMpIHsKICAgIHZhciBzdG9yZSA9IGdldCh0aGlzLCAnc3RvcmUnKTsK
284
+ CiAgICB2YXIganNvbiA9IHt9OwoKICAgIGlmIChvcHRpb25zICYmIG9wdGlv
285
+ bnMuaW5jbHVkZUlkKSB7CiAgICAgIHZhciBpZCA9IGdldChyZWNvcmQsICdp
286
+ ZCcpOwoKICAgICAgaWYgKGlkKSB7CiAgICAgICAganNvbltnZXQodGhpcywg
287
+ J3ByaW1hcnlLZXknKV0gPSBnZXQocmVjb3JkLCAnaWQnKTsKICAgICAgfQog
288
+ ICAgfQoKICAgIHZhciBhdHRycyA9IGdldCh0aGlzLCAnYXR0cnMnKTsKCiAg
289
+ ICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXksIGF0dHJpYnV0
290
+ ZSkgewogICAgICB2YXIgdmFsdWUgPSBnZXQocmVjb3JkLCBrZXkpLCB0eXBl
291
+ ID0gYXR0cmlidXRlLnR5cGU7CgogICAgICBpZiAodHlwZSkgewogICAgICAg
292
+ IHZhbHVlID0gdHJhbnNmb3Jtc1t0eXBlXS5zZXJpYWxpemUodmFsdWUpOwog
293
+ ICAgICB9CgogICAgICAvLyBpZiBwcm92aWRlZCwgdXNlIHRoZSBtYXBwaW5n
294
+ IHByb3ZpZGVkIGJ5IGBhdHRyc2AgaW4KICAgICAgLy8gdGhlIHNlcmlhbGl6
295
+ ZXIKICAgICAga2V5ID0gYXR0cnMgJiYgYXR0cnNba2V5XSB8fCBrZXk7Cgog
296
+ ICAgICBqc29uW2tleV0gPSB2YWx1ZTsKICAgIH0sIHRoaXMpOwoKICAgIHJl
297
+ Y29yZC5lYWNoUmVsYXRpb25zaGlwKGZ1bmN0aW9uKGtleSwgcmVsYXRpb25z
298
+ aGlwKSB7CiAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2JlbG9u
299
+ Z3NUbycpIHsKICAgICAgICB0aGlzLnNlcmlhbGl6ZUJlbG9uZ3NUbyhyZWNv
300
+ cmQsIGpzb24sIHJlbGF0aW9uc2hpcCk7CiAgICAgIH0gZWxzZSBpZiAocmVs
301
+ YXRpb25zaGlwLmtpbmQgPT09ICdoYXNNYW55JykgewogICAgICAgIHRoaXMu
302
+ c2VyaWFsaXplSGFzTWFueShyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCk7
303
+ CiAgICAgIH0KICAgIH0sIHRoaXMpOwoKICAgIHJldHVybiBqc29uOwogIH0s
304
+ CgogIHNlcmlhbGl6ZUJlbG9uZ3NUbzogZnVuY3Rpb24ocmVjb3JkLCBqc29u
305
+ LCByZWxhdGlvbnNoaXApIHsKICAgIHZhciBrZXkgPSByZWxhdGlvbnNoaXAu
306
+ a2V5OwoKICAgIHZhciBiZWxvbmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwoK
307
+ ICAgIGlmIChpc05vbmUoYmVsb25nc1RvKSkgeyByZXR1cm47IH0KCiAgICBq
308
+ c29uW2tleV0gPSBnZXQoYmVsb25nc1RvLCAnaWQnKTsKCiAgICBpZiAocmVs
309
+ YXRpb25zaGlwLm9wdGlvbnMucG9seW1vcnBoaWMpIHsKICAgICAganNvbltr
310
+ ZXkgKyAiX3R5cGUiXSA9IGJlbG9uZ3NUby5jb25zdHJ1Y3Rvci50eXBlS2V5
311
+ OwogICAgfQogIH0sCgogIHNlcmlhbGl6ZUhhc01hbnk6IEVtYmVyLkssCgog
312
+ IC8vIEVYVFJBQ1QKCiAgZXh0cmFjdDogZnVuY3Rpb24oc3RvcmUsIHR5cGUs
313
+ IHBheWxvYWQsIGlkLCByZXF1ZXN0VHlwZSkgewogICAgdmFyIHNwZWNpZmlj
314
+ RXh0cmFjdCA9ICJleHRyYWN0IiArIHJlcXVlc3RUeXBlLmNoYXJBdCgwKS50
315
+ b1VwcGVyQ2FzZSgpICsgcmVxdWVzdFR5cGUuc3Vic3RyKDEpOwogICAgcmV0
316
+ dXJuIHRoaXNbc3BlY2lmaWNFeHRyYWN0XShzdG9yZSwgdHlwZSwgcGF5bG9h
317
+ ZCwgaWQsIHJlcXVlc3RUeXBlKTsKICB9LAoKICBleHRyYWN0RmluZEFsbDog
318
+ YWxpYXNNZXRob2QoJ2V4dHJhY3RBcnJheScpLAogIGV4dHJhY3RGaW5kUXVl
319
+ cnk6IGFsaWFzTWV0aG9kKCdleHRyYWN0QXJyYXknKSwKICBleHRyYWN0Rmlu
320
+ ZE1hbnk6IGFsaWFzTWV0aG9kKCdleHRyYWN0QXJyYXknKSwKICBleHRyYWN0
321
+ RmluZEhhc01hbnk6IGFsaWFzTWV0aG9kKCdleHRyYWN0QXJyYXknKSwKCiAg
322
+ ZXh0cmFjdENyZWF0ZVJlY29yZDogYWxpYXNNZXRob2QoJ2V4dHJhY3RTYXZl
323
+ JyksCiAgZXh0cmFjdFVwZGF0ZVJlY29yZDogYWxpYXNNZXRob2QoJ2V4dHJh
324
+ Y3RTYXZlJyksCiAgZXh0cmFjdERlbGV0ZVJlY29yZDogYWxpYXNNZXRob2Qo
325
+ J2V4dHJhY3RTYXZlJyksCgogIGV4dHJhY3RGaW5kOiBhbGlhc01ldGhvZCgn
326
+ ZXh0cmFjdFNpbmdsZScpLAogIGV4dHJhY3RTYXZlOiBhbGlhc01ldGhvZCgn
327
+ ZXh0cmFjdFNpbmdsZScpLAoKICBleHRyYWN0U2luZ2xlOiBmdW5jdGlvbihz
328
+ dG9yZSwgdHlwZSwgcGF5bG9hZCkgewogICAgcmV0dXJuIHBheWxvYWQ7CiAg
329
+ fSwKCiAgZXh0cmFjdEFycmF5OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5
330
+ bG9hZCkgewogICAgcmV0dXJuIHBheWxvYWQ7CiAgfSwKICAvLyBIRUxQRVJT
331
+ CgogIHR5cGVGb3I6IGZ1bmN0aW9uKHJlbGF0aW9uc2hpcCwga2V5LCBkYXRh
332
+ KSB7CiAgICBpZiAocmVsYXRpb25zaGlwLm9wdGlvbnMucG9seW1vcnBoaWMp
333
+ IHsKICAgICAgcmV0dXJuIGRhdGFba2V5ICsgIl90eXBlIl07CiAgICB9IGVs
334
+ c2UgewogICAgICByZXR1cm4gcmVsYXRpb25zaGlwLnR5cGU7CiAgICB9CiAg
335
+ fSwKCiAgZWFjaEVtYmVkZGVkUmVjb3JkOiBmdW5jdGlvbigpIHsKICAgIC8v
336
+ IHRoaXMgaXMgdXNlZCBieSB0cmFuc2FjdGlvbi5hZGQKICB9Cn0pOwoKfSko
337
+ KTsKCgoKKGZ1bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEK
338
+ Ki8KdmFyIGdldCA9IEVtYmVyLmdldCwgY2FwaXRhbGl6ZSA9IEVtYmVyLlN0
339
+ cmluZy5jYXBpdGFsaXplLCB1bmRlcnNjb3JlID0gRW1iZXIuU3RyaW5nLnVu
340
+ ZGVyc2NvcmUsIERTID0gd2luZG93LkRTIDsKCi8qKgogIEV4dGVuZCBgRW1i
341
+ ZXIuRGF0YUFkYXB0ZXJgIHdpdGggRUQgc3BlY2lmaWMgY29kZS4KKi8KRFMu
342
+ RGVidWdBZGFwdGVyID0gRW1iZXIuRGF0YUFkYXB0ZXIuZXh0ZW5kKHsKICBn
343
+ ZXRGaWx0ZXJzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBbCiAgICAgIHsg
344
+ bmFtZTogJ2lzTmV3JywgZGVzYzogJ05ldycgfSwKICAgICAgeyBuYW1lOiAn
345
+ aXNNb2RpZmllZCcsIGRlc2M6ICdNb2RpZmllZCcgfSwKICAgICAgeyBuYW1l
346
+ OiAnaXNDbGVhbicsIGRlc2M6ICdDbGVhbicgfQogICAgXTsKICB9LAoKICBk
347
+ ZXRlY3Q6IGZ1bmN0aW9uKGtsYXNzKSB7CiAgICByZXR1cm4ga2xhc3MgIT09
348
+ IERTLk1vZGVsICYmIERTLk1vZGVsLmRldGVjdChrbGFzcyk7CiAgfSwKCiAg
349
+ Y29sdW1uc0ZvclR5cGU6IGZ1bmN0aW9uKHR5cGUpIHsKICAgIHZhciBjb2x1
350
+ bW5zID0gW3sgbmFtZTogJ2lkJywgZGVzYzogJ0lkJyB9XSwgY291bnQgPSAw
351
+ LCBzZWxmID0gdGhpczsKICAgIEVtYmVyLkEoZ2V0KHR5cGUsICdhdHRyaWJ1
352
+ dGVzJykpLmZvckVhY2goZnVuY3Rpb24obmFtZSwgbWV0YSkgewogICAgICAg
353
+ IGlmIChjb3VudCsrID4gc2VsZi5hdHRyaWJ1dGVMaW1pdCkgeyByZXR1cm4g
354
+ ZmFsc2U7IH0KICAgICAgICB2YXIgZGVzYyA9IGNhcGl0YWxpemUodW5kZXJz
355
+ Y29yZShuYW1lKS5yZXBsYWNlKCdfJywgJyAnKSk7CiAgICAgICAgY29sdW1u
356
+ cy5wdXNoKHsgbmFtZTogbmFtZSwgZGVzYzogZGVzYyB9KTsKICAgIH0pOwog
357
+ ICAgcmV0dXJuIGNvbHVtbnM7CiAgfSwKCiAgZ2V0UmVjb3JkczogZnVuY3Rp
358
+ b24odHlwZSkgewogICAgcmV0dXJuIHRoaXMuZ2V0KCdzdG9yZScpLmFsbCh0
359
+ eXBlKTsKICB9LAoKICBnZXRSZWNvcmRDb2x1bW5WYWx1ZXM6IGZ1bmN0aW9u
360
+ KHJlY29yZCkgewogICAgdmFyIHNlbGYgPSB0aGlzLCBjb3VudCA9IDAsCiAg
361
+ ICAgICAgY29sdW1uVmFsdWVzID0geyBpZDogZ2V0KHJlY29yZCwgJ2lkJykg
362
+ fTsKCiAgICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXkpIHsK
363
+ ICAgICAgaWYgKGNvdW50KysgPiBzZWxmLmF0dHJpYnV0ZUxpbWl0KSB7CiAg
364
+ ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciB2YWx1ZSA9
365
+ IGdldChyZWNvcmQsIGtleSk7CiAgICAgIGNvbHVtblZhbHVlc1trZXldID0g
366
+ dmFsdWU7CiAgICB9KTsKICAgIHJldHVybiBjb2x1bW5WYWx1ZXM7CiAgfSwK
367
+ CiAgZ2V0UmVjb3JkS2V5d29yZHM6IGZ1bmN0aW9uKHJlY29yZCkgewogICAg
368
+ dmFyIGtleXdvcmRzID0gW10sIGtleXMgPSBFbWJlci5BKFsnaWQnXSk7CiAg
369
+ ICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXkpIHsKICAgICAg
370
+ a2V5cy5wdXNoKGtleSk7CiAgICB9KTsKICAgIGtleXMuZm9yRWFjaChmdW5j
371
+ dGlvbihrZXkpIHsKICAgICAga2V5d29yZHMucHVzaChnZXQocmVjb3JkLCBr
372
+ ZXkpKTsKICAgIH0pOwogICAgcmV0dXJuIGtleXdvcmRzOwogIH0sCgogIGdl
373
+ dFJlY29yZEZpbHRlclZhbHVlczogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICBy
374
+ ZXR1cm4gewogICAgICBpc05ldzogcmVjb3JkLmdldCgnaXNOZXcnKSwKICAg
375
+ ICAgaXNNb2RpZmllZDogcmVjb3JkLmdldCgnaXNEaXJ0eScpICYmICFyZWNv
376
+ cmQuZ2V0KCdpc05ldycpLAogICAgICBpc0NsZWFuOiAhcmVjb3JkLmdldCgn
377
+ aXNEaXJ0eScpCiAgICB9OwogIH0sCgogIGdldFJlY29yZENvbG9yOiBmdW5j
378
+ dGlvbihyZWNvcmQpIHsKICAgIHZhciBjb2xvciA9ICdibGFjayc7CiAgICBp
379
+ ZiAocmVjb3JkLmdldCgnaXNOZXcnKSkgewogICAgICBjb2xvciA9ICdncmVl
380
+ bic7CiAgICB9IGVsc2UgaWYgKHJlY29yZC5nZXQoJ2lzRGlydHknKSkgewog
381
+ ICAgICBjb2xvciA9ICdibHVlJzsKICAgIH0KICAgIHJldHVybiBjb2xvcjsK
382
+ ICB9LAoKICBvYnNlcnZlUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQsIHJlY29y
383
+ ZFVwZGF0ZWQpIHsKICAgIHZhciByZWxlYXNlTWV0aG9kcyA9IEVtYmVyLkEo
384
+ KSwgc2VsZiA9IHRoaXMsCiAgICAgICAga2V5c1RvT2JzZXJ2ZSA9IEVtYmVy
385
+ LkEoWydpZCcsICdpc05ldycsICdpc0RpcnR5J10pOwoKICAgIHJlY29yZC5l
386
+ YWNoQXR0cmlidXRlKGZ1bmN0aW9uKGtleSkgewogICAgICBrZXlzVG9PYnNl
387
+ cnZlLnB1c2goa2V5KTsKICAgIH0pOwoKICAgIGtleXNUb09ic2VydmUuZm9y
388
+ RWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBmdW5j
389
+ dGlvbigpIHsKICAgICAgICByZWNvcmRVcGRhdGVkKHNlbGYud3JhcFJlY29y
390
+ ZChyZWNvcmQpKTsKICAgICAgfTsKICAgICAgRW1iZXIuYWRkT2JzZXJ2ZXIo
391
+ cmVjb3JkLCBrZXksIGhhbmRsZXIpOwogICAgICByZWxlYXNlTWV0aG9kcy5w
392
+ dXNoKGZ1bmN0aW9uKCkgewogICAgICAgIEVtYmVyLnJlbW92ZU9ic2VydmVy
393
+ KHJlY29yZCwga2V5LCBoYW5kbGVyKTsKICAgICAgfSk7CiAgICB9KTsKCiAg
394
+ ICB2YXIgcmVsZWFzZSA9IGZ1bmN0aW9uKCkgewogICAgICByZWxlYXNlTWV0
395
+ aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKGZuKSB7IGZuKCk7IH0gKTsKICAgIH07
396
+ CgogICAgcmV0dXJuIHJlbGVhc2U7CiAgfQoKfSk7Cgp9KSgpOwoKCgooZnVu
397
+ Y3Rpb24oKSB7Ci8qKgogIEBtb2R1bGUgZW1iZXItZGF0YQoqLwoKdmFyIHNl
398
+ dCA9IEVtYmVyLnNldDsKCi8qCiAgVGhpcyBjb2RlIHJlZ2lzdGVycyBhbiBp
399
+ bmplY3Rpb24gZm9yIEVtYmVyLkFwcGxpY2F0aW9uLgoKICBJZiBhbiBFbWJl
400
+ ci5qcyBkZXZlbG9wZXIgZGVmaW5lcyBhIHN1YmNsYXNzIG9mIERTLlN0b3Jl
401
+ IG9uIHRoZWlyIGFwcGxpY2F0aW9uLAogIHRoaXMgY29kZSB3aWxsIGF1dG9t
402
+ YXRpY2FsbHkgaW5zdGFudGlhdGUgaXQgYW5kIG1ha2UgaXQgYXZhaWxhYmxl
403
+ IG9uIHRoZQogIHJvdXRlci4KCiAgQWRkaXRpb25hbGx5LCBhZnRlciBhbiBh
404
+ cHBsaWNhdGlvbidzIGNvbnRyb2xsZXJzIGhhdmUgYmVlbiBpbmplY3RlZCwg
405
+ dGhleSB3aWxsCiAgZWFjaCBoYXZlIHRoZSBzdG9yZSBtYWRlIGF2YWlsYWJs
406
+ ZSB0byB0aGVtLgoKICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhbiBFbWJlci5q
407
+ cyBhcHBsaWNhdGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKCiAg
408
+ QXBwLlN0b3JlID0gRFMuU3RvcmUuZXh0ZW5kKHsKICAgIGFkYXB0ZXI6ICdB
409
+ cHAuTXlDdXN0b21BZGFwdGVyJwogIH0pOwoKICBBcHAuUG9zdHNDb250cm9s
410
+ bGVyID0gRW1iZXIuQXJyYXlDb250cm9sbGVyLmV4dGVuZCh7CiAgICAvLyAu
411
+ Li4KICB9KTsKCiAgV2hlbiB0aGUgYXBwbGljYXRpb24gaXMgaW5pdGlhbGl6
412
+ ZWQsIGBBcHAuU3RvcmVgIHdpbGwgYXV0b21hdGljYWxseSBiZQogIGluc3Rh
413
+ bnRpYXRlZCwgYW5kIHRoZSBpbnN0YW5jZSBvZiBgQXBwLlBvc3RzQ29udHJv
414
+ bGxlcmAgd2lsbCBoYXZlIGl0cyBgc3RvcmVgCiAgcHJvcGVydHkgc2V0IHRv
415
+ IHRoYXQgaW5zdGFuY2UuCgogIE5vdGUgdGhhdCB0aGlzIGNvZGUgd2lsbCBv
416
+ bmx5IGJlIHJ1biBpZiB0aGUgYGVtYmVyLWFwcGxpY2F0aW9uYCBwYWNrYWdl
417
+ IGlzCiAgbG9hZGVkLiBJZiBFbWJlciBEYXRhIGlzIGJlaW5nIHVzZWQgaW4g
418
+ YW4gZW52aXJvbm1lbnQgb3RoZXIgdGhhbiBhCiAgdHlwaWNhbCBhcHBsaWNh
419
+ dGlvbiAoZS5nLiwgbm9kZS5qcyB3aGVyZSBvbmx5IGBlbWJlci1ydW50aW1l
420
+ YCBpcyBhdmFpbGFibGUpLAogIHRoaXMgY29kZSB3aWxsIGJlIGlnbm9yZWQu
421
+ CiovCgpFbWJlci5vbkxvYWQoJ0VtYmVyLkFwcGxpY2F0aW9uJywgZnVuY3Rp
422
+ b24oQXBwbGljYXRpb24pIHsKICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7
423
+ CiAgICBuYW1lOiAic3RvcmUiLAoKICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u
424
+ KGNvbnRhaW5lciwgYXBwbGljYXRpb24pIHsKICAgICAgYXBwbGljYXRpb24u
425
+ cmVnaXN0ZXIoJ3N0b3JlOm1haW4nLCBhcHBsaWNhdGlvbi5TdG9yZSB8fCBE
426
+ Uy5TdG9yZSk7CiAgICAgIGFwcGxpY2F0aW9uLnJlZ2lzdGVyKCdzZXJpYWxp
427
+ emVyOl9kZWZhdWx0JywgRFMuSlNPTlNlcmlhbGl6ZXIpOwogICAgICBhcHBs
428
+ aWNhdGlvbi5yZWdpc3Rlcignc2VyaWFsaXplcjpfcmVzdCcsIERTLlJFU1RT
429
+ ZXJpYWxpemVyKTsKICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2FkYXB0
430
+ ZXI6X3Jlc3QnLCBEUy5SRVNUQWRhcHRlcik7CgogICAgICAvLyBFYWdlcmx5
431
+ IGdlbmVyYXRlIHRoZSBzdG9yZSBzbyBkZWZhdWx0U3RvcmUgaXMgcG9wdWxh
432
+ dGVkLgogICAgICAvLyBUT0RPOiBEbyB0aGlzIGluIGEgZmluaXNoZXIgaG9v
433
+ awogICAgICBjb250YWluZXIubG9va3VwKCdzdG9yZTptYWluJyk7CiAgICB9
434
+ CiAgfSk7CgogIC8vIEtlZXAgRUQgY29tcGF0aWJsZSB3aXRoIHByZXZpb3Vz
435
+ IHZlcnNpb25zIG9mIGVtYmVyCiAgLy8gVE9ETzogUmVtb3ZlIHRoZSBpZiBz
436
+ dGF0ZW1lbnQgZm9yIEVtYmVyIDEuMAogIGlmIChEUy5EZWJ1Z0FkYXB0ZXIp
437
+ IHsKICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKICAgICAgbmFtZTog
438
+ ImRhdGFBZGFwdGVyIiwKCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNv
439
+ bnRhaW5lciwgYXBwbGljYXRpb24pIHsKICAgICAgICBhcHBsaWNhdGlvbi5y
440
+ ZWdpc3RlcignZGF0YUFkYXB0ZXI6bWFpbicsIERTLkRlYnVnQWRhcHRlcik7
441
+ CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQXBwbGljYXRpb24uaW5pdGlhbGl6
442
+ ZXIoewogICAgbmFtZTogImRhdGFBZGFwdGVyIiwKCiAgICBpbml0aWFsaXpl
443
+ OiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7CiAgICAgIGFw
444
+ cGxpY2F0aW9uLnJlZ2lzdGVyKCdkYXRhQWRhcHRlcjptYWluJywgRFMuRGVi
445
+ dWdBZGFwdGVyKTsKICAgIH0KICB9KTsKCiAgQXBwbGljYXRpb24uaW5pdGlh
446
+ bGl6ZXIoewogICAgbmFtZTogImluamVjdFN0b3JlIiwKCiAgICBpbml0aWFs
447
+ aXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7CiAgICAg
448
+ IGFwcGxpY2F0aW9uLmluamVjdCgnY29udHJvbGxlcicsICdzdG9yZScsICdz
449
+ dG9yZTptYWluJyk7CiAgICAgIGFwcGxpY2F0aW9uLmluamVjdCgncm91dGUn
450
+ LCAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOwogICAgICBhcHBsaWNhdGlvbi5p
451
+ bmplY3QoJ3NlcmlhbGl6ZXInLCAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOwog
452
+ ICAgICBhcHBsaWNhdGlvbi5pbmplY3QoJ2RhdGFBZGFwdGVyJywgJ3N0b3Jl
453
+ JywgJ3N0b3JlOm1haW4nKTsKICAgIH0KICB9KTsKCn0pOwoKfSkoKTsKCgoK
454
+ KGZ1bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCi8q
455
+ KgogIERhdGUucGFyc2Ugd2l0aCBwcm9ncmVzc2l2ZSBlbmhhbmNlbWVudCBm
456
+ b3IgSVNPIDg2MDEgPGh0dHBzOi8vZ2l0aHViLmNvbS9jc25vdmVyL2pzLWlz
457
+ bzg2MDE+CgogIMKpIDIwMTEgQ29saW4gU25vdmVyIDxodHRwOi8vemV0YWZs
458
+ ZWV0LmNvbT4KCiAgUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCgogIEBj
459
+ bGFzcyBEYXRlCiAgQG5hbWVzcGFjZSBFbWJlcgogIEBzdGF0aWMKKi8KRW1i
460
+ ZXIuRGF0ZSA9IEVtYmVyLkRhdGUgfHwge307Cgp2YXIgb3JpZ1BhcnNlID0g
461
+ RGF0ZS5wYXJzZSwgbnVtZXJpY0tleXMgPSBbIDEsIDQsIDUsIDYsIDcsIDEw
462
+ LCAxMSBdOwoKLyoqCiAgQG1ldGhvZCBwYXJzZQogIEBwYXJhbSBkYXRlCiov
463
+ CkVtYmVyLkRhdGUucGFyc2UgPSBmdW5jdGlvbiAoZGF0ZSkgewogICAgdmFy
464
+ IHRpbWVzdGFtcCwgc3RydWN0LCBtaW51dGVzT2Zmc2V0ID0gMDsKCiAgICAv
465
+ LyBFUzUgwqcxNS45LjQuMiBzdGF0ZXMgdGhhdCB0aGUgc3RyaW5nIHNob3Vs
466
+ ZCBhdHRlbXB0IHRvIGJlIHBhcnNlZCBhcyBhIERhdGUgVGltZSBTdHJpbmcg
467
+ Rm9ybWF0IHN0cmluZwogICAgLy8gYmVmb3JlIGZhbGxpbmcgYmFjayB0byBh
468
+ bnkgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgZGF0ZSBwYXJzaW5nLCBzbyB0
469
+ aGF04oCZcyB3aGF0IHdlIGRvLCBldmVuIGlmIG5hdGl2ZQogICAgLy8gaW1w
470
+ bGVtZW50YXRpb25zIGNvdWxkIGJlIGZhc3RlcgogICAgLy8gICAgICAgICAg
471
+ ICAgIDEgWVlZWSAgICAgICAgICAgICAgICAyIE1NICAgICAgIDMgREQgICAg
472
+ ICAgICAgIDQgSEggICAgNSBtbSAgICAgICA2IHNzICAgICAgICA3IG1zZWMg
473
+ ICAgICAgIDggWiA5IMKxICAgIDEwIHR6SEggICAgMTEgdHptbQogICAgaWYg
474
+ KChzdHJ1Y3QgPSAvXihcZHs0fXxbK1wtXVxkezZ9KSg/Oi0oXGR7Mn0pKD86
475
+ LShcZHsyfSkpPyk/KD86VChcZHsyfSk6KFxkezJ9KSg/OjooXGR7Mn0pKD86
476
+ XC4oXGR7M30pKT8pPyg/OihaKXwoWytcLV0pKFxkezJ9KSg/OjooXGR7Mn0p
477
+ KT8pPyk/JC8uZXhlYyhkYXRlKSkpIHsKICAgICAgICAvLyBhdm9pZCBOYU4g
478
+ dGltZXN0YW1wcyBjYXVzZWQgYnkg4oCcdW5kZWZpbmVk4oCdIHZhbHVlcyBi
479
+ ZWluZyBwYXNzZWQgdG8gRGF0ZS5VVEMKICAgICAgICBmb3IgKHZhciBpID0g
480
+ MCwgazsgKGsgPSBudW1lcmljS2V5c1tpXSk7ICsraSkgewogICAgICAgICAg
481
+ ICBzdHJ1Y3Rba10gPSArc3RydWN0W2tdIHx8IDA7CiAgICAgICAgfQoKICAg
482
+ ICAgICAvLyBhbGxvdyB1bmRlZmluZWQgZGF5cyBhbmQgbW9udGhzCiAgICAg
483
+ ICAgc3RydWN0WzJdID0gKCtzdHJ1Y3RbMl0gfHwgMSkgLSAxOwogICAgICAg
484
+ IHN0cnVjdFszXSA9ICtzdHJ1Y3RbM10gfHwgMTsKCiAgICAgICAgaWYgKHN0
485
+ cnVjdFs4XSAhPT0gJ1onICYmIHN0cnVjdFs5XSAhPT0gdW5kZWZpbmVkKSB7
486
+ CiAgICAgICAgICAgIG1pbnV0ZXNPZmZzZXQgPSBzdHJ1Y3RbMTBdICogNjAg
487
+ KyBzdHJ1Y3RbMTFdOwoKICAgICAgICAgICAgaWYgKHN0cnVjdFs5XSA9PT0g
488
+ JysnKSB7CiAgICAgICAgICAgICAgICBtaW51dGVzT2Zmc2V0ID0gMCAtIG1p
489
+ bnV0ZXNPZmZzZXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
490
+ IHRpbWVzdGFtcCA9IERhdGUuVVRDKHN0cnVjdFsxXSwgc3RydWN0WzJdLCBz
491
+ dHJ1Y3RbM10sIHN0cnVjdFs0XSwgc3RydWN0WzVdICsgbWludXRlc09mZnNl
492
+ dCwgc3RydWN0WzZdLCBzdHJ1Y3RbN10pOwogICAgfQogICAgZWxzZSB7CiAg
493
+ ICAgICAgdGltZXN0YW1wID0gb3JpZ1BhcnNlID8gb3JpZ1BhcnNlKGRhdGUp
494
+ IDogTmFOOwogICAgfQoKICAgIHJldHVybiB0aW1lc3RhbXA7Cn07CgppZiAo
495
+ RW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwgRW1iZXIuRVhU
496
+ RU5EX1BST1RPVFlQRVMuRGF0ZSkgewogIERhdGUucGFyc2UgPSBFbWJlci5E
497
+ YXRlLnBhcnNlOwp9Cgp9KSgpOwoKCgooZnVuY3Rpb24oKSB7Cgp9KSgpOwoK
498
+ CgooZnVuY3Rpb24oKSB7Ci8qKgogIEBtb2R1bGUgZW1iZXItZGF0YQoqLwoK
499
+ dmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0OwoKLyoqCiAg
500
+ QSByZWNvcmQgYXJyYXkgaXMgYW4gYXJyYXkgdGhhdCBjb250YWlucyByZWNv
501
+ cmRzIG9mIGEgY2VydGFpbiB0eXBlLiBUaGUgcmVjb3JkCiAgYXJyYXkgbWF0
502
+ ZXJpYWxpemVzIHJlY29yZHMgYXMgbmVlZGVkIHdoZW4gdGhleSBhcmUgcmV0
503
+ cmlldmVkIGZvciB0aGUgZmlyc3QKICB0aW1lLiBZb3Ugc2hvdWxkIG5vdCBj
504
+ cmVhdGUgcmVjb3JkIGFycmF5cyB5b3Vyc2VsZi4gSW5zdGVhZCwgYW4gaW5z
505
+ dGFuY2Ugb2YKICBEUy5SZWNvcmRBcnJheSBvciBpdHMgc3ViY2xhc3NlcyB3
506
+ aWxsIGJlIHJldHVybmVkIGJ5IHlvdXIgYXBwbGljYXRpb24ncyBzdG9yZQog
507
+ IGluIHJlc3BvbnNlIHRvIHF1ZXJpZXMuCgogIEBjbGFzcyBSZWNvcmRBcnJh
508
+ eQogIEBuYW1lc3BhY2UgRFMKICBAZXh0ZW5kcyBFbWJlci5BcnJheVByb3h5
509
+ CiAgQHVzZXMgRW1iZXIuRXZlbnRlZAoqLwoKRFMuUmVjb3JkQXJyYXkgPSBF
510
+ bWJlci5BcnJheVByb3h5LmV4dGVuZChFbWJlci5FdmVudGVkLCB7CiAgLyoq
511
+ CiAgICBUaGUgbW9kZWwgdHlwZSBjb250YWluZWQgYnkgdGhpcyByZWNvcmQg
512
+ YXJyYXkuCgogICAgQHByb3BlcnR5IHR5cGUKICAgIEB0eXBlIERTLk1vZGVs
513
+ CiAgKi8KICB0eXBlOiBudWxsLAoKICAvLyBUaGUgYXJyYXkgb2YgY2xpZW50
514
+ IGlkcyBiYWNraW5nIHRoZSByZWNvcmQgYXJyYXkuIFdoZW4gYQogIC8vIHJl
515
+ Y29yZCBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgcmVjb3JkIGFycmF5LCB0aGUg
516
+ cmVjb3JkCiAgLy8gZm9yIHRoZSBjbGllbnQgaWQgYXQgdGhlIHNhbWUgaW5k
517
+ ZXggaXMgbWF0ZXJpYWxpemVkLCBpZgogIC8vIG5lY2Vzc2FyeSwgYnkgdGhl
518
+ IHN0b3JlLgogIGNvbnRlbnQ6IG51bGwsCgogIGlzTG9hZGVkOiBmYWxzZSwK
519
+ ICBpc1VwZGF0aW5nOiBmYWxzZSwKCiAgLy8gVGhlIHN0b3JlIHRoYXQgY3Jl
520
+ YXRlZCB0aGlzIHJlY29yZCBhcnJheS4KICBzdG9yZTogbnVsbCwKCiAgb2Jq
521
+ ZWN0QXRDb250ZW50OiBmdW5jdGlvbihpbmRleCkgewogICAgdmFyIGNvbnRl
522
+ bnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKCiAgICByZXR1cm4gY29udGVu
523
+ dC5vYmplY3RBdChpbmRleCk7CiAgfSwKCiAgdXBkYXRlOiBmdW5jdGlvbigp
524
+ IHsKICAgIGlmIChnZXQodGhpcywgJ2lzVXBkYXRpbmcnKSkgeyByZXR1cm47
525
+ IH0KCiAgICB2YXIgc3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyksCiAgICAg
526
+ ICAgdHlwZSA9IGdldCh0aGlzLCAndHlwZScpOwoKICAgIHN0b3JlLmZldGNo
527
+ QWxsKHR5cGUsIHRoaXMpOwogIH0sCgogIGFkZFJlY29yZDogZnVuY3Rpb24o
528
+ cmVjb3JkKSB7CiAgICBnZXQodGhpcywgJ2NvbnRlbnQnKS5hZGRPYmplY3Qo
529
+ cmVjb3JkKTsKICB9LAoKICByZW1vdmVSZWNvcmQ6IGZ1bmN0aW9uKHJlY29y
530
+ ZCkgewogICAgZ2V0KHRoaXMsICdjb250ZW50JykucmVtb3ZlT2JqZWN0KHJl
531
+ Y29yZCk7CiAgfQp9KTsKCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAg
532
+ QG1vZHVsZSBlbWJlci1kYXRhCiovCgp2YXIgZ2V0ID0gRW1iZXIuZ2V0OwoK
533
+ LyoqCiAgQGNsYXNzIEZpbHRlcmVkUmVjb3JkQXJyYXkKICBAbmFtZXNwYWNl
534
+ IERTCiAgQGV4dGVuZHMgRFMuUmVjb3JkQXJyYXkKKi8KRFMuRmlsdGVyZWRS
535
+ ZWNvcmRBcnJheSA9IERTLlJlY29yZEFycmF5LmV4dGVuZCh7CiAgZmlsdGVy
536
+ RnVuY3Rpb246IG51bGwsCiAgaXNMb2FkZWQ6IHRydWUsCgogIHJlcGxhY2U6
537
+ IGZ1bmN0aW9uKCkgewogICAgdmFyIHR5cGUgPSBnZXQodGhpcywgJ3R5cGUn
538
+ KS50b1N0cmluZygpOwogICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVzdWx0
539
+ IG9mIGEgY2xpZW50LXNpZGUgZmlsdGVyIChvbiAiICsgdHlwZSArICIpIGlz
540
+ IGltbXV0YWJsZS4iKTsKICB9LAoKICB1cGRhdGVGaWx0ZXI6IEVtYmVyLm9i
541
+ c2VydmVyKGZ1bmN0aW9uKCkgewogICAgdmFyIG1hbmFnZXIgPSBnZXQodGhp
542
+ cywgJ21hbmFnZXInKTsKICAgIG1hbmFnZXIudXBkYXRlRmlsdGVyKHRoaXMs
543
+ IGdldCh0aGlzLCAndHlwZScpLCBnZXQodGhpcywgJ2ZpbHRlckZ1bmN0aW9u
544
+ JykpOwogIH0sICdmaWx0ZXJGdW5jdGlvbicpCn0pOwoKfSkoKTsKCgoKKGZ1
545
+ bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCnZhciBn
546
+ ZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKCi8qKgogIEBjbGFz
547
+ cyBBZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkKICBAbmFtZXNwYWNlIERT
548
+ CiAgQGV4dGVuZHMgRFMuUmVjb3JkQXJyYXkKKi8KRFMuQWRhcHRlclBvcHVs
549
+ YXRlZFJlY29yZEFycmF5ID0gRFMuUmVjb3JkQXJyYXkuZXh0ZW5kKHsKICBx
550
+ dWVyeTogbnVsbCwKCiAgcmVwbGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIg
551
+ dHlwZSA9IGdldCh0aGlzLCAndHlwZScpLnRvU3RyaW5nKCk7CiAgICB0aHJv
552
+ dyBuZXcgRXJyb3IoIlRoZSByZXN1bHQgb2YgYSBzZXJ2ZXIgcXVlcnkgKG9u
553
+ ICIgKyB0eXBlICsgIikgaXMgaW1tdXRhYmxlLiIpOwogIH0sCgogIGxvYWQ6
554
+ IGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBzdG9yZSA9IGdldCh0aGlzLCAn
555
+ c3RvcmUnKSwKICAgICAgICB0eXBlID0gZ2V0KHRoaXMsICd0eXBlJyksCiAg
556
+ ICAgICAgcmVjb3JkcyA9IHN0b3JlLnB1c2hNYW55KHR5cGUsIGRhdGEpOwoK
557
+ ICAgIHRoaXMuc2V0UHJvcGVydGllcyh7CiAgICAgIGNvbnRlbnQ6IEVtYmVy
558
+ LkEocmVjb3JkcyksCiAgICAgIGlzTG9hZGVkOiB0cnVlCiAgICB9KTsKCiAg
559
+ ICAvLyBUT0RPOiBkb2VzIHRyaWdnZXJpbmcgZGlkTG9hZCBldmVudCBzaG91
560
+ bGQgYmUgdGhlIGxhc3QgYWN0aW9uIG9mIHRoZSBydW5Mb29wPwogICAgRW1i
561
+ ZXIucnVuLm9uY2UodGhpcywgJ3RyaWdnZXInLCAnZGlkTG9hZCcpOwogIH0K
562
+ fSk7Cgp9KSgpOwoKCgooZnVuY3Rpb24oKSB7Ci8qKgogIEBtb2R1bGUgZW1i
563
+ ZXItZGF0YQoqLwoKdmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIu
564
+ c2V0Owp2YXIgbWFwID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLm1hcDsKCi8q
565
+ KgogIEEgTWFueUFycmF5IGlzIGEgUmVjb3JkQXJyYXkgdGhhdCByZXByZXNl
566
+ bnRzIHRoZSBjb250ZW50cyBvZiBhIGhhcy1tYW55CiAgcmVsYXRpb25zaGlw
567
+ LgoKICBUaGUgTWFueUFycmF5IGlzIGluc3RhbnRpYXRlZCBsYXppbHkgdGhl
568
+ IGZpcnN0IHRpbWUgdGhlIHJlbGF0aW9uc2hpcCBpcwogIHJlcXVlc3RlZC4K
569
+ CiAgIyMjIEludmVyc2VzCgogIE9mdGVuLCB0aGUgcmVsYXRpb25zaGlwcyBp
570
+ biBFbWJlciBEYXRhIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUKICBhbiBpbnZl
571
+ cnNlLiBGb3IgZXhhbXBsZSwgaW1hZ2luZSB0aGUgZm9sbG93aW5nIG1vZGVs
572
+ cyBhcmUKICBkZWZpbmVkOgoKICAgICAgQXBwLlBvc3QgPSBEUy5Nb2RlbC5l
573
+ eHRlbmQoewogICAgICAgIGNvbW1lbnRzOiBEUy5oYXNNYW55KCdBcHAuQ29t
574
+ bWVudCcpCiAgICAgIH0pOwoKICAgICAgQXBwLkNvbW1lbnQgPSBEUy5Nb2Rl
575
+ bC5leHRlbmQoewogICAgICAgIHBvc3Q6IERTLmJlbG9uZ3NUbygnQXBwLlBv
576
+ c3QnKQogICAgICB9KTsKCiAgSWYgeW91IGNyZWF0ZWQgYSBuZXcgaW5zdGFu
577
+ Y2Ugb2YgYEFwcC5Qb3N0YCBhbmQgYWRkZWQKICBhIGBBcHAuQ29tbWVudGAg
578
+ cmVjb3JkIHRvIGl0cyBgY29tbWVudHNgIGhhcy1tYW55CiAgcmVsYXRpb25z
579
+ aGlwLCB5b3Ugd291bGQgZXhwZWN0IHRoZSBjb21tZW50J3MgYHBvc3RgCiAg
580
+ cHJvcGVydHkgdG8gYmUgc2V0IHRvIHRoZSBwb3N0IHRoYXQgY29udGFpbmVk
581
+ CiAgdGhlIGhhcy1tYW55LgoKICBXZSBjYWxsIHRoZSByZWNvcmQgdG8gd2hp
582
+ Y2ggYSByZWxhdGlvbnNoaXAgYmVsb25ncyB0aGUKICByZWxhdGlvbnNoaXAn
583
+ cyBfb3duZXJfLgoKICBAY2xhc3MgTWFueUFycmF5CiAgQG5hbWVzcGFjZSBE
584
+ UwogIEBleHRlbmRzIERTLlJlY29yZEFycmF5CiovCkRTLk1hbnlBcnJheSA9
585
+ IERTLlJlY29yZEFycmF5LmV4dGVuZCh7CiAgaW5pdDogZnVuY3Rpb24oKSB7
586
+ CiAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAg
587
+ dGhpcy5fY2hhbmdlc1RvU3luYyA9IEVtYmVyLk9yZGVyZWRTZXQuY3JlYXRl
588
+ KCk7CiAgfSwKCiAgLyoqCiAgICBUaGUgcmVjb3JkIHRvIHdoaWNoIHRoaXMg
589
+ cmVsYXRpb25zaGlwIGJlbG9uZ3MuCgogICAgQHByb3BlcnR5IHtEUy5Nb2Rl
590
+ bH0KICAgIEBwcml2YXRlCiAgKi8KICBvd25lcjogbnVsbCwKCiAgLyoqCiAg
591
+ ICBgdHJ1ZWAgaWYgdGhlIHJlbGF0aW9uc2hpcCBpcyBwb2x5bW9ycGhpYywg
592
+ YGZhbHNlYCBvdGhlcndpc2UuCgogICAgQHByb3BlcnR5IHtCb29sZWFufQog
593
+ ICAgQHByaXZhdGUKICAqLwogIGlzUG9seW1vcnBoaWM6IGZhbHNlLAoKICAv
594
+ LyBMT0FESU5HIFNUQVRFCgogIGlzTG9hZGVkOiBmYWxzZSwKCiAgbG9hZGlu
595
+ Z1JlY29yZHNDb3VudDogZnVuY3Rpb24oY291bnQpIHsKICAgIHRoaXMubG9h
596
+ ZGluZ1JlY29yZHNDb3VudCA9IGNvdW50OwogIH0sCgogIGxvYWRlZFJlY29y
597
+ ZDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxvYWRpbmdSZWNvcmRzQ291bnQt
598
+ LTsKICAgIGlmICh0aGlzLmxvYWRpbmdSZWNvcmRzQ291bnQgPT09IDApIHsK
599
+ ICAgICAgc2V0KHRoaXMsICdpc0xvYWRlZCcsIHRydWUpOwogICAgICB0aGlz
600
+ LnRyaWdnZXIoJ2RpZExvYWQnKTsKICAgIH0KICB9LAoKICBmZXRjaDogZnVu
601
+ Y3Rpb24oKSB7CiAgICB2YXIgcmVjb3JkcyA9IGdldCh0aGlzLCAnY29udGVu
602
+ dCcpLAogICAgICAgIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScpLAogICAg
603
+ ICAgIG93bmVyID0gZ2V0KHRoaXMsICdvd25lcicpOwoKICAgIHZhciB1bmxv
604
+ YWRlZFJlY29yZHMgPSByZWNvcmRzLmZpbHRlclByb3BlcnR5KCdpc0VtcHR5
605
+ JywgdHJ1ZSk7CiAgICBzdG9yZS5mZXRjaE1hbnkodW5sb2FkZWRSZWNvcmRz
606
+ LCBvd25lcik7CiAgfSwKCiAgLy8gT3ZlcnJpZGVzIEVtYmVyLkFycmF5J3Mg
607
+ cmVwbGFjZSBtZXRob2QgdG8gaW1wbGVtZW50CiAgcmVwbGFjZUNvbnRlbnQ6
608
+ IGZ1bmN0aW9uKGluZGV4LCByZW1vdmVkLCBhZGRlZCkgewogICAgLy8gTWFw
609
+ IHRoZSBhcnJheSBvZiByZWNvcmQgb2JqZWN0cyBpbnRvIGFuIGFycmF5IG9m
610
+ ICBjbGllbnQgaWRzLgogICAgYWRkZWQgPSBtYXAoYWRkZWQsIGZ1bmN0aW9u
611
+ KHJlY29yZCkgewogICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgYWRk
612
+ ICciICsgcmVjb3JkLmNvbnN0cnVjdG9yLnR5cGVLZXkgKyAiJyByZWNvcmRz
613
+ IHRvIHRoaXMgcmVsYXRpb25zaGlwIChvbmx5ICciICsgdGhpcy50eXBlLnR5
614
+ cGVLZXkgKyAiJyBhbGxvd2VkKSIsICF0aGlzLnR5cGUgfHwgcmVjb3JkIGlu
615
+ c3RhbmNlb2YgdGhpcy50eXBlKTsKICAgICAgcmV0dXJuIHJlY29yZDsKICAg
616
+ IH0sIHRoaXMpOwoKICAgIHRoaXMuX3N1cGVyKGluZGV4LCByZW1vdmVkLCBh
617
+ ZGRlZCk7CiAgfSwKCiAgYXJyYW5nZWRDb250ZW50RGlkQ2hhbmdlOiBmdW5j
618
+ dGlvbigpIHsKICAgIHRoaXMuZmV0Y2goKTsKICB9LAoKICBhcnJheUNvbnRl
619
+ bnRXaWxsQ2hhbmdlOiBmdW5jdGlvbihpbmRleCwgcmVtb3ZlZCwgYWRkZWQp
620
+ IHsKICAgIHZhciBvd25lciA9IGdldCh0aGlzLCAnb3duZXInKSwKICAgICAg
621
+ ICBuYW1lID0gZ2V0KHRoaXMsICduYW1lJyk7CgogICAgaWYgKCFvd25lci5f
622
+ c3VzcGVuZGVkUmVsYXRpb25zaGlwcykgewogICAgICAvLyBUaGlzIGNvZGUg
623
+ aXMgdGhlIGZpcnN0IGhhbGYgb2YgY29kZSB0aGF0IGNvbnRpbnVlcyBpbnNp
624
+ ZGUKICAgICAgLy8gb2YgYXJyYXlDb250ZW50RGlkQ2hhbmdlLiBJdCBnZXRz
625
+ IG9yIGNyZWF0ZXMgYSBjaGFuZ2UgZnJvbQogICAgICAvLyB0aGUgY2hpbGQg
626
+ b2JqZWN0LCBhZGRzIHRoZSBjdXJyZW50IG93bmVyIGFzIHRoZSBvbGQKICAg
627
+ ICAgLy8gcGFyZW50IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIG9i
628
+ amVjdCB3YXMgcmVtb3ZlZAogICAgICAvLyBmcm9tIGEgTWFueUFycmF5LCBh
629
+ bmQgc2V0cyBgbmV3UGFyZW50YCB0byBudWxsLgogICAgICAvLwogICAgICAv
630
+ LyBMYXRlciwgaWYgdGhlIG9iamVjdCBpcyBhZGRlZCB0byBhbm90aGVyIE1h
631
+ bnlBcnJheSwKICAgICAgLy8gdGhlIGBhcnJheUNvbnRlbnREaWRDaGFuZ2Vg
632
+ IHdpbGwgc2V0IGBuZXdQYXJlbnRgIG9uCiAgICAgIC8vIHRoZSBjaGFuZ2Uu
633
+ CiAgICAgIGZvciAodmFyIGk9aW5kZXg7IGk8aW5kZXgrcmVtb3ZlZDsgaSsr
634
+ KSB7CiAgICAgICAgdmFyIHJlY29yZCA9IGdldCh0aGlzLCAnY29udGVudCcp
635
+ Lm9iamVjdEF0KGkpOwoKICAgICAgICB2YXIgY2hhbmdlID0gRFMuUmVsYXRp
636
+ b25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZShvd25lciwgcmVjb3JkLCBnZXQo
637
+ dGhpcywgJ3N0b3JlJyksIHsKICAgICAgICAgIHBhcmVudFR5cGU6IG93bmVy
638
+ LmNvbnN0cnVjdG9yLAogICAgICAgICAgY2hhbmdlVHlwZTogInJlbW92ZSIs
639
+ CiAgICAgICAgICBraW5kOiAiaGFzTWFueSIsCiAgICAgICAgICBrZXk6IG5h
640
+ bWUKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5fY2hhbmdlc1RvU3luYy5h
641
+ ZGQoY2hhbmdlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0aGlzLl9z
642
+ dXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH0sCgogIGFycmF5Q29u
643
+ dGVudERpZENoYW5nZTogZnVuY3Rpb24oaW5kZXgsIHJlbW92ZWQsIGFkZGVk
644
+ KSB7CiAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoK
645
+ ICAgIHZhciBvd25lciA9IGdldCh0aGlzLCAnb3duZXInKSwKICAgICAgICBu
646
+ YW1lID0gZ2V0KHRoaXMsICduYW1lJyksCiAgICAgICAgc3RvcmUgPSBnZXQo
647
+ dGhpcywgJ3N0b3JlJyk7CgogICAgaWYgKCFvd25lci5fc3VzcGVuZGVkUmVs
648
+ YXRpb25zaGlwcykgewogICAgICAvLyBUaGlzIGNvZGUgaXMgdGhlIHNlY29u
649
+ ZCBoYWxmIG9mIGNvZGUgdGhhdCBzdGFydGVkIGluCiAgICAgIC8vIGBhcnJh
650
+ eUNvbnRlbnRXaWxsQ2hhbmdlYC4gSXQgZ2V0cyBvciBjcmVhdGVzIGEgY2hh
651
+ bmdlCiAgICAgIC8vIGZyb20gdGhlIGNoaWxkIG9iamVjdCwgYW5kIGFkZHMg
652
+ dGhlIGN1cnJlbnQgb3duZXIgYXMKICAgICAgLy8gdGhlIG5ldyBwYXJlbnQu
653
+ CiAgICAgIGZvciAodmFyIGk9aW5kZXg7IGk8aW5kZXgrYWRkZWQ7IGkrKykg
654
+ ewogICAgICAgIHZhciByZWNvcmQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKS5v
655
+ YmplY3RBdChpKTsKCiAgICAgICAgdmFyIGNoYW5nZSA9IERTLlJlbGF0aW9u
656
+ c2hpcENoYW5nZS5jcmVhdGVDaGFuZ2Uob3duZXIsIHJlY29yZCwgc3RvcmUs
657
+ IHsKICAgICAgICAgIHBhcmVudFR5cGU6IG93bmVyLmNvbnN0cnVjdG9yLAog
658
+ ICAgICAgICAgY2hhbmdlVHlwZTogImFkZCIsCiAgICAgICAgICBraW5kOiJo
659
+ YXNNYW55IiwKICAgICAgICAgIGtleTogbmFtZQogICAgICAgIH0pOwogICAg
660
+ ICAgIGNoYW5nZS5oYXNNYW55TmFtZSA9IG5hbWU7CgogICAgICAgIHRoaXMu
661
+ X2NoYW5nZXNUb1N5bmMuYWRkKGNoYW5nZSk7CiAgICAgIH0KCiAgICAgIC8v
662
+ IFdlIHdhaXQgdW50aWwgdGhlIGFycmF5IGhhcyBmaW5pc2hlZCBiZWluZwog
663
+ ICAgICAvLyBtdXRhdGVkIGJlZm9yZSBzeW5jaW5nIHRoZSBPbmVUb01hbnlD
664
+ aGFuZ2VzIGNyZWF0ZWQKICAgICAgLy8gaW4gYXJyYXlDb250ZW50V2lsbENo
665
+ YW5nZSwgc28gdGhhdCB0aGUgYXJyYXkKICAgICAgLy8gbWVtYmVyc2hpcCB0
666
+ ZXN0IGluIHRoZSBzeW5jKCkgbG9naWMgb3BlcmF0ZXMKICAgICAgLy8gb24g
667
+ dGhlIGZpbmFsIHJlc3VsdHMuCiAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMu
668
+ Zm9yRWFjaChmdW5jdGlvbihjaGFuZ2UpIHsKICAgICAgICBjaGFuZ2Uuc3lu
669
+ YygpOwogICAgICB9KTsKCiAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMuY2xl
670
+ YXIoKTsKICAgIH0KICB9LAoKICAvLyBDcmVhdGUgYSBjaGlsZCByZWNvcmQg
671
+ d2l0aGluIHRoZSBvd25lcgogIGNyZWF0ZVJlY29yZDogZnVuY3Rpb24oaGFz
672
+ aCkgewogICAgdmFyIG93bmVyID0gZ2V0KHRoaXMsICdvd25lcicpLAogICAg
673
+ ICAgIHN0b3JlID0gZ2V0KG93bmVyLCAnc3RvcmUnKSwKICAgICAgICB0eXBl
674
+ ID0gZ2V0KHRoaXMsICd0eXBlJyksCiAgICAgICAgcmVjb3JkOwoKICAgIEVt
675
+ YmVyLmFzc2VydCgiWW91IGNhbm5vdCBhZGQgJyIgKyB0eXBlLnR5cGVLZXkg
676
+ KyAiJyByZWNvcmRzIHRvIHRoaXMgcG9seW1vcnBoaWMgcmVsYXRpb25zaGlw
677
+ LiIsICFnZXQodGhpcywgJ2lzUG9seW1vcnBoaWMnKSk7CgogICAgcmVjb3Jk
678
+ ID0gc3RvcmUuY3JlYXRlUmVjb3JkLmNhbGwoc3RvcmUsIHR5cGUsIGhhc2gp
679
+ OwogICAgdGhpcy5wdXNoT2JqZWN0KHJlY29yZCk7CgogICAgcmV0dXJuIHJl
680
+ Y29yZDsKICB9Cgp9KTsKCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAg
681
+ QG1vZHVsZSBlbWJlci1kYXRhCiovCgp9KSgpOwoKCgooZnVuY3Rpb24oKSB7
682
+ Ci8qKgogIEBtb2R1bGUgZW1iZXItZGF0YQoqLwoKdmFyIGdldCA9IEVtYmVy
683
+ LmdldDsKCnZhciByZXNvbHZlTWFwQ29uZmxpY3QgPSBmdW5jdGlvbihvbGRW
684
+ YWx1ZSwgbmV3VmFsdWUpIHsKICByZXR1cm4gb2xkVmFsdWU7Cn07Cgp2YXIg
685
+ dHJhbnNmb3JtTWFwS2V5ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewogIHJl
686
+ dHVybiBrZXk7Cn07Cgp2YXIgdHJhbnNmb3JtTWFwVmFsdWUgPSBmdW5jdGlv
687
+ bihrZXksIHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlOwp9OwoKLyoqCiAgVGhl
688
+ IE1hcHBhYmxlIG1peGluIGlzIGRlc2lnbmVkIGZvciBjbGFzc2VzIHRoYXQg
689
+ d291bGQgbGlrZSB0bwogIGJlaGF2ZSBhcyBhIG1hcCBmb3IgY29uZmlndXJh
690
+ dGlvbiBwdXJwb3Nlcy4KCiAgRm9yIGV4YW1wbGUsIHRoZSBEUy5BZGFwdGVy
691
+ IGNsYXNzIGNhbiBiZWhhdmUgbGlrZSBhIG1hcCwgd2l0aAogIG1vcmUgc2Vt
692
+ YW50aWMgQVBJLCB2aWEgdGhlIGBtYXBgIEFQSToKCiAgICBEUy5BZGFwdGVy
693
+ Lm1hcCgnQXBwLlBlcnNvbicsIHsgZmlyc3ROYW1lOiB7IGtleTogJ0ZJUlNU
694
+ JyB9IH0pOwoKICBDbGFzcyBjb25maWd1cmF0aW9uIHZpYSBhIG1hcC1saWtl
695
+ IEFQSSBoYXMgYSBmZXcgY29tbW9uIHJlcXVpcmVtZW50cwogIHRoYXQgZGlm
696
+ ZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBzdGFuZGFyZCBFbWJlci5NYXAgaW1w
697
+ bGVtZW50YXRpb24uCgogIEZpcnN0LCB2YWx1ZXMgb2Z0ZW4gYXJlIHByb3Zp
698
+ ZGVkIGFzIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgbm9ybWFsaXplZAogIGlu
699
+ dG8gY2xhc3NlcyB0aGUgZmlyc3QgdGltZSB0aGUgY29uZmlndXJhdGlvbiBv
700
+ cHRpb25zIGFyZSB1c2VkLgoKICBTZWNvbmQsIHRoZSB2YWx1ZXMgY29uZmln
701
+ dXJlZCBvbiBwYXJlbnQgY2xhc3NlcyBzaG91bGQgYWxzbyBiZSB0YWtlbgog
702
+ IGludG8gYWNjb3VudC4KCiAgRmluYWxseSwgc2V0dGluZyB0aGUgdmFsdWUg
703
+ b2YgYSBrZXkgc29tZXRpbWVzIHNob3VsZCBtZXJnZSB3aXRoIHRoZQogIHBy
704
+ ZXZpb3VzIHZhbHVlLCByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQuCgogIFRo
705
+ aXMgbWl4aW4gcHJvdmlkZXMgYSBpbnN0YW5jZSBtZXRob2QsIGBjcmVhdGVJ
706
+ bnN0YW5jZU1hcEZvcmAsIHRoYXQKICB3aWxsIHJlaWZ5IGFsbCBvZiB0aGUg
707
+ Y29uZmlndXJhdGlvbiBvcHRpb25zIHNldCBvbiBhbiBpbnN0YW5jZSdzCiAg
708
+ Y29uc3RydWN0b3IgYW5kIHByb3ZpZGUgaXQgZm9yIHRoZSBpbnN0YW5jZSB0
709
+ byB1c2UuCgogIENsYXNzZXMgY2FuIGltcGxlbWVudCBjZXJ0YWluIGhvb2tz
710
+ IHRoYXQgYWxsb3cgdGhlbSB0byBjdXN0b21pemUKICB0aGUgcmVxdWlyZW1l
711
+ bnRzIGxpc3RlZCBhYm92ZToKCiAgKiBgcmVzb2x2ZU1hcENvbmZsaWN0YCAt
712
+ IGNhbGxlZCB3aGVuIGEgdmFsdWUgaXMgc2V0IGZvciBhbiBleGlzdGluZwog
713
+ ICAgdmFsdWUKICAqIGB0cmFuc2Zvcm1NYXBLZXlgIC0gYWxsb3dzIGEga2V5
714
+ IG5hbWUgKGZvciBleGFtcGxlLCBhIGdsb2JhbCBwYXRoCiAgICB0byBhIGNs
715
+ YXNzKSB0byBiZSBub3JtYWxpemVkCiAgKiBgdHJhbnNmb3JtTWFwVmFsdWVg
716
+ IC0gYWxsb3dzIGEgdmFsdWUgKGZvciBleGFtcGxlLCBhIGNsYXNzIHRoYXQK
717
+ ICAgIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQpIHRvIGJlIG5vcm1hbGl6ZWQK
718
+ CiAgQ2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGlzIG1peGluIHNob3VsZCBh
719
+ bHNvIGltcGxlbWVudCBhIGNsYXNzCiAgbWV0aG9kIGJ1aWx0IHVzaW5nIHRo
720
+ ZSBgZ2VuZXJhdGVNYXBGdW5jdGlvbkZvcmAgbWV0aG9kOgoKICAgIERTLkFk
721
+ YXB0ZXIucmVvcGVuQ2xhc3MoewogICAgICBtYXA6IERTLk1hcHBhYmxlLmdl
722
+ bmVyYXRlTWFwRnVuY3Rpb25Gb3IoJ2F0dHJpYnV0ZXMnLCBmdW5jdGlvbihr
723
+ ZXksIG5ld1ZhbHVlLCBtYXApIHsKICAgICAgICB2YXIgZXhpc3RpbmdWYWx1
724
+ ZSA9IG1hcC5nZXQoa2V5KTsKCiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBu
725
+ ZXdWYWx1ZSkgewogICAgICAgICAgaWYgKCFuZXdWYWx1ZS5oYXNPd25Qcm9w
726
+ ZXJ0eShwcm9wKSkgeyBjb250aW51ZTsgfQogICAgICAgICAgZXhpc3RpbmdW
727
+ YWx1ZVtwcm9wXSA9IG5ld1ZhbHVlW3Byb3BdOwogICAgICAgIH0KICAgICAg
728
+ fSkKICAgIH0pOwoKICBUaGUgZnVuY3Rpb24gcGFzc2VkIHRvIGBnZW5lcmF0
729
+ ZU1hcEZ1bmN0aW9uRm9yYCBpcyBpbnZva2VkIGV2ZXJ5IHRpbWUgYQogIG5l
730
+ dyB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgbWFwLgoKICBAY2xhc3MgX01hcHBh
731
+ YmxlCiAgQHByaXZhdGUKICBAbmFtZXNwYWNlIERTCioqLwpEUy5fTWFwcGFi
732
+ bGUgPSBFbWJlci5NaXhpbi5jcmVhdGUoewogIGNyZWF0ZUluc3RhbmNlTWFw
733
+ Rm9yOiBmdW5jdGlvbihtYXBOYW1lKSB7CiAgICB2YXIgaW5zdGFuY2VNZXRh
734
+ ID0gZ2V0TWFwcGFibGVNZXRhKHRoaXMpOwoKICAgIGluc3RhbmNlTWV0YS52
735
+ YWx1ZXMgPSBpbnN0YW5jZU1ldGEudmFsdWVzIHx8IHt9OwoKICAgIGlmIChp
736
+ bnN0YW5jZU1ldGEudmFsdWVzW21hcE5hbWVdKSB7IHJldHVybiBpbnN0YW5j
737
+ ZU1ldGEudmFsdWVzW21hcE5hbWVdOyB9CgogICAgdmFyIGluc3RhbmNlTWFw
738
+ ID0gaW5zdGFuY2VNZXRhLnZhbHVlc1ttYXBOYW1lXSA9IG5ldyBFbWJlci5N
739
+ YXAoKTsKCiAgICB2YXIga2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yOwoKICAg
740
+ IHdoaWxlIChrbGFzcyAmJiBrbGFzcyAhPT0gRFMuU3RvcmUpIHsKICAgICAg
741
+ dGhpcy5fY29weU1hcChtYXBOYW1lLCBrbGFzcywgaW5zdGFuY2VNYXApOwog
742
+ ICAgICBrbGFzcyA9IGtsYXNzLnN1cGVyY2xhc3M7CiAgICB9CgogICAgaW5z
743
+ dGFuY2VNZXRhLnZhbHVlc1ttYXBOYW1lXSA9IGluc3RhbmNlTWFwOwogICAg
744
+ cmV0dXJuIGluc3RhbmNlTWFwOwogIH0sCgogIF9jb3B5TWFwOiBmdW5jdGlv
745
+ bihtYXBOYW1lLCBrbGFzcywgaW5zdGFuY2VNYXApIHsKICAgIHZhciBjbGFz
746
+ c01ldGEgPSBnZXRNYXBwYWJsZU1ldGEoa2xhc3MpOwoKICAgIHZhciBjbGFz
747
+ c01hcCA9IGNsYXNzTWV0YVttYXBOYW1lXTsKICAgIGlmIChjbGFzc01hcCkg
748
+ ewogICAgICBjbGFzc01hcC5mb3JFYWNoKGVhY2hNYXAsIHRoaXMpOwogICAg
749
+ fQoKICAgIGZ1bmN0aW9uIGVhY2hNYXAoa2V5LCB2YWx1ZSkgewogICAgICB2
750
+ YXIgdHJhbnNmb3JtZWRLZXkgPSAoa2xhc3MudHJhbnNmb3JtTWFwS2V5IHx8
751
+ IHRyYW5zZm9ybU1hcEtleSkoa2V5LCB2YWx1ZSk7CiAgICAgIHZhciB0cmFu
752
+ c2Zvcm1lZFZhbHVlID0gKGtsYXNzLnRyYW5zZm9ybU1hcFZhbHVlIHx8IHRy
753
+ YW5zZm9ybU1hcFZhbHVlKShrZXksIHZhbHVlKTsKCiAgICAgIHZhciBvbGRW
754
+ YWx1ZSA9IGluc3RhbmNlTWFwLmdldCh0cmFuc2Zvcm1lZEtleSk7CiAgICAg
755
+ IHZhciBuZXdWYWx1ZSA9IHRyYW5zZm9ybWVkVmFsdWU7CgogICAgICBpZiAo
756
+ b2xkVmFsdWUpIHsKICAgICAgICBuZXdWYWx1ZSA9ICh0aGlzLmNvbnN0cnVj
757
+ dG9yLnJlc29sdmVNYXBDb25mbGljdCB8fCByZXNvbHZlTWFwQ29uZmxpY3Qp
758
+ KG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiAgICAgIH0KCiAgICAgIGluc3RhbmNl
759
+ TWFwLnNldCh0cmFuc2Zvcm1lZEtleSwgbmV3VmFsdWUpOwogICAgfQogIH0K
760
+ Cgp9KTsKCkRTLl9NYXBwYWJsZS5nZW5lcmF0ZU1hcEZ1bmN0aW9uRm9yID0g
761
+ ZnVuY3Rpb24obWFwTmFtZSwgdHJhbnNmb3JtKSB7CiAgcmV0dXJuIGZ1bmN0
762
+ aW9uKGtleSwgdmFsdWUpIHsKICAgIHZhciBtZXRhID0gZ2V0TWFwcGFibGVN
763
+ ZXRhKHRoaXMpOwoKICAgIHZhciBtYXAgPSBtZXRhW21hcE5hbWVdIHx8IEVt
764
+ YmVyLk1hcFdpdGhEZWZhdWx0LmNyZWF0ZSh7CiAgICAgIGRlZmF1bHRWYWx1
765
+ ZTogZnVuY3Rpb24oKSB7IHJldHVybiB7fTsgfQogICAgfSk7CgogICAgdHJh
766
+ bnNmb3JtLmNhbGwodGhpcywga2V5LCB2YWx1ZSwgbWFwKTsKCiAgICBtZXRh
767
+ W21hcE5hbWVdID0gbWFwOwogIH07Cn07CgpmdW5jdGlvbiBnZXRNYXBwYWJs
768
+ ZU1ldGEob2JqKSB7CiAgdmFyIG1ldGEgPSBFbWJlci5tZXRhKG9iaiwgdHJ1
769
+ ZSksCiAgICAgIGtleU5hbWUgPSAnRFMuTWFwcGFibGUnLAogICAgICB2YWx1
770
+ ZSA9IG1ldGFba2V5TmFtZV07CgogIGlmICghdmFsdWUpIHsgbWV0YVtrZXlO
771
+ YW1lXSA9IHt9OyB9CgogIGlmICghbWV0YS5oYXNPd25Qcm9wZXJ0eShrZXlO
772
+ YW1lKSkgewogICAgbWV0YVtrZXlOYW1lXSA9IEVtYmVyLmNyZWF0ZShtZXRh
773
+ W2tleU5hbWVdKTsKICB9CgogIHJldHVybiBtZXRhW2tleU5hbWVdOwp9Cgp9
774
+ KSgpOwoKCgooZnVuY3Rpb24oKSB7Ci8qZ2xvYmFscyBFbWJlciovCi8qanNo
775
+ aW50IGVxbnVsbDp0cnVlKi8KLyoqCiAgQG1vZHVsZSBlbWJlci1kYXRhCiov
776
+ Cgp2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7CnZhciBv
777
+ bmNlID0gRW1iZXIucnVuLm9uY2U7CnZhciBpc05vbmUgPSBFbWJlci5pc05v
778
+ bmU7CnZhciBmb3JFYWNoID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLmZvckVh
779
+ Y2g7CnZhciBpbmRleE9mID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLmluZGV4
780
+ T2Y7CnZhciBtYXAgPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMubWFwOwp2YXIg
781
+ T3JkZXJlZFNldCA9IEVtYmVyLk9yZGVyZWRTZXQ7CnZhciByZXNvbHZlID0g
782
+ RW1iZXIuUlNWUC5yZXNvbHZlOwoKLy8gSW1wbGVtZW50b3JzIE5vdGU6Ci8v
783
+ Ci8vICAgVGhlIHZhcmlhYmxlcyBpbiB0aGlzIGZpbGUgYXJlIGNvbnNpc3Rl
784
+ bnRseSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwovLyAgIHNj
785
+ aGVtZToKLy8KLy8gICAqICtpZCsgbWVhbnMgYW4gaWRlbnRpZmllciBtYW5h
786
+ Z2VkIGJ5IGFuIGV4dGVybmFsIHNvdXJjZSwgcHJvdmlkZWQgaW5zaWRlCi8v
787
+ ICAgICB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGF0IHNvdXJjZS4gVGhlc2Ug
788
+ YXJlIGFsd2F5cyBjb2VyY2VkIHRvIGJlIHN0cmluZ3MKLy8gICAgIGJlZm9y
789
+ ZSBiZWluZyB1c2VkIGludGVybmFsbHkuCi8vICAgKiArY2xpZW50SWQrIG1l
790
+ YW5zIGEgdHJhbnNpZW50IG51bWVyaWNhbCBpZGVudGlmaWVyIGdlbmVyYXRl
791
+ ZCBhdCBydW50aW1lIGJ5Ci8vICAgICB0aGUgZGF0YSBzdG9yZS4gSXQgaXMg
792
+ aW1wb3J0YW50IHByaW1hcmlseSBiZWNhdXNlIG5ld2x5IGNyZWF0ZWQgb2Jq
793
+ ZWN0cyBtYXkKLy8gICAgIG5vdCB5ZXQgaGF2ZSBhbiBleHRlcm5hbGx5IGdl
794
+ bmVyYXRlZCBpZC4KLy8gICAqICtyZWZlcmVuY2UrIG1lYW5zIGEgcmVjb3Jk
795
+ IHJlZmVyZW5jZSBvYmplY3QsIHdoaWNoIGhvbGRzIG1ldGFkYXRhIGFib3V0
796
+ IGEKLy8gICAgIHJlY29yZCwgZXZlbiBpZiBpdCBoYXMgbm90IHlldCBiZWVu
797
+ IGZ1bGx5IG1hdGVyaWFsaXplZC4KLy8gICAqICt0eXBlKyBtZWFucyBhIHN1
798
+ YmNsYXNzIG9mIERTLk1vZGVsLgoKLy8gVXNlZCBieSB0aGUgc3RvcmUgdG8g
799
+ bm9ybWFsaXplIElEcyBlbnRlcmluZyB0aGUgc3RvcmUuICBEZXNwaXRlIHRo
800
+ ZSBmYWN0Ci8vIHRoYXQgZGV2ZWxvcGVycyBtYXkgcHJvdmlkZSBJRHMgYXMg
801
+ bnVtYmVycyAoZS5nLiwgYHN0b3JlLmZpbmQoUGVyc29uLCAxKWApLAovLyBp
802
+ dCBpcyBpbXBvcnRhbnQgdGhhdCBpbnRlcm5hbGx5IHdlIHVzZSBzdHJpbmdz
803
+ LCBzaW5jZSBJRHMgbWF5IGJlIHNlcmlhbGl6ZWQKLy8gYW5kIGxvc2UgdHlw
804
+ ZSBpbmZvcm1hdGlvbi4gIEZvciBleGFtcGxlLCBFbWJlcidzIHJvdXRlciBt
805
+ YXkgcHV0IGEgcmVjb3JkJ3MKLy8gSUQgaW50byB0aGUgVVJMLCBhbmQgaWYg
806
+ d2UgbGF0ZXIgdHJ5IHRvIGRlc2VyaWFsaXplIHRoYXQgVVJMIGFuZCBmaW5k
807
+ IHRoZQovLyBjb3JyZXNwb25kaW5nIHJlY29yZCwgd2Ugd2lsbCBub3Qga25v
808
+ dyBpZiBpdCBpcyBhIHN0cmluZyBvciBhIG51bWJlci4KdmFyIGNvZXJjZUlk
809
+ ID0gZnVuY3Rpb24oaWQpIHsKICByZXR1cm4gaWQgPT0gbnVsbCA/IG51bGwg
810
+ OiBpZCsnJzsKfTsKCi8qKgogIFRoZSBzdG9yZSBjb250YWlucyBhbGwgb2Yg
811
+ dGhlIGRhdGEgZm9yIHJlY29yZHMgbG9hZGVkIGZyb20gdGhlIHNlcnZlci4K
812
+ ICBJdCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBpbnN0YW5j
813
+ ZXMgb2YgRFMuTW9kZWwgdGhhdCB3cmFwCiAgdGhlIGluZGl2aWR1YWwgZGF0
814
+ YSBmb3IgYSByZWNvcmQsIHNvIHRoYXQgdGhleSBjYW4gYmUgYm91bmQgdG8g
815
+ aW4geW91cgogIEhhbmRsZWJhcnMgdGVtcGxhdGVzLgoKICBEZWZpbmUgeW91
816
+ ciBhcHBsaWNhdGlvbidzIHN0b3JlIGxpa2UgdGhpczoKCiAgICAgICBNeUFw
817
+ cC5TdG9yZSA9IERTLlN0b3JlLmV4dGVuZCgpOwoKICBNb3N0IEVtYmVyLmpz
818
+ IGFwcGxpY2F0aW9ucyB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSBgRFMuU3Rv
819
+ cmVgIHRoYXQgaXMKICBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlaXIg
820
+ YEVtYmVyLkFwcGxpY2F0aW9uYC4KCiAgWW91IGNhbiByZXRyaWV2ZSBtb2Rl
821
+ bHMgZnJvbSB0aGUgc3RvcmUgaW4gc2V2ZXJhbCB3YXlzLiBUbyByZXRyaWV2
822
+ ZSBhIHJlY29yZAogIGZvciBhIHNwZWNpZmljIGlkLCB1c2UgYERTLk1vZGVs
823
+ YCdzIGBmaW5kKClgIG1ldGhvZDoKCiAgICAgICB2YXIgcGVyc29uID0gQXBw
824
+ LlBlcnNvbi5maW5kKDEyMyk7CgogIElmIHlvdXIgYXBwbGljYXRpb24gaGFz
825
+ IG11bHRpcGxlIGBEUy5TdG9yZWAgaW5zdGFuY2VzIChhbiB1bnVzdWFsIGNh
826
+ c2UpLCB5b3UgY2FuCiAgc3BlY2lmeSB3aGljaCBzdG9yZSBzaG91bGQgYmUg
827
+ dXNlZDoKCiAgICAgIHZhciBwZXJzb24gPSBzdG9yZS5maW5kKEFwcC5QZXJz
828
+ b24sIDEyMyk7CgogIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgcmV0cmlldmUg
829
+ bW9kZWxzIHVzaW5nIHRoZSBtZXRob2RzIG9uIGBEUy5Nb2RlbGA7IHlvdSBz
830
+ aG91bGQKICByYXJlbHkgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBzdG9y
831
+ ZSBkaXJlY3RseS4KCiAgQnkgZGVmYXVsdCwgdGhlIHN0b3JlIHdpbGwgdGFs
832
+ ayB0byB5b3VyIGJhY2tlbmQgdXNpbmcgYSBzdGFuZGFyZCBSRVNUIG1lY2hh
833
+ bmlzbS4KICBZb3UgY2FuIGN1c3RvbWl6ZSBob3cgdGhlIHN0b3JlIHRhbGtz
834
+ IHRvIHlvdXIgYmFja2VuZCBieSBzcGVjaWZ5aW5nIGEgY3VzdG9tIGFkYXB0
835
+ ZXI6CgogICAgICAgTXlBcHAuc3RvcmUgPSBEUy5TdG9yZS5jcmVhdGUoewog
836
+ ICAgICAgICBhZGFwdGVyOiAnTXlBcHAuQ3VzdG9tQWRhcHRlcicKICAgICAg
837
+ IH0pOwoKICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd3JpdGluZyBhIGN1
838
+ c3RvbSBhZGFwdGVyIGJ5IHJlYWRpbmcgdGhlIGBEUy5BZGFwdGVyYAogIGRv
839
+ Y3VtZW50YXRpb24uCgogIEBjbGFzcyBTdG9yZQogIEBuYW1lc3BhY2UgRFMK
840
+ ICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKICBAdXNlcyBEUy5fTWFwcGFibGUK
841
+ Ki8KRFMuU3RvcmUgPSBFbWJlci5PYmplY3QuZXh0ZW5kKERTLl9NYXBwYWJs
842
+ ZSwgewoKICAvKioKICAgIEBtZXRob2QgaW5pdAogICAgQHByaXZhdGUKICAq
843
+ LwogIGluaXQ6IGZ1bmN0aW9uKCkgewogICAgLy8gaW50ZXJuYWwgYm9va2tl
844
+ ZXBpbmc7IG5vdCBvYnNlcnZhYmxlCiAgICB0aGlzLnR5cGVNYXBzID0ge307
845
+ CiAgICB0aGlzLnJlY29yZEFycmF5TWFuYWdlciA9IERTLlJlY29yZEFycmF5
846
+ TWFuYWdlci5jcmVhdGUoewogICAgICBzdG9yZTogdGhpcwogICAgfSk7CiAg
847
+ ICB0aGlzLl9yZWxhdGlvbnNoaXBDaGFuZ2VzID0ge307CiAgICB0aGlzLl9w
848
+ ZW5kaW5nU2F2ZSA9IFtdOwogIH0sCgogIC8qKgogICAgVGhlIGFkYXB0ZXIg
849
+ dG8gdXNlIHRvIGNvbW11bmljYXRlIHRvIGEgYmFja2VuZCBzZXJ2ZXIgb3Ig
850
+ b3RoZXIgcGVyc2lzdGVuY2UgbGF5ZXIuCgogICAgVGhpcyBjYW4gYmUgc3Bl
851
+ Y2lmaWVkIGFzIGFuIGluc3RhbmNlLCBjbGFzcywgb3Igc3RyaW5nLgoKICAg
852
+ IElmIHlvdSB3YW50IHRvIHNwZWNpZnkgYEFwcC5DdXN0b21BZGFwdGVyYCBh
853
+ cyBhIHN0cmluZywgZG86CgogICAgYGBganMKICAgIGFkYXB0ZXI6ICdjdXN0
854
+ b20nCiAgICBgYGAKCiAgICBAcHJvcGVydHkgYWRhcHRlcgogICAgQGRlZmF1
855
+ bHQgRFMuUkVTVEFkYXB0ZXIKICAgIEB0eXBlIHtEUy5BZGFwdGVyfFN0cmlu
856
+ Z30KICAqLwogIGFkYXB0ZXI6ICdfcmVzdCcsCgogIC8qKgogICAgUmV0dXJu
857
+ cyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCB1c2luZyBh
858
+ IGN1c3RvbQogICAgdHlwZS1zcGVjaWZpYyBzZXJpYWxpemVyLCBpZiBvbmUg
859
+ ZXhpc3RzLgoKICAgIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6CgogICAg
860
+ KiBgaW5jbHVkZUlkYDogYHRydWVgIGlmIHRoZSByZWNvcmQncyBJRCBzaG91
861
+ bGQgYmUgaW5jbHVkZWQgaW4KICAgICAgdGhlIEpTT04gcmVwcmVzZW50YXRp
862
+ b24KCiAgICBAbWV0aG9kIHNlcmlhbGl6ZQogICAgQHByaXZhdGUKICAgIEBw
863
+ YXJhbSB7RFMuTW9kZWx9IHJlY29yZCB0aGUgcmVjb3JkIHRvIHNlcmlhbGl6
864
+ ZQogICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYW4gb3B0aW9ucyBoYXNo
865
+ CiAgKi8KICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9ucykg
866
+ ewogICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplckZvcihyZWNvcmQuY29uc3Ry
867
+ dWN0b3IudHlwZUtleSkuc2VyaWFsaXplKHJlY29yZCwgb3B0aW9ucyk7CiAg
868
+ fSwKCiAgLyoqCiAgICBUaGlzIHByb3BlcnR5IHJldHVybnMgdGhlIGFkYXB0
869
+ ZXIsIGFmdGVyIHJlc29sdmluZyBhIHBvc3NpYmxlCiAgICBzdHJpbmcga2V5
870
+ LgoKICAgIElmIHRoZSBzdXBwbGllZCBgYWRhcHRlcmAgd2FzIGEgY2xhc3Ms
871
+ IG9yIGEgU3RyaW5nIHByb3BlcnR5CiAgICBwYXRoIHJlc29sdmVkIHRvIGEg
872
+ Y2xhc3MsIHRoaXMgcHJvcGVydHkgd2lsbCBpbnN0YW50aWF0ZSB0aGUKICAg
873
+ IGNsYXNzLgoKICAgIFRoaXMgcHJvcGVydHkgaXMgY2FjaGVhYmxlLCBzbyB0
874
+ aGUgc2FtZSBpbnN0YW5jZSBvZiBhIHNwZWNpZmllZAogICAgYWRhcHRlciBj
875
+ bGFzcyBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBz
876
+ dG9yZS4KCiAgICBAcHJvcGVydHkgX2FkYXB0ZXIKICAgIEBwcml2YXRlCiAg
877
+ ICBAcmV0dXJucyBEUy5BZGFwdGVyCiAgKi8KICBfYWRhcHRlcjogRW1iZXIu
878
+ Y29tcHV0ZWQoZnVuY3Rpb24oKSB7CiAgICB2YXIgYWRhcHRlciA9IGdldCh0
879
+ aGlzLCAnYWRhcHRlcicpOwogICAgaWYgKHR5cGVvZiBhZGFwdGVyID09PSAn
880
+ c3RyaW5nJykgewogICAgICBhZGFwdGVyID0gdGhpcy5jb250YWluZXIubG9v
881
+ a3VwKCdhZGFwdGVyOicgKyBhZGFwdGVyKSB8fCB0aGlzLmNvbnRhaW5lci5s
882
+ b29rdXAoJ2FkYXB0ZXI6YXBwbGljYXRpb24nKSB8fCB0aGlzLmNvbnRhaW5l
883
+ ci5sb29rdXAoJ2FkYXB0ZXI6X3Jlc3QnKTsKICAgIH0KCiAgICBpZiAoRFMu
884
+ QWRhcHRlci5kZXRlY3QoYWRhcHRlcikpIHsKICAgICAgYWRhcHRlciA9IGFk
885
+ YXB0ZXIuY3JlYXRlKHsgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lciB9KTsK
886
+ ICAgIH0KCiAgICByZXR1cm4gYWRhcHRlcjsKICB9KS5wcm9wZXJ0eSgnYWRh
887
+ cHRlcicpLAoKICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4KICAvLyAuIENS
888
+ RUFURSBORVcgUkVDT1JEIC4KICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4K
889
+ CiAgLyoqCiAgICBDcmVhdGUgYSBuZXcgcmVjb3JkIGluIHRoZSBjdXJyZW50
890
+ IHN0b3JlLiBUaGUgcHJvcGVydGllcyBwYXNzZWQKICAgIHRvIHRoaXMgbWV0
891
+ aG9kIGFyZSBzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgcmVjb3JkLgoKICAg
892
+ IFRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBgQXBwLlBvc3RgOgoKICAg
893
+ IGBgYGpzCiAgICBzdG9yZS5jcmVhdGVSZWNvcmQoJ3Bvc3QnLCB7CiAgICAg
894
+ IHRpdGxlOiAiUmFpbHMgaXMgb21ha2FzZSIKICAgIH0pOwogICAgYGBgCgog
895
+ ICAgQG1ldGhvZCBjcmVhdGVSZWNvcmQKICAgIEBwYXJhbSB7U3RyaW5nfSB0
896
+ eXBlCiAgICBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBhIGhhc2ggb2Yg
897
+ cHJvcGVydGllcyB0byBzZXQgb24gdGhlCiAgICAgIG5ld2x5IGNyZWF0ZWQg
898
+ cmVjb3JkLgogICAgQHJldHVybnMgRFMuTW9kZWwKICAqLwogIGNyZWF0ZVJl
899
+ Y29yZDogZnVuY3Rpb24odHlwZSwgcHJvcGVydGllcykgewogICAgdHlwZSA9
900
+ IHRoaXMubW9kZWxGb3IodHlwZSk7CgogICAgcHJvcGVydGllcyA9IHByb3Bl
901
+ cnRpZXMgfHwge307CgogICAgLy8gSWYgdGhlIHBhc3NlZCBwcm9wZXJ0aWVz
902
+ IGRvIG5vdCBpbmNsdWRlIGEgcHJpbWFyeSBrZXksCiAgICAvLyBnaXZlIHRo
903
+ ZSBhZGFwdGVyIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIG9uZS4gVHlw
904
+ aWNhbGx5LAogICAgLy8gY2xpZW50LXNpZGUgSUQgZ2VuZXJhdG9ycyB3aWxs
905
+ IHVzZSBzb21ldGhpbmcgbGlrZSB1dWlkLmpzCiAgICAvLyB0byBhdm9pZCBj
906
+ b25mbGljdHMuCgogICAgaWYgKGlzTm9uZShwcm9wZXJ0aWVzLmlkKSkgewog
907
+ ICAgICBwcm9wZXJ0aWVzLmlkID0gdGhpcy5fZ2VuZXJhdGVJZCh0eXBlKTsK
908
+ ICAgIH0KCiAgICAvLyBDb2VyY2UgSUQgdG8gYSBzdHJpbmcKICAgIHByb3Bl
909
+ cnRpZXMuaWQgPSBjb2VyY2VJZChwcm9wZXJ0aWVzLmlkKTsKCiAgICB2YXIg
910
+ cmVjb3JkID0gdGhpcy5idWlsZFJlY29yZCh0eXBlLCBwcm9wZXJ0aWVzLmlk
911
+ KTsKCiAgICAvLyBNb3ZlIHRoZSByZWNvcmQgb3V0IG9mIGl0cyBpbml0aWFs
912
+ IGBlbXB0eWAgc3RhdGUgaW50bwogICAgLy8gdGhlIGBsb2FkZWRgIHN0YXRl
913
+ LgogICAgcmVjb3JkLmxvYWRlZERhdGEoKTsKCiAgICAvLyBTZXQgdGhlIHBy
914
+ b3BlcnRpZXMgc3BlY2lmaWVkIG9uIHRoZSByZWNvcmQuCiAgICByZWNvcmQu
915
+ c2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKCiAgICByZXR1cm4gcmVjb3Jk
916
+ OwogIH0sCgogIC8qKgogICAgSWYgcG9zc2libGUsIHRoaXMgbWV0aG9kIGFz
917
+ a3MgdGhlIGFkYXB0ZXIgdG8gZ2VuZXJhdGUgYW4gSUQgZm9yCiAgICBhIG5l
918
+ d2x5IGNyZWF0ZWQgcmVjb3JkLgoKICAgIEBtZXRob2QgZ2VuZXJhdGVJZAog
919
+ ICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKICAgIEByZXR1cm5zIFN0cmluZyBp
920
+ ZiB0aGUgYWRhcHRlciBjYW4gZ2VuZXJhdGUgb25lLCBhbiBJRAogICovCiAg
921
+ X2dlbmVyYXRlSWQ6IGZ1bmN0aW9uKHR5cGUpIHsKICAgIHZhciBhZGFwdGVy
922
+ ID0gdGhpcy5hZGFwdGVyRm9yVHlwZSh0eXBlKTsKCiAgICBpZiAoYWRhcHRl
923
+ ciAmJiBhZGFwdGVyLmdlbmVyYXRlSWRGb3JSZWNvcmQpIHsKICAgICAgcmV0
924
+ dXJuIGFkYXB0ZXIuZ2VuZXJhdGVJZEZvclJlY29yZCh0aGlzKTsKICAgIH0K
925
+ CiAgICByZXR1cm4gbnVsbDsKICB9LAoKICAvLyAuLi4uLi4uLi4uLi4uLi4u
926
+ LgogIC8vIC4gREVMRVRFIFJFQ09SRCAuCiAgLy8gLi4uLi4uLi4uLi4uLi4u
927
+ Li4KCiAgLyoqCiAgICBGb3Igc3ltbWV0cnksIGEgcmVjb3JkIGNhbiBiZSBk
928
+ ZWxldGVkIHZpYSB0aGUgc3RvcmUuCgogICAgQG1ldGhvZCBkZWxldGVSZWNv
929
+ cmQKICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAogICovCiAgZGVsZXRl
930
+ UmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgIHJlY29yZC5kZWxldGVS
931
+ ZWNvcmQoKTsKICB9LAoKICAvKioKICAgIEZvciBzeW1tZXRyeSwgYSByZWNv
932
+ cmQgY2FuIGJlIHVubG9hZGVkIHZpYSB0aGUgc3RvcmUuCgogICAgQG1ldGhv
933
+ ZCB1bmxvYWRSZWNvcmQKICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAog
934
+ ICovCiAgdW5sb2FkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgIHJl
935
+ Y29yZC51bmxvYWRSZWNvcmQoKTsKICB9LAoKICAvLyAuLi4uLi4uLi4uLi4u
936
+ Li4uCiAgLy8gLiBGSU5EIFJFQ09SRFMgLgogIC8vIC4uLi4uLi4uLi4uLi4u
937
+ Li4KCiAgLyoqCiAgICBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGlu
938
+ dG8gZmluZGluZyByZWNvcmRzLiBUaGUgZmlyc3QgcGFyYW1ldGVyIHRvCiAg
939
+ ICB0aGlzIG1ldGhvZCBpcyB0aGUgbW9kZWwncyBuYW1lIGFzIGEgc3RyaW5n
940
+ LgoKICAgIC0tLQoKICAgIFRvIGZpbmQgYSByZWNvcmQgYnkgSUQsIHBhc3Mg
941
+ dGhlIGBpZGAgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXI6CgogICAgICAgIHN0
942
+ b3JlLmZpbmQoJ3BlcnNvbicsIDEpOwoKICAgIFRoZSBgZmluZGAgbWV0aG9k
943
+ IHdpbGwgYWx3YXlzIHJldHVybiBhICoqcHJvbWlzZSoqIHRoYXQgd2lsbCBi
944
+ ZSByZXNvbHZlZAogICAgd2l0aCB0aGUgcmVjb3JkLiBJZiB0aGUgcmVjb3Jk
945
+ IHdhcyBhbHJlYWR5IGluIHRoZSBzdG9yZSwgdGhlIHByb21pc2Ugd2lsbAog
946
+ ICAgYmUgcmVzb2x2ZWQgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSwgdGhlIHN0
947
+ b3JlIHdpbGwgYXNrIHRoZSBhZGFwdGVyJ3MgYGZpbmRgCiAgICBtZXRob2Qg
948
+ dG8gZmluZCB0aGUgbmVjZXNzYXJ5IGRhdGEuCgogICAgVGhlIGBmaW5kYCBt
949
+ ZXRob2Qgd2lsbCBhbHdheXMgcmVzb2x2ZSBpdHMgcHJvbWlzZSB3aXRoIHRo
950
+ ZSBzYW1lIG9iamVjdCBmb3IKICAgIGEgZ2l2ZW4gdHlwZSBhbmQgYGlkYC4K
951
+ CiAgICAtLS0KCiAgICBUbyBmaW5kIGFsbCByZWNvcmRzIGZvciBhIHR5cGUs
952
+ IGNhbGwgYGZpbmRgIHdpdGggbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzOgoK
953
+ ICAgICAgICBzdG9yZS5maW5kKCdwZXJzb24nKTsKCiAgICBUaGlzIHdpbGwg
954
+ YXNrIHRoZSBhZGFwdGVyJ3MgYGZpbmRBbGxgIG1ldGhvZCB0byBmaW5kIHRo
955
+ ZSByZWNvcmRzIGZvciB0aGUKICAgIGdpdmVuIHR5cGUsIGFuZCByZXR1cm4g
956
+ YSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBvbmNlIHRoZSBzZXJ2
957
+ ZXIKICAgIHJldHVybnMgdGhlIHZhbHVlcy4KCiAgICAtLS0KCiAgICBUbyBm
958
+ aW5kIGEgcmVjb3JkIGJ5IGEgcXVlcnksIGNhbGwgYGZpbmRgIHdpdGggYSBo
959
+ YXNoIGFzIHRoZSBzZWNvbmQKICAgIHBhcmFtZXRlcjoKCiAgICAgICAgc3Rv
960
+ cmUuZmluZChBcHAuUGVyc29uLCB7IHBhZ2U6IDEgfSk7CgogICAgVGhpcyB3
961
+ aWxsIGFzayB0aGUgYWRhcHRlcidzIGBmaW5kUXVlcnlgIG1ldGhvZCB0byBm
962
+ aW5kIHRoZSByZWNvcmRzIGZvcgogICAgdGhlIHF1ZXJ5LCBhbmQgcmV0dXJu
963
+ IGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgb25jZSB0aGUgc2Vy
964
+ dmVyCiAgICByZXNwb25kcy4KCiAgICBAbWV0aG9kIGZpbmQKICAgIEBwYXJh
965
+ bSB7RFMuTW9kZWx9IHR5cGUKICAgIEBwYXJhbSB7T2JqZWN0fFN0cmluZ3xJ
966
+ bnRlZ2VyfG51bGx9IGlkCiAgKi8KICBmaW5kOiBmdW5jdGlvbih0eXBlLCBp
967
+ ZCkgewogICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJu
968
+ IHRoaXMuZmluZEFsbCh0eXBlKTsKICAgIH0KCiAgICAvLyBXZSBhcmUgcGFz
969
+ c2VkIGEgcXVlcnkgaW5zdGVhZCBvZiBhbiBpZC4KICAgIGlmIChFbWJlci50
970
+ eXBlT2YoaWQpID09PSAnb2JqZWN0JykgewogICAgICByZXR1cm4gdGhpcy5m
971
+ aW5kUXVlcnkodHlwZSwgaWQpOwogICAgfQoKICAgIHJldHVybiB0aGlzLmZp
972
+ bmRCeUlkKHR5cGUsIGNvZXJjZUlkKGlkKSk7CiAgfSwKCiAgLyoqCiAgICBU
973
+ aGlzIG1ldGhvZCByZXR1cm5zIGEgcmVjb3JkIGZvciBhIGdpdmVuIHR5cGUg
974
+ YW5kIGlkIGNvbWJpbmF0aW9uLgoKICAgIEBtZXRob2QgZmluZEJ5SWQKICAg
975
+ IEBwcml2YXRlCiAgICBAcGFyYW0gdHlwZQogICAgQHBhcmFtIGlkCiAgKi8K
976
+ ICBmaW5kQnlJZDogZnVuY3Rpb24odHlwZSwgaWQpIHsKICAgIHR5cGUgPSB0
977
+ aGlzLm1vZGVsRm9yKHR5cGUpOwoKICAgIHZhciByZWNvcmQgPSB0aGlzLmdl
978
+ dEJ5SWQodHlwZSwgaWQpOwogICAgaWYgKGdldChyZWNvcmQsICdpc0VtcHR5
979
+ JykpIHsKICAgICAgcmV0dXJuIHByb21pc2VPYmplY3QodGhpcy5mZXRjaFJl
980
+ Y29yZChyZWNvcmQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwcm9t
981
+ aXNlT2JqZWN0KHJlc29sdmUocmVjb3JkKSk7CiAgICB9CiAgfSwKCiAgLyoq
982
+ CiAgICBUaGlzIG1ldGhvZCBtYWtlcyBhIHNlcmllcyBvZiByZXF1ZXN0cyB0
983
+ byB0aGUgYWRhcHRlcidzIGBmaW5kYCBtZXRob2QKICAgIGFuZCByZXR1cm5z
984
+ IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhleSBhcmUgYWxsIGxv
985
+ YWRlZC4KCiAgICBAbWV0aG9kIGZpbmRCeUlkcwogICAgQHBhcmFtIHtTdHJp
986
+ bmd9IHR5cGUKICAgIEBwYXJhbSB7QXJyYXl9IGlkcwogICAgQHJldHVybnMg
987
+ UHJvbWlzZQogICovCiAgZmluZEJ5SWRzOiBmdW5jdGlvbih0eXBlLCBpZHMp
988
+ IHsKICAgIHZhciBzdG9yZSA9IHRoaXM7CgogICAgcmV0dXJuIHByb21pc2VB
989
+ cnJheShFbWJlci5SU1ZQLmFsbChtYXAoaWRzLCBmdW5jdGlvbihpZCkgewog
990
+ ICAgICByZXR1cm4gc3RvcmUuZmluZEJ5SWQodHlwZSwgaWQpOwogICAgfSkp
991
+ LnRoZW4oZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgcmV0dXJuIEVtYmVyLkEo
992
+ YXJyYXkpOwogICAgfSkpOwogIH0sCgogIC8qKgogICAgVGhpcyBtZXRob2Qg
993
+ aXMgY2FsbGVkIGJ5IGBmaW5kQnlJZGAgaWYgaXQgZGlzY292ZXJzIHRoYXQg
994
+ YSBwYXJ0aWN1bGFyCiAgICB0eXBlL2lkIHBhaXIgaGFzbid0IGJlZW4gbG9h
995
+ ZGVkIHlldCB0byBraWNrIG9mZiBhIHJlcXVlc3QgdG8gdGhlCiAgICBhZGFw
996
+ dGVyLgoKICAgIEBtZXRob2QgZmV0Y2hSZWNvcmQKICAgIEBwcml2YXRlCiAg
997
+ ICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKICAgIEByZXR1cm5zIFByb21p
998
+ c2UKICAqLwogIGZldGNoUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAg
999
+ IHZhciB0eXBlID0gcmVjb3JkLmNvbnN0cnVjdG9yLAogICAgICAgIGlkID0g
1000
+ Z2V0KHJlY29yZCwgJ2lkJyksCiAgICAgICAgcmVzb2x2ZXIgPSBFbWJlci5S
1001
+ U1ZQLmRlZmVyKCk7CgogICAgcmVjb3JkLmxvYWRpbmdEYXRhKCk7CgogICAg
1002
+ dmFyIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3JUeXBlKHR5cGUpOwoKICAg
1003
+ IEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGZpbmQgYSByZWNvcmQgYnV0
1004
+ IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZvciAiICsgdHlwZSArICIpIiwgYWRh
1005
+ cHRlcik7CiAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBmaW5kIGEg
1006
+ cmVjb3JkIGJ1dCB5b3VyIGFkYXB0ZXIgKGZvciAiICsgdHlwZSArICIpIGRv
1007
+ ZXMgbm90IGltcGxlbWVudCAnZmluZCciLCBhZGFwdGVyLmZpbmQpOwoKICAg
1008
+ IF9maW5kKGFkYXB0ZXIsIHRoaXMsIHR5cGUsIGlkLCByZXNvbHZlcik7Cgog
1009
+ ICAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7CiAgfSwKCiAgLyoqCiAgICBH
1010
+ ZXQgYSByZWNvcmQgYnkgYSBnaXZlbiB0eXBlIGFuZCBJRCB3aXRob3V0IHRy
1011
+ aWdnZXJpbmcgYSBmZXRjaC4KCiAgICBUaGlzIG1ldGhvZCB3aWxsIHN5bmNo
1012
+ cm9ub3VzbHkgcmV0dXJuIHRoZSByZWNvcmQgaWYgaXQncyBhdmFpbGFibGUu
1013
+ CiAgICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZC4KCiAg
1014
+ ICBgYGBqcwogICAgdmFyIHBvc3QgPSBzdG9yZS5nZXRCeUlkKCdwb3N0Jywg
1015
+ MSk7CiAgICBgYGAKCiAgICBAbWV0aG9kIGdldEJ5SWQKICAgIEBwYXJhbSB0
1016
+ eXBlCiAgICBAcGFyYW0gaWQKICAqLwogIGdldEJ5SWQ6IGZ1bmN0aW9uKHR5
1017
+ cGUsIGlkKSB7CiAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKCiAg
1018
+ ICBpZiAodGhpcy5oYXNSZWNvcmRGb3JJZCh0eXBlLCBpZCkpIHsKICAgICAg
1019
+ cmV0dXJuIHRoaXMucmVjb3JkRm9ySWQodHlwZSwgaWQpOwogICAgfSBlbHNl
1020
+ IHsKICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSZWNvcmQodHlwZSwgaWQpOwog
1021
+ ICAgfQogIH0sCgogIC8qKgogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5
1022
+ IHRoZSByZWNvcmQncyBgcmVsb2FkYCBtZXRob2QuIFRoZSByZWNvcmQncyBg
1023
+ cmVsb2FkYAogICAgcGFzc2VzIGluIGEgcmVzb2x2ZXIgZm9yIHRoZSBwcm9t
1024
+ aXNlIGl0IHJldHVybnMuCgogICAgVGhpcyBtZXRob2QgY2FsbHMgdGhlIGFk
1025
+ YXB0ZXIncyBgZmluZGAgbWV0aG9kLCB3aGljaCByZXR1cm5zIGEgcHJvbWlz
1026
+ ZS4gV2hlbgogICAgKip0aGF0KiogcHJvbWlzZSByZXNvbHZlcywgYHJlbG9h
1027
+ ZFJlY29yZGAgd2lsbCByZXNvbHZlIHRoZSBwcm9taXNlIHJldHVybmVkCiAg
1028
+ ICBieSB0aGUgcmVjb3JkJ3MgYHJlbG9hZGAuCgogICAgQG1ldGhvZCByZWxv
1029
+ YWRSZWNvcmQKICAgIEBwcml2YXRlCiAgICBAcGFyYW0ge0RTLk1vZGVsfSBy
1030
+ ZWNvcmQKICAgIEBwYXJhbSB7UmVzb2x2ZXJ9IHJlc29sdmVyCiAgKi8KICBy
1031
+ ZWxvYWRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCwgcmVzb2x2ZXIpIHsKICAg
1032
+ IHZhciB0eXBlID0gcmVjb3JkLmNvbnN0cnVjdG9yLAogICAgICAgIGFkYXB0
1033
+ ZXIgPSB0aGlzLmFkYXB0ZXJGb3JUeXBlKHR5cGUpLAogICAgICAgIHN0b3Jl
1034
+ ID0gdGhpcywKICAgICAgICBpZCA9IGdldChyZWNvcmQsICdpZCcpOwoKICAg
1035
+ IEVtYmVyLmFzc2VydCgiWW91IGNhbm5vdCByZWxvYWQgYSByZWNvcmQgd2l0
1036
+ aG91dCBhbiBJRCIsIGlkKTsKICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVk
1037
+ IHRvIHJlbG9hZCBhIHJlY29yZCBidXQgeW91IGhhdmUgbm8gYWRhcHRlciAo
1038
+ Zm9yICIgKyB0eXBlICsgIikiLCBhZGFwdGVyKTsKICAgIEVtYmVyLmFzc2Vy
1039
+ dCgiWW91IHRyaWVkIHRvIHJlbG9hZCBhIHJlY29yZCBidXQgeW91ciBhZGFw
1040
+ dGVyIGRvZXMgbm90IGltcGxlbWVudCBgZmluZGAiLCBhZGFwdGVyLmZpbmQp
1041
+ OwoKICAgIHJldHVybiBfZmluZChhZGFwdGVyLCB0aGlzLCB0eXBlLCBpZCwg
1042
+ cmVzb2x2ZXIpOwogIH0sCgogIC8qKgogICAgVGhpcyBtZXRob2QgdGFrZXMg
1043
+ YSBsaXN0IG9mIHJlY29yZHMsIGdyb3VwcyB0aGUgcmVjb3JkcyBieSB0eXBl
1044
+ LAogICAgY29udmVydHMgdGhlIHJlY29yZHMgaW50byBJRHMsIGFuZCB0aGVu
1045
+ IGludm9rZXMgdGhlIGFkYXB0ZXIncyBgZmluZE1hbnlgCiAgICBtZXRob2Qu
1046
+ CgogICAgVGhlIHJlY29yZHMgYXJlIGdyb3VwZWQgYnkgdHlwZSB0byBpbnZv
1047
+ a2UgYGZpbmRNYW55YCBvbiBhZGFwdGVycwogICAgZm9yIGVhY2ggdW5pcXVl
1048
+ IHR5cGUgaW4gcmVjb3Jkcy4KCiAgICBJdCBpcyB1c2VkIGJvdGggYnkgYSBi
1049
+ cmFuZCBuZXcgcmVsYXRpb25zaGlwICh2aWEgdGhlIGBmaW5kTWFueWAKICAg
1050
+ IG1ldGhvZCkgb3Igd2hlbiB0aGUgZGF0YSB1bmRlcmx5aW5nIGFuIGV4aXN0
1051
+ aW5nIHJlbGF0aW9uc2hpcAogICAgY2hhbmdlcy4KCiAgICBAbWV0aG9kIGZl
1052
+ dGNoTWFueQogICAgQHByaXZhdGUKICAgIEBwYXJhbSByZWNvcmRzCiAgICBA
1053
+ cGFyYW0gb3duZXIKICAqLwogIGZldGNoTWFueTogZnVuY3Rpb24ocmVjb3Jk
1054
+ cywgb3duZXIsIHJlc29sdmVyKSB7CiAgICBpZiAoIXJlY29yZHMubGVuZ3Ro
1055
+ KSB7IHJldHVybjsgfQoKICAgIC8vIEdyb3VwIEJ5IFR5cGUKICAgIHZhciBy
1056
+ ZWNvcmRzQnlUeXBlTWFwID0gRW1iZXIuTWFwV2l0aERlZmF1bHQuY3JlYXRl
1057
+ KHsKICAgICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbigpIHsgcmV0dXJuIEVt
1058
+ YmVyLkEoKTsgfQogICAgfSk7CgogICAgZm9yRWFjaChyZWNvcmRzLCBmdW5j
1059
+ dGlvbihyZWNvcmQpIHsKICAgICAgcmVjb3Jkc0J5VHlwZU1hcC5nZXQocmVj
1060
+ b3JkLmNvbnN0cnVjdG9yKS5wdXNoKHJlY29yZCk7CiAgICB9KTsKCiAgICBm
1061
+ b3JFYWNoKHJlY29yZHNCeVR5cGVNYXAsIGZ1bmN0aW9uKHR5cGUsIHJlY29y
1062
+ ZHMpIHsKICAgICAgdmFyIGlkcyA9IHJlY29yZHMubWFwUHJvcGVydHkoJ2lk
1063
+ JyksCiAgICAgICAgICBhZGFwdGVyID0gdGhpcy5hZGFwdGVyRm9yVHlwZSh0
1064
+ eXBlKTsKCiAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGxvYWQg
1065
+ bWFueSByZWNvcmRzIGJ1dCB5b3UgaGF2ZSBubyBhZGFwdGVyIChmb3IgIiAr
1066
+ IHR5cGUgKyAiKSIsIGFkYXB0ZXIpOwogICAgICBFbWJlci5hc3NlcnQoIllv
1067
+ dSB0cmllZCB0byBsb2FkIG1hbnkgcmVjb3JkcyBidXQgeW91ciBhZGFwdGVy
1068
+ IGRvZXMgbm90IGltcGxlbWVudCBgZmluZE1hbnlgIiwgYWRhcHRlci5maW5k
1069
+ TWFueSk7CgogICAgICBfZmluZE1hbnkoYWRhcHRlciwgdGhpcywgdHlwZSwg
1070
+ aWRzLCBvd25lciwgcmVzb2x2ZXIpOwogICAgfSwgdGhpcyk7CiAgfSwKCiAg
1071
+ LyoqCiAgICBSZXR1cm5zIHRydWUgaWYgYSByZWNvcmQgZm9yIGEgZ2l2ZW4g
1072
+ dHlwZSBhbmQgSUQgaXMgYWxyZWFkeSBsb2FkZWQuCgogICAgQHBhcmFtIHtT
1073
+ dHJpbmd9IHR5cGUKICAgIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGlkCiAg
1074
+ ICBAcmV0dXJucyBCb29sZWFuCiAgKi8KICBoYXNSZWNvcmRGb3JJZDogZnVu
1075
+ Y3Rpb24odHlwZSwgaWQpIHsKICAgIGlkID0gY29lcmNlSWQoaWQpOwoKICAg
1076
+ IHJldHVybiAhIXRoaXMudHlwZU1hcEZvcih0eXBlKS5pZFRvUmVjb3JkW2lk
1077
+ XTsKICB9LAoKICAvKioKICAgIFJldHVybnMgaWQgcmVjb3JkIGZvciBhIGdp
1078
+ dmVuIHR5cGUgYW5kIElELiBJZiBvbmUgaXNuJ3QgYWxyZWFkeSBsb2FkZWQs
1079
+ CiAgICBpdCBidWlsZHMgYSBuZXcgcmVjb3JkIGFuZCBsZWF2ZXMgaXQgaW4g
1080
+ dGhlIGBlbXB0eWAgc3RhdGUuCgogICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUK
1081
+ ICAgIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGlkCiAgICBAcmV0dXJucyBE
1082
+ Uy5Nb2RlbAogICovCiAgcmVjb3JkRm9ySWQ6IGZ1bmN0aW9uKHR5cGUsIGlk
1083
+ KSB7CiAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKCiAgICBpZCA9
1084
+ IGNvZXJjZUlkKGlkKTsKCiAgICB2YXIgcmVjb3JkID0gdGhpcy50eXBlTWFw
1085
+ Rm9yKHR5cGUpLmlkVG9SZWNvcmRbaWRdOwoKICAgIGlmICghcmVjb3JkKSB7
1086
+ CiAgICAgIHJlY29yZCA9IHRoaXMuYnVpbGRSZWNvcmQodHlwZSwgaWQpOwog
1087
+ ICAgfQoKICAgIHJldHVybiByZWNvcmQ7CiAgfSwKCiAgLyoqCiAgICBAbWV0
1088
+ aG9kIGZpbmRNYW55CiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtEUy5Nb2Rl
1089
+ bH0gb3duZXIKICAgIEBwYXJhbSB7QXJyYXk8RFMuTW9kZWw+fSByZWNvcmRz
1090
+ CiAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQogICAgQHBhcmFtIHtSZXNvbHZl
1091
+ cn0gcmVzb2x2ZXIKICAgIEByZXR1cm4gRFMuTWFueUFycmF5CiAgKi8KICBm
1092
+ aW5kTWFueTogZnVuY3Rpb24ob3duZXIsIHJlY29yZHMsIHR5cGUsIHJlc29s
1093
+ dmVyKSB7CiAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKCiAgICBy
1094
+ ZWNvcmRzID0gRW1iZXIuQShyZWNvcmRzKTsKCiAgICB2YXIgdW5sb2FkZWRS
1095
+ ZWNvcmRzID0gcmVjb3Jkcy5maWx0ZXJQcm9wZXJ0eSgnaXNFbXB0eScsIHRy
1096
+ dWUpLAogICAgICAgIG1hbnlBcnJheSA9IHRoaXMucmVjb3JkQXJyYXlNYW5h
1097
+ Z2VyLmNyZWF0ZU1hbnlBcnJheSh0eXBlLCByZWNvcmRzKTsKCiAgICB1bmxv
1098
+ YWRlZFJlY29yZHMuZm9yRWFjaChmdW5jdGlvbihyZWNvcmQpIHsKICAgICAg
1099
+ cmVjb3JkLmxvYWRpbmdEYXRhKCk7CiAgICB9KTsKCiAgICBtYW55QXJyYXku
1100
+ bG9hZGluZ1JlY29yZHNDb3VudCA9IHVubG9hZGVkUmVjb3Jkcy5sZW5ndGg7
1101
+ CgogICAgaWYgKHVubG9hZGVkUmVjb3Jkcy5sZW5ndGgpIHsKICAgICAgdW5s
1102
+ b2FkZWRSZWNvcmRzLmZvckVhY2goZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAg
1103
+ ICAgdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIucmVnaXN0ZXJXYWl0aW5nUmVj
1104
+ b3JkQXJyYXkocmVjb3JkLCBtYW55QXJyYXkpOwogICAgICB9LCB0aGlzKTsK
1105
+ CiAgICAgIHRoaXMuZmV0Y2hNYW55KHVubG9hZGVkUmVjb3Jkcywgb3duZXIs
1106
+ IHJlc29sdmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIG1hbnlBcnJheS5zZXQo
1107
+ J2lzTG9hZGVkJywgdHJ1ZSk7CiAgICAgIEVtYmVyLnJ1bi5vbmNlKG1hbnlB
1108
+ cnJheSwgJ3RyaWdnZXInLCAnZGlkTG9hZCcpOwogICAgfQoKICAgIHJldHVy
1109
+ biBtYW55QXJyYXk7CiAgfSwKCiAgLyoqCiAgICBJZiBhIHJlbGF0aW9uc2hp
1110
+ cCB3YXMgb3JpZ2luYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGFkYXB0ZXIgYXMg
1111
+ YSBsaW5rCiAgICAoYXMgb3Bwb3NlZCB0byBhIGxpc3Qgb2YgSURzKSwgdGhp
1112
+ cyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlCiAgICByZWxhdGlvbnNoaXAg
1113
+ aXMgZmV0Y2hlZC4KCiAgICBUaGUgbGluayAod2hpY2ggaXMgdXN1YWxseSBh
1114
+ IFVSTCkgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCBzbyB0aGUKICAg
1115
+ IGFkYXB0ZXIgY2FuIG1ha2Ugd2hhdGV2ZXIgcmVxdWVzdCBpdCB3YW50cy4K
1116
+ CiAgICBUaGUgdXN1YWwgdXNlLWNhc2UgaXMgZm9yIHRoZSBzZXJ2ZXIgdG8g
1117
+ cmVnaXN0ZXIgYSBVUkwgYXMgYSBsaW5rLCBhbmQKICAgIHRoZW4gdXNlIHRo
1118
+ YXQgVVJMIGluIHRoZSBmdXR1cmUgdG8gbWFrZSBhIHJlcXVlc3QgZm9yIHRo
1119
+ ZSByZWxhdGlvbnNoaXAuCgogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7RFMu
1120
+ TW9kZWx9IG93bmVyCiAgICBAcGFyYW0ge2FueX0gbGluawogICAgQHBhcmFt
1121
+ IHtTdHJpbmd9IHR5cGUKICAgIEBwYXJhbSB7UmVzb2x2ZXJ9IHJlc29sdmVy
1122
+ CiAgICBAcmV0dXJuIERTLk1hbnlBcnJheQogICovCiAgZmluZEhhc01hbnk6
1123
+ IGZ1bmN0aW9uKG93bmVyLCBsaW5rLCByZWxhdGlvbnNoaXAsIHJlc29sdmVy
1124
+ KSB7CiAgICB2YXIgYWRhcHRlciA9IHRoaXMuYWRhcHRlckZvclR5cGUob3du
1125
+ ZXIuY29uc3RydWN0b3IpOwoKICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVk
1126
+ IHRvIGxvYWQgYSBoYXNNYW55IHJlbGF0aW9uc2hpcCBidXQgeW91IGhhdmUg
1127
+ bm8gYWRhcHRlciAoZm9yICIgKyBvd25lci5jb25zdHJ1Y3RvciArICIpIiwg
1128
+ YWRhcHRlcik7CiAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBsb2Fk
1129
+ IGEgaGFzTWFueSByZWxhdGlvbnNoaXAgZnJvbSBhIHNwZWNpZmllZCBgbGlu
1130
+ a2AgaW4gdGhlIG9yaWdpbmFsIHBheWxvYWQgYnV0IHlvdXIgYWRhcHRlciBk
1131
+ b2VzIG5vdCBpbXBsZW1lbnQgYGZpbmRIYXNNYW55YCIsIGFkYXB0ZXIuZmlu
1132
+ ZEhhc01hbnkpOwoKICAgIHZhciByZWNvcmRzID0gdGhpcy5yZWNvcmRBcnJh
1133
+ eU1hbmFnZXIuY3JlYXRlTWFueUFycmF5KHJlbGF0aW9uc2hpcC50eXBlLCBF
1134
+ bWJlci5BKFtdKSk7CiAgICBfZmluZEhhc01hbnkoYWRhcHRlciwgdGhpcywg
1135
+ b3duZXIsIGxpbmssIHJlbGF0aW9uc2hpcCwgcmVzb2x2ZXIpOwogICAgcmV0
1136
+ dXJuIHJlY29yZHM7CiAgfSwKCiAgLyoqCiAgICBUaGlzIG1ldGhvZCBkZWxl
1137
+ Z2F0ZXMgYSBxdWVyeSB0byB0aGUgYWRhcHRlci4gVGhpcyBpcyB0aGUgb25l
1138
+ IHBsYWNlIHdoZXJlCiAgICBhZGFwdGVyLWxldmVsIHNlbWFudGljcyBhcmUg
1139
+ ZXhwb3NlZCB0byB0aGUgYXBwbGljYXRpb24uCgogICAgRXhwb3NpbmcgcXVl
1140
+ cmllcyB0aGlzIHdheSBzZWVtcyBwcmVmZXJhYmxlIHRvIGNyZWF0aW5nIGFu
1141
+ IGFic3RyYWN0IHF1ZXJ5CiAgICBsYW5ndWFnZSBmb3IgYWxsIHNlcnZlci1z
1142
+ aWRlIHF1ZXJpZXMsIGFuZCB0aGVuIHJlcXVpcmUgYWxsIGFkYXB0ZXJzIHRv
1143
+ CiAgICBpbXBsZW1lbnQgdGhlbS4KCiAgICBUaGlzIG1ldGhvZCByZXR1cm5z
1144
+ IGEgcHJvbWlzZSwgd2hpY2ggaXMgcmVzb2x2ZWQgd2l0aCBhIGBSZWNvcmRB
1145
+ cnJheWAKICAgIG9uY2UgdGhlIHNlcnZlciByZXR1cm5zLgoKICAgIEBtZXRo
1146
+ b2QgZmluZFF1ZXJ5CiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtTdHJpbmd9
1147
+ IHR5cGUKICAgIEBwYXJhbSB7YW55fSBxdWVyeSBhbiBvcGFxdWUgcXVlcnkg
1148
+ dG8gYmUgdXNlZCBieSB0aGUgYWRhcHRlcgogICAgQHJldHVybiBQcm9taXNl
1149
+ CiAgKi8KICBmaW5kUXVlcnk6IGZ1bmN0aW9uKHR5cGUsIHF1ZXJ5KSB7CiAg
1150
+ ICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKCiAgICB2YXIgYXJyYXkg
1151
+ PSBEUy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkuY3JlYXRlKHsKICAg
1152
+ ICAgdHlwZTogdHlwZSwKICAgICAgcXVlcnk6IHF1ZXJ5LAogICAgICBjb250
1153
+ ZW50OiBFbWJlci5BKCksCiAgICAgIHN0b3JlOiB0aGlzCiAgICB9KTsKCiAg
1154
+ ICB2YXIgYWRhcHRlciA9IHRoaXMuYWRhcHRlckZvclR5cGUodHlwZSksCiAg
1155
+ ICAgICAgcmVzb2x2ZXIgPSBFbWJlci5SU1ZQLmRlZmVyKCk7CgogICAgRW1i
1156
+ ZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gbG9hZCBhIHF1ZXJ5IGJ1dCB5b3Ug
1157
+ aGF2ZSBubyBhZGFwdGVyIChmb3IgIiArIHR5cGUgKyAiKSIsIGFkYXB0ZXIp
1158
+ OwogICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gbG9hZCBhIHF1ZXJ5
1159
+ IGJ1dCB5b3VyIGFkYXB0ZXIgZG9lcyBub3QgaW1wbGVtZW50IGBmaW5kUXVl
1160
+ cnlgIiwgYWRhcHRlci5maW5kUXVlcnkpOwoKICAgIF9maW5kUXVlcnkoYWRh
1161
+ cHRlciwgdGhpcywgdHlwZSwgcXVlcnksIGFycmF5LCByZXNvbHZlcik7Cgog
1162
+ ICAgcmV0dXJuIHByb21pc2VBcnJheShyZXNvbHZlci5wcm9taXNlKTsKICB9
1163
+ LAoKICAvKioKICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2Yg
1164
+ YWxsIHJlY29yZHMgYWRhcHRlciBjYW4gZmluZC4KICAgIEl0IHRyaWdnZXJz
1165
+ IHRoZSBhZGFwdGVyJ3MgYGZpbmRBbGxgIG1ldGhvZCB0byBnaXZlIGl0IGFu
1166
+ IG9wcG9ydHVuaXR5IHRvIHBvcHVsYXRlCiAgICB0aGUgYXJyYXkgd2l0aCBy
1167
+ ZWNvcmRzIG9mIHRoYXQgdHlwZS4KCiAgICBAbWV0aG9kIGZpbmRBbGwKICAg
1168
+ IEBwcml2YXRlCiAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCiAgICBAcmV0dXJu
1169
+ IHtEUy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXl9CiAgKi8KICBmaW5k
1170
+ QWxsOiBmdW5jdGlvbih0eXBlKSB7CiAgICB0eXBlID0gdGhpcy5tb2RlbEZv
1171
+ cih0eXBlKTsKCiAgICByZXR1cm4gdGhpcy5mZXRjaEFsbCh0eXBlLCB0aGlz
1172
+ LmFsbCh0eXBlKSk7CiAgfSwKCiAgLyoqCiAgICBAbWV0aG9kIGZldGNoQWxs
1173
+ CiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHR5cGUKICAgIEBwYXJhbSBhcnJh
1174
+ eQogICAgQHJldHVybnMgUHJvbWlzZQogICovCiAgZmV0Y2hBbGw6IGZ1bmN0
1175
+ aW9uKHR5cGUsIGFycmF5KSB7CiAgICB2YXIgYWRhcHRlciA9IHRoaXMuYWRh
1176
+ cHRlckZvclR5cGUodHlwZSksCiAgICAgICAgc2luY2VUb2tlbiA9IHRoaXMu
1177
+ dHlwZU1hcEZvcih0eXBlKS5tZXRhZGF0YS5zaW5jZSwKICAgICAgICByZXNv
1178
+ bHZlciA9IEVtYmVyLlJTVlAuZGVmZXIoKTsKCiAgICBzZXQoYXJyYXksICdp
1179
+ c1VwZGF0aW5nJywgdHJ1ZSk7CgogICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJp
1180
+ ZWQgdG8gbG9hZCBhbGwgcmVjb3JkcyBidXQgeW91IGhhdmUgbm8gYWRhcHRl
1181
+ ciAoZm9yICIgKyB0eXBlICsgIikiLCBhZGFwdGVyKTsKICAgIEVtYmVyLmFz
1182
+ c2VydCgiWW91IHRyaWVkIHRvIGxvYWQgYWxsIHJlY29yZHMgYnV0IHlvdXIg
1183
+ YWRhcHRlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGZpbmRBbGxgIiwgYWRhcHRl
1184
+ ci5maW5kQWxsKTsKCiAgICBfZmluZEFsbChhZGFwdGVyLCB0aGlzLCB0eXBl
1185
+ LCBzaW5jZVRva2VuLCByZXNvbHZlcik7CgogICAgcmV0dXJuIHByb21pc2VB
1186
+ cnJheShyZXNvbHZlci5wcm9taXNlKTsKICB9LAoKICAvKioKICAgIEBtZXRo
1187
+ b2QgZGlkVXBkYXRlQWxsCiAgICBAcGFyYW0gdHlwZQogICovCiAgZGlkVXBk
1188
+ YXRlQWxsOiBmdW5jdGlvbih0eXBlKSB7CiAgICB2YXIgZmluZEFsbENhY2hl
1189
+ ID0gdGhpcy50eXBlTWFwRm9yKHR5cGUpLmZpbmRBbGxDYWNoZTsKICAgIHNl
1190
+ dChmaW5kQWxsQ2FjaGUsICdpc1VwZGF0aW5nJywgZmFsc2UpOwogIH0sCgog
1191
+ IC8qKgogICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGZpbHRlcmVkIGFycmF5
1192
+ IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBrbm93biByZWNvcmRzCiAgICBm
1193
+ b3IgYSBnaXZlbiB0eXBlLgoKICAgIE5vdGUgdGhhdCBiZWNhdXNlIGl0J3Mg
1194
+ anVzdCBhIGZpbHRlciwgaXQgd2lsbCBoYXZlIGFueSBsb2NhbGx5CiAgICBj
1195
+ cmVhdGVkIHJlY29yZHMgb2YgdGhlIHR5cGUuCgogICAgQWxzbyBub3RlIHRo
1196
+ YXQgbXVsdGlwbGUgY2FsbHMgdG8gYGFsbGAgZm9yIGEgZ2l2ZW4gdHlwZSB3
1197
+ aWxsIGFsd2F5cwogICAgcmV0dXJuIHRoZSBzYW1lIFJlY29yZEFycmF5LgoK
1198
+ ICAgIEBtZXRob2QgYWxsCiAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCiAgICBA
1199
+ cmV0dXJuIHtEUy5SZWNvcmRBcnJheX0KICAqLwogIGFsbDogZnVuY3Rpb24o
1200
+ dHlwZSkgewogICAgdmFyIHR5cGVNYXAgPSB0aGlzLnR5cGVNYXBGb3IodHlw
1201
+ ZSksCiAgICAgICAgZmluZEFsbENhY2hlID0gdHlwZU1hcC5maW5kQWxsQ2Fj
1202
+ aGU7CgogICAgaWYgKGZpbmRBbGxDYWNoZSkgeyByZXR1cm4gZmluZEFsbENh
1203
+ Y2hlOyB9CgogICAgdmFyIGFycmF5ID0gRFMuUmVjb3JkQXJyYXkuY3JlYXRl
1204
+ KHsKICAgICAgdHlwZTogdHlwZSwKICAgICAgY29udGVudDogRW1iZXIuQSgp
1205
+ LAogICAgICBzdG9yZTogdGhpcywKICAgICAgaXNMb2FkZWQ6IHRydWUKICAg
1206
+ IH0pOwoKICAgIHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyLnJlZ2lzdGVyRmls
1207
+ dGVyZWRSZWNvcmRBcnJheShhcnJheSwgdHlwZSk7CgogICAgdHlwZU1hcC5m
1208
+ aW5kQWxsQ2FjaGUgPSBhcnJheTsKICAgIHJldHVybiBhcnJheTsKICB9LAoK
1209
+ ICAvKioKICAgIFRha2VzIGEgdHlwZSBhbmQgZmlsdGVyIGZ1bmN0aW9uLCBh
1210
+ bmQgcmV0dXJucyBhIGxpdmUgUmVjb3JkQXJyYXkgdGhhdAogICAgcmVtYWlu
1211
+ cyB1cCB0byBkYXRlIGFzIG5ldyByZWNvcmRzIGFyZSBsb2FkZWQgaW50byB0
1212
+ aGUgc3RvcmUgb3IgY3JlYXRlZAogICAgbG9jYWxseS4KCiAgICBUaGUgY2Fs
1213
+ bGJhY2sgZnVuY3Rpb24gdGFrZXMgYSBtYXRlcmlhbGl6ZWQgcmVjb3JkLCBh
1214
+ bmQgcmV0dXJucyB0cnVlCiAgICBpZiB0aGUgcmVjb3JkIHNob3VsZCBiZSBp
1215
+ bmNsdWRlZCBpbiB0aGUgZmlsdGVyIGFuZCBmYWxzZSBpZiBpdCBzaG91bGQK
1216
+ ICAgIG5vdC4KCiAgICBUaGUgZmlsdGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBv
1217
+ bmNlIG9uIGFsbCByZWNvcmRzIGZvciB0aGUgdHlwZSB3aGVuCiAgICBpdCBp
1218
+ cyBjcmVhdGVkLCBhbmQgdGhlbiBvbmNlIG9uIGVhY2ggbmV3bHkgbG9hZGVk
1219
+ IG9yIGNyZWF0ZWQgcmVjb3JkLgoKICAgIElmIGFueSBvZiBhIHJlY29yZCdz
1220
+ IHByb3BlcnRpZXMgY2hhbmdlLCBvciBpZiBpdCBjaGFuZ2VzIHN0YXRlLCB0
1221
+ aGUKICAgIGZpbHRlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYWdhaW4g
1222
+ dG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgc2hvdWxkCiAgICBzdGlsbCBiZSBp
1223
+ biB0aGUgYXJyYXkuCgogICAgTm90ZSB0aGF0IHRoZSBleGlzdGVuY2Ugb2Yg
1224
+ YSBmaWx0ZXIgb24gYSB0eXBlIHdpbGwgdHJpZ2dlciBpbW1lZGlhdGUKICAg
1225
+ IG1hdGVyaWFsaXphdGlvbiBvZiBhbGwgbG9hZGVkIGRhdGEgZm9yIGEgZ2l2
1226
+ ZW4gdHlwZSwgc28geW91IG1pZ2h0CiAgICBub3Qgd2FudCB0byB1c2UgZmls
1227
+ dGVycyBmb3IgYSB0eXBlIGlmIHlvdSBhcmUgbG9hZGluZyBtYW55IHJlY29y
1228
+ ZHMKICAgIGludG8gdGhlIHN0b3JlLCBtYW55IG9mIHdoaWNoIGFyZSBub3Qg
1229
+ YWN0aXZlIGF0IGFueSBnaXZlbiB0aW1lLgoKICAgIEluIHRoaXMgc2NlbmFy
1230
+ aW8sIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIGZpbHRlcmluZyB0aGUg
1231
+ cmF3CiAgICBkYXRhIGJlZm9yZSBsb2FkaW5nIGl0IGludG8gdGhlIHN0b3Jl
1232
+ LgoKICAgIEBtZXRob2QgZmlsdGVyCiAgICBAcGFyYW0ge0NsYXNzfSB0eXBl
1233
+ CiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKICAgIEByZXR1cm4ge0RT
1234
+ LkZpbHRlcmVkUmVjb3JkQXJyYXl9CiAgKi8KICBmaWx0ZXI6IGZ1bmN0aW9u
1235
+ KHR5cGUsIHF1ZXJ5LCBmaWx0ZXIpIHsKICAgIHZhciBwcm9taXNlOwoKICAg
1236
+ IC8vIGFsbG93IGFuIG9wdGlvbmFsIHNlcnZlciBxdWVyeQogICAgaWYgKGFy
1237
+ Z3VtZW50cy5sZW5ndGggPT09IDMpIHsKICAgICAgcHJvbWlzZSA9IHRoaXMu
1238
+ ZmluZFF1ZXJ5KHR5cGUsIHF1ZXJ5KTsKICAgIH0gZWxzZSBpZiAoYXJndW1l
1239
+ bnRzLmxlbmd0aCA9PT0gMikgewogICAgICBmaWx0ZXIgPSBxdWVyeTsKICAg
1240
+ IH0KCiAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKCiAgICB2YXIg
1241
+ YXJyYXkgPSBEUy5GaWx0ZXJlZFJlY29yZEFycmF5LmNyZWF0ZSh7CiAgICAg
1242
+ IHR5cGU6IHR5cGUsCiAgICAgIGNvbnRlbnQ6IEVtYmVyLkEoKSwKICAgICAg
1243
+ c3RvcmU6IHRoaXMsCiAgICAgIG1hbmFnZXI6IHRoaXMucmVjb3JkQXJyYXlN
1244
+ YW5hZ2VyLAogICAgICBmaWx0ZXJGdW5jdGlvbjogZmlsdGVyCiAgICB9KTsK
1245
+ CiAgICB0aGlzLnJlY29yZEFycmF5TWFuYWdlci5yZWdpc3RlckZpbHRlcmVk
1246
+ UmVjb3JkQXJyYXkoYXJyYXksIHR5cGUsIGZpbHRlcik7CgogICAgaWYgKHBy
1247
+ b21pc2UpIHsKICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbigp
1248
+ IHsgcmV0dXJuIGFycmF5OyB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVy
1249
+ biBhcnJheTsKICAgIH0KICB9LAoKICAvKioKICAgIFRoaXMgbWV0aG9kIHJl
1250
+ dHVybnMgaWYgYSBjZXJ0YWluIHJlY29yZCBpcyBhbHJlYWR5IGxvYWRlZAog
1251
+ ICAgaW4gdGhlIHN0b3JlLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBrbm93IGJl
1252
+ Zm9yZWhhbmQgaWYgYSBmaW5kKCkKICAgIHdpbGwgcmVzdWx0IGluIGEgcmVx
1253
+ dWVzdCBvciB0aGF0IGl0IHdpbGwgYmUgYSBjYWNoZSBoaXQuCgogICAgQG1l
1254
+ dGhvZCByZWNvcmRJc0xvYWRlZAogICAgQHBhcmFtIHtDbGFzc30gdHlwZQog
1255
+ ICAgQHBhcmFtIHtzdHJpbmd9IGlkCiAgICBAcmV0dXJuIHtib29sZWFufQog
1256
+ ICovCiAgcmVjb3JkSXNMb2FkZWQ6IGZ1bmN0aW9uKHR5cGUsIGlkKSB7CiAg
1257
+ ICBpZiAoIXRoaXMuaGFzUmVjb3JkRm9ySWQodHlwZSwgaWQpKSB7IHJldHVy
1258
+ biBmYWxzZTsgfQogICAgcmV0dXJuICFnZXQodGhpcy5yZWNvcmRGb3JJZCh0
1259
+ eXBlLCBpZCksICdpc0VtcHR5Jyk7CiAgfSwKCiAgLy8gLi4uLi4uLi4uLi4u
1260
+ CiAgLy8gLiBVUERBVElORyAuCiAgLy8gLi4uLi4uLi4uLi4uCgogIC8qKgog
1261
+ ICAgSWYgdGhlIGFkYXB0ZXIgdXBkYXRlcyBhdHRyaWJ1dGVzIG9yIGFja25v
1262
+ d2xlZGdlcyBjcmVhdGlvbgogICAgb3IgZGVsZXRpb24sIHRoZSByZWNvcmQg
1263
+ d2lsbCBub3RpZnkgdGhlIHN0b3JlIHRvIHVwZGF0ZSBpdHMKICAgIG1lbWJl
1264
+ cnNoaXAgaW4gYW55IGZpbHRlcnMuCgogICAgVG8gYXZvaWQgdGhyYXNoaW5n
1265
+ LCB0aGlzIG1ldGhvZCBpcyBpbnZva2VkIG9ubHkgb25jZSBwZXIKICAgIHJ1
1266
+ biBsb29wIHBlciByZWNvcmQuCgogICAgQG1ldGhvZCBkYXRhV2FzVXBkYXRl
1267
+ ZAogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7Q2xhc3N9IHR5cGUKICAgIEBw
1268
+ YXJhbSB7TnVtYmVyfFN0cmluZ30gY2xpZW50SWQKICAgIEBwYXJhbSB7RFMu
1269
+ TW9kZWx9IHJlY29yZAogICovCiAgZGF0YVdhc1VwZGF0ZWQ6IGZ1bmN0aW9u
1270
+ KHR5cGUsIHJlY29yZCkgewogICAgLy8gQmVjYXVzZSBkYXRhIHVwZGF0ZXMg
1271
+ YXJlIGludm9rZWQgYXQgdGhlIGVuZCBvZiB0aGUgcnVuIGxvb3AsCiAgICAv
1272
+ LyBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgcmVjb3JkIG1pZ2h0IGJlIGRlbGV0
1273
+ ZWQgYWZ0ZXIgaXRzIGRhdGEKICAgIC8vIGhhcyBiZWVuIG1vZGlmaWVkIGFu
1274
+ ZCB0aGlzIG1ldGhvZCB3YXMgc2NoZWR1bGVkIHRvIGJlIGNhbGxlZC4KICAg
1275
+ IC8vCiAgICAvLyBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSByZWNvcmQgd291
1276
+ bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZAogICAgLy8gZnJvbSBhbGwg
1277
+ cmVjb3JkIGFycmF5czsgY2FsbGluZyB1cGRhdGVSZWNvcmRBcnJheXMgd291
1278
+ bGQganVzdAogICAgLy8gYWRkIGl0IGJhY2suIElmIHRoZSByZWNvcmQgaXMg
1279
+ ZGVsZXRlZCwganVzdCBiYWlsLiBJdCBzaG91bGRuJ3QKICAgIC8vIGdpdmUg
1280
+ dXMgYW55IG1vcmUgdHJvdWJsZSBhZnRlciB0aGlzLgoKICAgIGlmIChnZXQo
1281
+ cmVjb3JkLCAnaXNEZWxldGVkJykpIHsgcmV0dXJuOyB9CgogICAgaWYgKGdl
1282
+ dChyZWNvcmQsICdpc0xvYWRlZCcpKSB7CiAgICAgIHRoaXMucmVjb3JkQXJy
1283
+ YXlNYW5hZ2VyLnJlY29yZERpZENoYW5nZShyZWNvcmQpOwogICAgfQogIH0s
1284
+ CgogIC8vIC4uLi4uLi4uLi4uLi4uCiAgLy8gLiBQRVJTSVNUSU5HIC4KICAv
1285
+ LyAuLi4uLi4uLi4uLi4uLgoKICAvKioKICAgIFRoaXMgbWV0aG9kIGlzIGNh
1286
+ bGxlZCBieSBgcmVjb3JkLnNhdmVgLCBhbmQgZ2V0cyBwYXNzZWQgYQogICAg
1287
+ cmVzb2x2ZXIgZm9yIHRoZSBwcm9taXNlIHRoYXQgYHJlY29yZC5zYXZlYCBy
1288
+ ZXR1cm5zLgoKICAgIEl0IHNjaGVkdWxlcyBzYXZpbmcgdG8gaGFwcGVuIGF0
1289
+ IHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wLgoKICAgIEBtZXRob2Qgc2NoZWR1
1290
+ bGVTYXZlCiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVj
1291
+ b3JkCiAgICBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlcgogICovCiAgc2No
1292
+ ZWR1bGVTYXZlOiBmdW5jdGlvbihyZWNvcmQsIHJlc29sdmVyKSB7CiAgICBy
1293
+ ZWNvcmQuYWRhcHRlcldpbGxDb21taXQoKTsKICAgIHRoaXMuX3BlbmRpbmdT
1294
+ YXZlLnB1c2goW3JlY29yZCwgcmVzb2x2ZXJdKTsKICAgIG9uY2UodGhpcywg
1295
+ J2ZsdXNoUGVuZGluZ1NhdmUnKTsKICB9LAoKICAvKioKICAgIFRoaXMgbWV0
1296
+ aG9kIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBydW4gbG9vcCwgYW5k
1297
+ CiAgICBmbHVzaGVzIGFueSByZWNvcmRzIHBhc3NlZCBpbnRvIGBzY2hlZHVs
1298
+ ZVNhdmVgCgogICAgQG1ldGhvZCBmbHVzaFBlbmRpbmdTYXZlCiAgICBAcHJp
1299
+ dmF0ZQogICovCiAgZmx1c2hQZW5kaW5nU2F2ZTogZnVuY3Rpb24oKSB7CiAg
1300
+ ICB2YXIgcGVuZGluZyA9IHRoaXMuX3BlbmRpbmdTYXZlLnNsaWNlKCk7CiAg
1301
+ ICB0aGlzLl9wZW5kaW5nU2F2ZSA9IFtdOwoKICAgIGZvckVhY2gocGVuZGlu
1302
+ ZywgZnVuY3Rpb24odHVwbGUpIHsKICAgICAgdmFyIHJlY29yZCA9IHR1cGxl
1303
+ WzBdLCByZXNvbHZlciA9IHR1cGxlWzFdLAogICAgICAgICAgYWRhcHRlciA9
1304
+ IHRoaXMuYWRhcHRlckZvclR5cGUocmVjb3JkLmNvbnN0cnVjdG9yKSwKICAg
1305
+ ICAgICAgIG9wZXJhdGlvbjsKCiAgICAgIGlmIChnZXQocmVjb3JkLCAnaXNO
1306
+ ZXcnKSkgewogICAgICAgIG9wZXJhdGlvbiA9ICdjcmVhdGVSZWNvcmQnOwog
1307
+ ICAgICB9IGVsc2UgaWYgKGdldChyZWNvcmQsICdpc0RlbGV0ZWQnKSkgewog
1308
+ ICAgICAgIG9wZXJhdGlvbiA9ICdkZWxldGVSZWNvcmQnOwogICAgICB9IGVs
1309
+ c2UgewogICAgICAgIG9wZXJhdGlvbiA9ICd1cGRhdGVSZWNvcmQnOwogICAg
1310
+ ICB9CgogICAgICBfY29tbWl0KGFkYXB0ZXIsIHRoaXMsIG9wZXJhdGlvbiwg
1311
+ cmVjb3JkLCByZXNvbHZlcik7CiAgICB9LCB0aGlzKTsKICB9LAoKICAvKioK
1312
+ ICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHRoZSBwcm9taXNlIHJl
1313
+ dHVybmVkIGJ5IGFuCiAgICBhZGFwdGVyJ3MgYGNyZWF0ZVJlY29yZGAsIGB1
1314
+ cGRhdGVSZWNvcmRgIG9yIGBkZWxldGVSZWNvcmRgCiAgICBpcyByZXNvbHZl
1315
+ ZC4KCiAgICBJZiB0aGUgZGF0YSBwcm92aWRlcyBhIHNlcnZlci1nZW5lcmF0
1316
+ ZWQgSUQsIGl0IHdpbGwKICAgIHVwZGF0ZSB0aGUgcmVjb3JkIGFuZCB0aGUg
1317
+ c3RvcmUncyBpbmRleGVzLgoKICAgIEBtZXRob2QgZGlkU2F2ZVJlY29yZAog
1318
+ ICAgQHByaXZhdGUKICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZCB0aGUg
1319
+ aW4tZmxpZ2h0IHJlY29yZAogICAgQHBhcmFtIHtPYmplY3R9IGRhdGEgb3B0
1320
+ aW9uYWwgZGF0YSAoc2VlIGFib3ZlKQogICovCiAgZGlkU2F2ZVJlY29yZDog
1321
+ ZnVuY3Rpb24ocmVjb3JkLCBkYXRhKSB7CiAgICBpZiAoZGF0YSkgewogICAg
1322
+ ICB0aGlzLnVwZGF0ZUlkKHJlY29yZCwgZGF0YSk7CiAgICB9CgogICAgcmVj
1323
+ b3JkLmFkYXB0ZXJEaWRDb21taXQoZGF0YSk7CiAgfSwKCiAgLyoqCiAgICBU
1324
+ aGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB0aGUgcHJvbWlzZSByZXR1cm5l
1325
+ ZCBieSBhbgogICAgYWRhcHRlcidzIGBjcmVhdGVSZWNvcmRgLCBgdXBkYXRl
1326
+ UmVjb3JkYCBvciBgZGVsZXRlUmVjb3JkYAogICAgaXMgcmVqZWN0ZWQgd2l0
1327
+ aCBhIGBEUy5JbnZhbGlkRXJyb3JgLgoKICAgIEBtZXRob2QgcmVjb3JkV2Fz
1328
+ SW52YWxpZAogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJl
1329
+ Y29yZAogICAgQHBhcmFtIHtPYmplY3R9IGVycm9ycwogICovCiAgcmVjb3Jk
1330
+ V2FzSW52YWxpZDogZnVuY3Rpb24ocmVjb3JkLCBlcnJvcnMpIHsKICAgIHJl
1331
+ Y29yZC5hZGFwdGVyRGlkSW52YWxpZGF0ZShlcnJvcnMpOwogIH0sCgogIC8q
1332
+ KgogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgdGhlIHByb21pc2Ug
1333
+ cmV0dXJuZWQgYnkgYW4KICAgIGFkYXB0ZXIncyBgY3JlYXRlUmVjb3JkYCwg
1334
+ YHVwZGF0ZVJlY29yZGAgb3IgYGRlbGV0ZVJlY29yZGAKICAgIGlzIHJlamVj
1335
+ dGVkICh3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gYSBgRFMuSW52YWxpZEVy
1336
+ cm9yYCkuCgogICAgQG1ldGhvZCByZWNvcmRXYXNFcnJvcgogICAgQHByaXZh
1337
+ dGUKICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAogICovCiAgcmVjb3Jk
1338
+ V2FzRXJyb3I6IGZ1bmN0aW9uKHJlY29yZCkgewogICAgcmVjb3JkLmFkYXB0
1339
+ ZXJEaWRFcnJvcigpOwogIH0sCgogIC8qKgogICAgV2hlbiBhbiBhZGFwdGVy
1340
+ J3MgYGNyZWF0ZVJlY29yZGAsIGB1cGRhdGVSZWNvcmRgIG9yIGBkZWxldGVS
1341
+ ZWNvcmRgCiAgICByZXNvbHZlcyB3aXRoIGRhdGEsIHRoaXMgbWV0aG9kIGV4
1342
+ dHJhY3RzIHRoZSBJRCBmcm9tIHRoZSBzdXBwbGllZAogICAgZGF0YS4KCiAg
1343
+ ICBAbWV0aG9kIHVwZGF0ZUlkCiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtE
1344
+ Uy5Nb2RlbH0gcmVjb3JkCiAgICBAcGFyYW0ge09iamVjdH0gZGF0YQogICov
1345
+ CiAgdXBkYXRlSWQ6IGZ1bmN0aW9uKHJlY29yZCwgZGF0YSkgewogICAgdmFy
1346
+ IG9sZElkID0gZ2V0KHJlY29yZCwgJ2lkJyksCiAgICAgICAgaWQgPSBjb2Vy
1347
+ Y2VJZChkYXRhLmlkKTsKCiAgICBFbWJlci5hc3NlcnQoIkFuIGFkYXB0ZXIg
1348
+ Y2Fubm90IGFzc2lnbiBhIG5ldyBpZCB0byBhIHJlY29yZCB0aGF0IGFscmVh
1349
+ ZHkgaGFzIGFuIGlkLiAiICsgcmVjb3JkICsgIiBoYWQgaWQ6ICIgKyBvbGRJ
1350
+ ZCArICIgYW5kIHlvdSB0cmllZCB0byB1cGRhdGUgaXQgd2l0aCAiICsgaWQg
1351
+ KyAiLiBUaGlzIGxpa2VseSBoYXBwZW5lZCBiZWNhdXNlIHlvdXIgc2VydmVy
1352
+ IHJldHVybmVkIGRhdGEgaW4gcmVzcG9uc2UgdG8gYSBmaW5kIG9yIHVwZGF0
1353
+ ZSB0aGF0IGhhZCBhIGRpZmZlcmVudCBpZCB0aGFuIHRoZSBvbmUgeW91IHNl
1354
+ bnQuIiwgb2xkSWQgPT09IG51bGwgfHwgaWQgPT09IG9sZElkKTsKCiAgICB0
1355
+ aGlzLnR5cGVNYXBGb3IocmVjb3JkLmNvbnN0cnVjdG9yKS5pZFRvUmVjb3Jk
1356
+ W2lkXSA9IHJlY29yZDsKCiAgICBzZXQocmVjb3JkLCAnaWQnLCBpZCk7CiAg
1357
+ fSwKCiAgLyoqCiAgICBSZXR1cm5zIGEgbWFwIG9mIElEcyB0byBjbGllbnQg
1358
+ SURzIGZvciBhIGdpdmVuIHR5cGUuCgogICAgQG1ldGhvZCB0eXBlTWFwRm9y
1359
+ CiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHR5cGUKICAqLwogIHR5cGVNYXBG
1360
+ b3I6IGZ1bmN0aW9uKHR5cGUpIHsKICAgIHZhciB0eXBlTWFwcyA9IGdldCh0
1361
+ aGlzLCAndHlwZU1hcHMnKSwKICAgICAgICBndWlkID0gRW1iZXIuZ3VpZEZv
1362
+ cih0eXBlKSwKICAgICAgICB0eXBlTWFwOwoKICAgIHR5cGVNYXAgPSB0eXBl
1363
+ TWFwc1tndWlkXTsKCiAgICBpZiAodHlwZU1hcCkgeyByZXR1cm4gdHlwZU1h
1364
+ cDsgfQoKICAgIHR5cGVNYXAgPSB7CiAgICAgIGlkVG9SZWNvcmQ6IHt9LAog
1365
+ ICAgICByZWNvcmRzOiBbXSwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwoK
1366
+ ICAgIHR5cGVNYXBzW2d1aWRdID0gdHlwZU1hcDsKCiAgICByZXR1cm4gdHlw
1367
+ ZU1hcDsKICB9LAoKICAvLyAuLi4uLi4uLi4uLi4uLi4uCiAgLy8gLiBMT0FE
1368
+ SU5HIERBVEEgLgogIC8vIC4uLi4uLi4uLi4uLi4uLi4KCiAgLyoqCiAgICBU
1369
+ aGlzIGludGVybmFsIG1ldGhvZCBpcyB1c2VkIGJ5IGBwdXNoYC4KCiAgICBA
1370
+ bWV0aG9kIF9sb2FkCiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtEUy5Nb2Rl
1371
+ bH0gdHlwZQogICAgQHBhcmFtIGRhdGEKICAgIEBwYXJhbSBwcmVtYXRlcmlh
1372
+ bGl6ZWQKICAqLwogIF9sb2FkOiBmdW5jdGlvbih0eXBlLCBkYXRhKSB7CiAg
1373
+ ICB2YXIgaWQgPSBjb2VyY2VJZChkYXRhLmlkKSwKICAgICAgICByZWNvcmQg
1374
+ PSB0aGlzLnJlY29yZEZvcklkKHR5cGUsIGlkKTsKCiAgICByZWNvcmQuc2V0
1375
+ dXBEYXRhKGRhdGEpOwogICAgdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIucmVj
1376
+ b3JkRGlkQ2hhbmdlKHJlY29yZCk7CgogICAgcmV0dXJuIHJlY29yZDsKICB9
1377
+ LAoKICAvKioKICAgIFJldHVybnMgYSBtb2RlbCBjbGFzcyBmb3IgYSBwYXJ0
1378
+ aWN1bGFyIGtleS4gVXNlZCBieQogICAgbWV0aG9kcyB0aGF0IHRha2UgYSB0
1379
+ eXBlIGtleSAobGlrZSBgZmluZGAsIGBjcmVhdGVSZWNvcmRgLAogICAgZXRj
1380
+ LikKCiAgICBAcGFyYW0ge1N0cmluZ30ga2V5CiAgICBAcmV0dXJucyB7c3Vi
1381
+ Y2xhc3Mgb2YgRFMuTW9kZWx9CiAgKi8KICBtb2RlbEZvcjogZnVuY3Rpb24o
1382
+ a2V5KSB7CiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHsKICAg
1383
+ ICAgcmV0dXJuIGtleTsKICAgIH0KCiAgICB2YXIgZmFjdG9yeSA9IHRoaXMu
1384
+ Y29udGFpbmVyLmxvb2t1cEZhY3RvcnkoJ21vZGVsOicra2V5KTsKCiAgICBF
1385
+ bWJlci5hc3NlcnQoIk5vIG1vZGVsIHdhcyBmb3VuZCBmb3IgJyIgKyBrZXkg
1386
+ KyAiJyIsIGZhY3RvcnkpOwoKICAgIGZhY3Rvcnkuc3RvcmUgPSB0aGlzOwog
1387
+ ICAgZmFjdG9yeS50eXBlS2V5ID0ga2V5OwoKICAgIHJldHVybiBmYWN0b3J5
1388
+ OwogIH0sCgogIC8qKgogICAgUHVzaCBzb21lIGRhdGEgZm9yIGEgZ2l2ZW4g
1389
+ dHlwZSBpbnRvIHRoZSBzdG9yZS4KCiAgICBUaGlzIG1ldGhvZCBleHBlY3Rz
1390
+ IG5vcm1hbGl6ZWQgZGF0YToKCiAgICAqIFRoZSBJRCBpcyBhIGtleSBuYW1l
1391
+ ZCBgaWRgIChhbiBJRCBpcyBtYW5kYXRvcnkpCiAgICAqIFRoZSBuYW1lcyBv
1392
+ ZiBhdHRyaWJ1dGVzIGFyZSB0aGUgb25lcyB5b3UgdXNlZCBpbgogICAgICB5
1393
+ b3VyIG1vZGVsJ3MgYERTLmF0dHJgcy4KICAgICogWW91ciByZWxhdGlvbnNo
1394
+ aXBzIG11c3QgYmU6CiAgICAgICogcmVwcmVzZW50ZWQgYXMgSURzIG9yIEFy
1395
+ cmF5cyBvZiBJRHMKICAgICAgKiByZXByZXNlbnRlZCBhcyBtb2RlbCBpbnN0
1396
+ YW5jZXMKICAgICAgKiByZXByZXNlbnRlZCBhcyBVUkxzLCB1bmRlciB0aGUg
1397
+ YGxpbmtzYCBrZXkKCiAgICBGb3IgdGhpcyBtb2RlbDoKCiAgICBgYGBqcwog
1398
+ ICAgQXBwLlBlcnNvbiA9IERTLk1vZGVsLmV4dGVuZCh7CiAgICAgIGZpcnN0
1399
+ TmFtZTogRFMuYXR0cigpLAogICAgICBsYXN0TmFtZTogRFMuYXR0cigpLAoK
1400
+ ICAgICAgY2hpbGRyZW46IERTLmhhc01hbnkoJ3BlcnNvbicpCiAgICB9KTsK
1401
+ ICAgIGBgYAoKICAgIFRvIHJlcHJlc2VudCB0aGUgY2hpbGRyZW4gYXMgSURz
1402
+ OgoKICAgIGBgYGpzCiAgICB7CiAgICAgIGlkOiAxLAogICAgICBmaXJzdE5h
1403
+ bWU6ICJUb20iLAogICAgICBsYXN0TmFtZTogIkRhbGUiLAogICAgICBjaGls
1404
+ ZHJlbjogWzEsIDIsIDNdCiAgICB9CiAgICBgYGAKCiAgICBUbyByZXByZXNl
1405
+ bnQgdGhlIGNoaWxkcmVuIHJlbGF0aW9uc2hpcCBhcyBhIFVSTDoKCiAgICBg
1406
+ YGBqcwogICAgewogICAgICBpZDogMSwKICAgICAgZmlyc3ROYW1lOiAiVG9t
1407
+ IiwKICAgICAgbGFzdE5hbWU6ICJEYWxlIiwKICAgICAgbGlua3M6IHsKICAg
1408
+ ICAgICBjaGlsZHJlbjogIi9wZW9wbGUvMS9jaGlsZHJlbiIKICAgICAgfQog
1409
+ ICAgfQogICAgYGBgCgogICAgSWYgeW91J3JlIHN0cmVhbWluZyBkYXRhIG9y
1410
+ IGltcGxlbWVudGluZyBhbiBhZGFwdGVyLAogICAgbWFrZSBzdXJlIHRoYXQg
1411
+ eW91IGhhdmUgY29udmVydGVkIHRoZSBpbmNvbWluZyBkYXRhCiAgICBpbnRv
1412
+ IHRoaXMgZm9ybS4KCiAgICBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBib3Ro
1413
+ IHRvIHB1c2ggaW4gYnJhbmQgbmV3CiAgICByZWNvcmRzLCBhcyB3ZWxsIGFz
1414
+ IHRvIHVwZGF0ZSBleGlzdGluZyByZWNvcmRzLgoKICAgIEBtZXRob2QgcHVz
1415
+ aAogICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKICAgIEBwYXJhbSB7T2JqZWN0
1416
+ fSBkYXRhCiAgICBAcmV0dXJucyBEUy5Nb2RlbCB0aGUgcmVjb3JkIHRoYXQg
1417
+ d2FzIGNyZWF0ZWQgb3IKICAgICAgdXBkYXRlZC4KICAqLwogIHB1c2g6IGZ1
1418
+ bmN0aW9uKHR5cGUsIGRhdGEpIHsKICAgIHZhciBzZXJpYWxpemVyID0gdGhp
1419
+ cy5zZXJpYWxpemVyRm9yKHR5cGUpOwogICAgdHlwZSA9IHRoaXMubW9kZWxG
1420
+ b3IodHlwZSk7CgogICAgZGF0YSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUo
1421
+ dHlwZSwgZGF0YSk7CgogICAgdGhpcy5fbG9hZCh0eXBlLCBkYXRhKTsKCiAg
1422
+ ICByZXR1cm4gdGhpcy5yZWNvcmRGb3JJZCh0eXBlLCBkYXRhLmlkKTsKICB9
1423
+ LAoKICAvKioKICAgIElmIHlvdSBoYXZlIGFuIEFycmF5IG9mIG5vcm1hbGl6
1424
+ ZWQgZGF0YSB0byBwdXNoLAogICAgeW91IGNhbiBjYWxsIGBwdXNoTWFueWAg
1425
+ d2l0aCB0aGUgQXJyYXksIGFuZCBpdCB3aWxsCiAgICBjYWxsIGBwdXNoYCBy
1426
+ ZXBlYXRlZGx5IGZvciB5b3UuCgogICAgQG1ldGhvZCBwdXNoTWFueQogICAg
1427
+ QHBhcmFtIHtTdHJpbmd9IHR5cGUKICAgIEBwYXJhbSB7QXJyYXl9IGRhdGFz
1428
+ CiAgICBAcmV0dXJuIHtBcnJheTxEUy5Nb2RlbD59CiAgKi8KICBwdXNoTWFu
1429
+ eTogZnVuY3Rpb24odHlwZSwgZGF0YXMpIHsKICAgIHJldHVybiBtYXAoZGF0
1430
+ YXMsIGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgcmV0dXJuIHRoaXMucHVzaCh0
1431
+ eXBlLCBkYXRhKTsKICAgIH0sIHRoaXMpOwogIH0sCgogIC8qKgogICAgQnVp
1432
+ bGQgYSBicmFuZCBuZXcgcmVjb3JkIGZvciBhIGdpdmVuIHR5cGUsIElELCBh
1433
+ bmQKICAgIGluaXRpYWwgZGF0YS4KCiAgICBAbWV0aG9kIGJ1aWxkUmVjb3Jk
1434
+ CiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2Rl
1435
+ bH0gdHlwZQogICAgQHBhcmFtIHtTdHJpbmd9IGlkCiAgICBAcGFyYW0ge09i
1436
+ amVjdH0gZGF0YQogICAgQHJldHVybnMgRFMuTW9kZWwKICAqLwogIGJ1aWxk
1437
+ UmVjb3JkOiBmdW5jdGlvbih0eXBlLCBpZCwgZGF0YSkgewogICAgdmFyIHR5
1438
+ cGVNYXAgPSB0aGlzLnR5cGVNYXBGb3IodHlwZSksCiAgICAgICAgaWRUb1Jl
1439
+ Y29yZCA9IHR5cGVNYXAuaWRUb1JlY29yZDsKCiAgICBFbWJlci5hc3NlcnQo
1440
+ J1RoZSBpZCAnICsgaWQgKyAnIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCB3aXRo
1441
+ IGFub3RoZXIgcmVjb3JkIG9mIHR5cGUgJyArIHR5cGUudG9TdHJpbmcoKSAr
1442
+ ICcuJywgIWlkIHx8ICFpZFRvUmVjb3JkW2lkXSk7CgogICAgdmFyIHJlY29y
1443
+ ZCA9IHR5cGUuX2NyZWF0ZSh7CiAgICAgIGlkOiBpZCwKICAgICAgc3RvcmU6
1444
+ IHRoaXMsCiAgICB9KTsKCiAgICBpZiAoZGF0YSkgewogICAgICByZWNvcmQu
1445
+ c2V0dXBEYXRhKGRhdGEpOwogICAgfQoKICAgIC8vIGlmIHdlJ3JlIGNyZWF0
1446
+ aW5nIGFuIGl0ZW0sIHRoaXMgcHJvY2VzcyB3aWxsIGJlIGRvbmUKICAgIC8v
1447
+ IGxhdGVyLCBvbmNlIHRoZSBvYmplY3QgaGFzIGJlZW4gcGVyc2lzdGVkLgog
1448
+ ICAgaWYgKGlkKSB7CiAgICAgIGlkVG9SZWNvcmRbaWRdID0gcmVjb3JkOwog
1449
+ ICAgfQoKICAgIHR5cGVNYXAucmVjb3Jkcy5wdXNoKHJlY29yZCk7CgogICAg
1450
+ cmV0dXJuIHJlY29yZDsKICB9LAoKICAvLyAuLi4uLi4uLi4uLi4uLi4KICAv
1451
+ LyAuIERFU1RSVUNUSU9OIC4KICAvLyAuLi4uLi4uLi4uLi4uLi4KCiAgLyoq
1452
+ CiAgICBXaGVuIGEgcmVjb3JkIGlzIGRlc3Ryb3llZCwgdGhpcyB1bi1pbmRl
1453
+ eGVzIGl0IGFuZAogICAgcmVtb3ZlcyBpdCBmcm9tIGFueSByZWNvcmQgYXJy
1454
+ YXlzIHNvIGl0IGNhbiBiZSBHQ2VkLgoKICAgIEBtZXRob2QgZGVtYXRlcmlh
1455
+ bGl6ZVJlY29yZAogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7RFMuTW9kZWx9
1456
+ IHJlY29yZAogICovCiAgZGVtYXRlcmlhbGl6ZVJlY29yZDogZnVuY3Rpb24o
1457
+ cmVjb3JkKSB7CiAgICB2YXIgdHlwZSA9IHJlY29yZC5jb25zdHJ1Y3RvciwK
1458
+ ICAgICAgICB0eXBlTWFwID0gdGhpcy50eXBlTWFwRm9yKHR5cGUpLAogICAg
1459
+ ICAgIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7CgogICAgcmVjb3JkLnVwZGF0
1460
+ ZVJlY29yZEFycmF5cygpOwoKICAgIGlmIChpZCkgewogICAgICBkZWxldGUg
1461
+ dHlwZU1hcC5pZFRvUmVjb3JkW2lkXTsKICAgIH0KCiAgICB2YXIgbG9jID0g
1462
+ aW5kZXhPZih0eXBlTWFwLnJlY29yZHMsIHJlY29yZCk7CiAgICB0eXBlTWFw
1463
+ LnJlY29yZHMuc3BsaWNlKGxvYywgMSk7CiAgfSwKCiAgLy8gLi4uLi4uLi4u
1464
+ Li4uLi4uLi4uLi4uLi4uCiAgLy8gLiBSRUxBVElPTlNISVAgQ0hBTkdFUyAu
1465
+ CiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgogIGFkZFJlbGF0aW9u
1466
+ c2hpcENoYW5nZUZvcjogZnVuY3Rpb24oY2hpbGRSZWNvcmQsIGNoaWxkS2V5
1467
+ LCBwYXJlbnRSZWNvcmQsIHBhcmVudEtleSwgY2hhbmdlKSB7CiAgICB2YXIg
1468
+ Y2xpZW50SWQgPSBjaGlsZFJlY29yZC5jbGllbnRJZCwKICAgICAgICBwYXJl
1469
+ bnRDbGllbnRJZCA9IHBhcmVudFJlY29yZCA/IHBhcmVudFJlY29yZCA6IHBh
1470
+ cmVudFJlY29yZDsKICAgIHZhciBrZXkgPSBjaGlsZEtleSArIHBhcmVudEtl
1471
+ eTsKICAgIHZhciBjaGFuZ2VzID0gdGhpcy5fcmVsYXRpb25zaGlwQ2hhbmdl
1472
+ czsKICAgIGlmICghKGNsaWVudElkIGluIGNoYW5nZXMpKSB7CiAgICAgIGNo
1473
+ YW5nZXNbY2xpZW50SWRdID0ge307CiAgICB9CiAgICBpZiAoIShwYXJlbnRD
1474
+ bGllbnRJZCBpbiBjaGFuZ2VzW2NsaWVudElkXSkpIHsKICAgICAgY2hhbmdl
1475
+ c1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdID0ge307CiAgICB9CiAgICBp
1476
+ ZiAoIShrZXkgaW4gY2hhbmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRd
1477
+ KSkgewogICAgICBjaGFuZ2VzW2NsaWVudElkXVtwYXJlbnRDbGllbnRJZF1b
1478
+ a2V5XSA9IHt9OwogICAgfQogICAgY2hhbmdlc1tjbGllbnRJZF1bcGFyZW50
1479
+ Q2xpZW50SWRdW2tleV1bY2hhbmdlLmNoYW5nZVR5cGVdID0gY2hhbmdlOwog
1480
+ IH0sCgogIHJlbW92ZVJlbGF0aW9uc2hpcENoYW5nZUZvcjogZnVuY3Rpb24o
1481
+ Y2xpZW50UmVjb3JkLCBjaGlsZEtleSwgcGFyZW50UmVjb3JkLCBwYXJlbnRL
1482
+ ZXksIHR5cGUpIHsKICAgIHZhciBjbGllbnRJZCA9IGNsaWVudFJlY29yZC5j
1483
+ bGllbnRJZCwKICAgICAgICBwYXJlbnRDbGllbnRJZCA9IHBhcmVudFJlY29y
1484
+ ZCA/IHBhcmVudFJlY29yZC5jbGllbnRJZCA6IHBhcmVudFJlY29yZDsKICAg
1485
+ IHZhciBjaGFuZ2VzID0gdGhpcy5fcmVsYXRpb25zaGlwQ2hhbmdlczsKICAg
1486
+ IHZhciBrZXkgPSBjaGlsZEtleSArIHBhcmVudEtleTsKICAgIGlmICghKGNs
1487
+ aWVudElkIGluIGNoYW5nZXMpIHx8ICEocGFyZW50Q2xpZW50SWQgaW4gY2hh
1488
+ bmdlc1tjbGllbnRJZF0pIHx8ICEoa2V5IGluIGNoYW5nZXNbY2xpZW50SWRd
1489
+ W3BhcmVudENsaWVudElkXSkpewogICAgICByZXR1cm47CiAgICB9CiAgICBk
1490
+ ZWxldGUgY2hhbmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdW2tleV1b
1491
+ dHlwZV07CiAgfSwKCiAgcmVsYXRpb25zaGlwQ2hhbmdlUGFpcnNGb3I6IGZ1
1492
+ bmN0aW9uKHJlY29yZCl7CiAgICB2YXIgdG9SZXR1cm4gPSBbXTsKCiAgICBp
1493
+ ZiggIXJlY29yZCApIHsgcmV0dXJuIHRvUmV0dXJuOyB9CgogICAgLy9UT0RP
1494
+ KElnb3IpIFdoYXQgYWJvdXQgdGhlIG90aGVyIHNpZGUKICAgIHZhciBjaGFu
1495
+ Z2VzT2JqZWN0ID0gdGhpcy5fcmVsYXRpb25zaGlwQ2hhbmdlc1tyZWNvcmQu
1496
+ Y2xpZW50SWRdOwogICAgZm9yICh2YXIgb2JqS2V5IGluIGNoYW5nZXNPYmpl
1497
+ Y3QpewogICAgICBpZihjaGFuZ2VzT2JqZWN0Lmhhc093blByb3BlcnR5KG9i
1498
+ aktleSkpewogICAgICAgIGZvciAodmFyIGNoYW5nZUtleSBpbiBjaGFuZ2Vz
1499
+ T2JqZWN0W29iaktleV0pewogICAgICAgICAgaWYoY2hhbmdlc09iamVjdFtv
1500
+ YmpLZXldLmhhc093blByb3BlcnR5KGNoYW5nZUtleSkpewogICAgICAgICAg
1501
+ ICB0b1JldHVybi5wdXNoKGNoYW5nZXNPYmplY3Rbb2JqS2V5XVtjaGFuZ2VL
1502
+ ZXldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAg
1503
+ IHJldHVybiB0b1JldHVybjsKICB9LAoKICAvLyAuLi4uLi4uLi4uLi4uLi4u
1504
+ Li4uLi4uCiAgLy8gLiBQRVItVFlQRSBBREFQVEVSUwogIC8vIC4uLi4uLi4u
1505
+ Li4uLi4uLi4uLi4uLi4KCiAgLyoqCiAgICBSZXR1cm5zIHRoZSBhZGFwdGVy
1506
+ IGZvciBhIGdpdmVuIHR5cGUuCgogICAgQG1ldGhvZCBhZGFwdGVyRm9yVHlw
1507
+ ZQogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9k
1508
+ ZWx9IHR5cGUKICAgIEByZXR1cm5zIERTLkFkYXB0ZXIKICAqLwogIGFkYXB0
1509
+ ZXJGb3JUeXBlOiBmdW5jdGlvbih0eXBlKSB7CiAgICB2YXIgY29udGFpbmVy
1510
+ ID0gdGhpcy5jb250YWluZXIsIGFkYXB0ZXI7CgogICAgaWYgKGNvbnRhaW5l
1511
+ cikgewogICAgICBhZGFwdGVyID0gY29udGFpbmVyLmxvb2t1cCgnYWRhcHRl
1512
+ cjonICsgdHlwZS50eXBlS2V5KSB8fCBjb250YWluZXIubG9va3VwKCdhZGFw
1513
+ dGVyOmFwcGxpY2F0aW9uJyk7CiAgICB9CgogICAgcmV0dXJuIGFkYXB0ZXIg
1514
+ fHwgZ2V0KHRoaXMsICdfYWRhcHRlcicpOwogIH0sCgogIC8vIC4uLi4uLi4u
1515
+ Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgogIC8vIC4gUkVDT1JEIENIQU5HRSBO
1516
+ T1RJRklDQVRJT04gLgogIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
1517
+ Li4uLgoKICAvKioKICAgIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHNl
1518
+ cmlhbGl6ZXIgZm9yIGEgZ2l2ZW4gdHlwZS4gRm9yCiAgICBleGFtcGxlLCBg
1519
+ c2VyaWFsaXplckZvcigncGVyc29uJylgIHdpbGwgcmV0dXJuIGFuIGluc3Rh
1520
+ bmNlIG9mCiAgICBgQXBwLlBlcnNvblNlcmlhbGl6ZXJgLgoKICAgIElmIG5v
1521
+ IGBBcHAuUGVyc29uU2VyaWFsaXplcmAgaXMgZm91bmQsIHRoaXMgbWV0aG9k
1522
+ IHdpbGwgbG9vawogICAgZm9yIGFuIGBBcHAuQXBwbGljYXRpb25TZXJpYWxp
1523
+ emVyYCAodGhlIGRlZmF1bHQgc2VyaWFsaXplciBmb3IKICAgIHlvdXIgZW50
1524
+ aXJlIGFwcGxpY2F0aW9uKS4KCiAgICBJZiBubyBgQXBwLkFwcGxpY2F0aW9u
1525
+ U2VyaWFsaXplcmAgaXMgZm91bmQsIGl0IHdpbGwgZmFsbCBiYWNrCiAgICB0
1526
+ byBhbiBpbnN0YW5jZSBvZiBgRFMuSlNPTlNlcmlhbGl6ZXJgLgoKICAgIEBt
1527
+ ZXRob2Qgc2VyaWFsaXplckZvcgogICAgQHByaXZhdGUKICAgIEBwYXJhbSB7
1528
+ U3RyaW5nfSB0eXBlIHRoZSByZWNvcmQgdG8gc2VyaWFsaXplCiAgKi8KICBz
1529
+ ZXJpYWxpemVyRm9yOiBmdW5jdGlvbih0eXBlKSB7CiAgICB2YXIgY29udGFp
1530
+ bmVyID0gdGhpcy5jb250YWluZXI7CgogICAgLy8gVE9ETzogTWFrZSB0ZXN0
1531
+ cyBwYXNzIHdpdGhvdXQgdGhpcwoKICAgIGlmICghY29udGFpbmVyKSB7CiAg
1532
+ ICAgIHJldHVybiBEUy5KU09OU2VyaWFsaXplci5jcmVhdGUoeyBzdG9yZTog
1533
+ dGhpcyB9KTsKICAgIH0KCiAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cCgn
1534
+ c2VyaWFsaXplcjonK3R5cGUpIHx8CiAgICAgICAgICAgY29udGFpbmVyLmxv
1535
+ b2t1cCgnc2VyaWFsaXplcjphcHBsaWNhdGlvbicpIHx8CiAgICAgICAgICAg
1536
+ Y29udGFpbmVyLmxvb2t1cCgnc2VyaWFsaXplcjpfZGVmYXVsdCcpOwogIH0K
1537
+ fSk7CgovLyBEZWxlZ2F0aW9uIHRvIHRoZSBhZGFwdGVyIGFuZCBwcm9taXNl
1538
+ IG1hbmFnZW1lbnQKCkRTLlByb21pc2VBcnJheSA9IEVtYmVyLkFycmF5UHJv
1539
+ eHkuZXh0ZW5kKEVtYmVyLlByb21pc2VQcm94eU1peGluKTsKRFMuUHJvbWlz
1540
+ ZU9iamVjdCA9IEVtYmVyLk9iamVjdFByb3h5LmV4dGVuZChFbWJlci5Qcm9t
1541
+ aXNlUHJveHlNaXhpbik7CgpmdW5jdGlvbiBwcm9taXNlT2JqZWN0KHByb21p
1542
+ c2UpIHsKICByZXR1cm4gRFMuUHJvbWlzZU9iamVjdC5jcmVhdGUoeyBwcm9t
1543
+ aXNlOiBwcm9taXNlIH0pOwp9CgpmdW5jdGlvbiBwcm9taXNlQXJyYXkocHJv
1544
+ bWlzZSkgewogIHJldHVybiBEUy5Qcm9taXNlQXJyYXkuY3JlYXRlKHsgcHJv
1545
+ bWlzZTogcHJvbWlzZSB9KTsKfQoKZnVuY3Rpb24gaXNUaGVuYWJsZShvYmpl
1546
+ Y3QpIHsKICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QudGhlbiA9
1547
+ PT0gJ2Z1bmN0aW9uJzsKfQoKZnVuY3Rpb24gc2VyaWFsaXplckZvcihhZGFw
1548
+ dGVyLCB0eXBlKSB7CiAgdmFyIHNlcmlhbGl6ZXIgPSBhZGFwdGVyLnNlcmlh
1549
+ bGl6ZXIsCiAgICAgIGRlZmF1bHRTZXJpYWxpemVyID0gYWRhcHRlci5kZWZh
1550
+ dWx0U2VyaWFsaXplciwKICAgICAgY29udGFpbmVyID0gYWRhcHRlci5jb250
1551
+ YWluZXI7CgogIGlmIChjb250YWluZXIgJiYgc2VyaWFsaXplciA9PT0gdW5k
1552
+ ZWZpbmVkKSB7CiAgICBzZXJpYWxpemVyID0gY29udGFpbmVyLmxvb2t1cCgn
1553
+ c2VyaWFsaXplcjonK3R5cGUudHlwZUtleSkgfHwKICAgICAgICAgICAgICAg
1554
+ ICBjb250YWluZXIubG9va3VwKCdzZXJpYWxpemVyOmFwcGxpY2F0aW9uJykg
1555
+ fHwKICAgICAgICAgICAgICAgICBjb250YWluZXIubG9va3VwKCdzZXJpYWxp
1556
+ emVyOicgKyBkZWZhdWx0U2VyaWFsaXplciB8fCAnc2VyaWFsaXplcjpfZGVm
1557
+ YXVsdCcpOwogIH0KCiAgaWYgKHNlcmlhbGl6ZXIgPT09IG51bGwgfHwgc2Vy
1558
+ aWFsaXplciA9PT0gdW5kZWZpbmVkKSB7CiAgICBzZXJpYWxpemVyID0gewog
1559
+ ICAgICBleHRyYWN0OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkg
1560
+ eyByZXR1cm4gcGF5bG9hZDsgfQogICAgfTsKICB9CgogIHJldHVybiBzZXJp
1561
+ YWxpemVyOwp9CgpmdW5jdGlvbiBfZmluZChhZGFwdGVyLCBzdG9yZSwgdHlw
1562
+ ZSwgaWQsIHJlc29sdmVyKSB7CiAgdmFyIHByb21pc2UgPSBhZGFwdGVyLmZp
1563
+ bmQoc3RvcmUsIHR5cGUsIGlkKSwKICAgICAgc2VyaWFsaXplciA9IHNlcmlh
1564
+ bGl6ZXJGb3IoYWRhcHRlciwgdHlwZSk7CgogIHJldHVybiByZXNvbHZlKHBy
1565
+ b21pc2UpLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgewogICAgRW1iZXIuYXNz
1566
+ ZXJ0KCJZb3UgbWFkZSBhIHJlcXVlc3QgZm9yIGEgIiArIHR5cGUudHlwZUtl
1567
+ eSArICIgd2l0aCBpZCAiICsgaWQgKyAiLCBidXQgdGhlIGFkYXB0ZXIncyBy
1568
+ ZXNwb25zZSBkaWQgbm90IGhhdmUgYW55IGRhdGEiLCBwYXlsb2FkKTsKICAg
1569
+ IHBheWxvYWQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUsIHBh
1570
+ eWxvYWQsIGlkLCAnZmluZCcpOwoKICAgIHJldHVybiBzdG9yZS5wdXNoKHR5
1571
+ cGUsIHBheWxvYWQpOwogIH0pLnRoZW4ocmVzb2x2ZXIucmVzb2x2ZSwgcmVz
1572
+ b2x2ZXIucmVqZWN0KTsKfQoKZnVuY3Rpb24gX2ZpbmRNYW55KGFkYXB0ZXIs
1573
+ IHN0b3JlLCB0eXBlLCBpZHMsIG93bmVyLCByZXNvbHZlcikgewogIHZhciBw
1574
+ cm9taXNlID0gYWRhcHRlci5maW5kTWFueShzdG9yZSwgdHlwZSwgaWRzLCBv
1575
+ d25lciksCiAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yKGFkYXB0
1576
+ ZXIsIHR5cGUpOwoKICByZXR1cm4gcmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1
1577
+ bmN0aW9uKHBheWxvYWQpIHsKICAgIHBheWxvYWQgPSBzZXJpYWxpemVyLmV4
1578
+ dHJhY3Qoc3RvcmUsIHR5cGUsIHBheWxvYWQsIG51bGwsICdmaW5kTWFueScp
1579
+ OwoKICAgIHN0b3JlLnB1c2hNYW55KHR5cGUsIHBheWxvYWQpOwogIH0pLnRo
1580
+ ZW4ocmVzb2x2ZXIucmVzb2x2ZSwgcmVzb2x2ZXIucmVqZWN0KTsKfQoKZnVu
1581
+ Y3Rpb24gX2ZpbmRIYXNNYW55KGFkYXB0ZXIsIHN0b3JlLCByZWNvcmQsIGxp
1582
+ bmssIHJlbGF0aW9uc2hpcCwgcmVzb2x2ZXIpIHsKICB2YXIgcHJvbWlzZSA9
1583
+ IGFkYXB0ZXIuZmluZEhhc01hbnkoc3RvcmUsIHJlY29yZCwgbGluaywgcmVs
1584
+ YXRpb25zaGlwKSwKICAgICAgc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3Io
1585
+ YWRhcHRlciwgcmVsYXRpb25zaGlwLnR5cGUpOwoKICByZXR1cm4gcmVzb2x2
1586
+ ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKICAgIHBheWxv
1587
+ YWQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHJlbGF0aW9uc2hpcC50
1588
+ eXBlLCBwYXlsb2FkLCBudWxsLCAnZmluZEhhc01hbnknKTsKCiAgICB2YXIg
1589
+ cmVjb3JkcyA9IHN0b3JlLnB1c2hNYW55KHJlbGF0aW9uc2hpcC50eXBlLCBw
1590
+ YXlsb2FkKTsKICAgIHJlY29yZC51cGRhdGVIYXNNYW55KHJlbGF0aW9uc2hp
1591
+ cC5rZXksIHJlY29yZHMpOwogIH0pLnRoZW4ocmVzb2x2ZXIucmVzb2x2ZSwg
1592
+ cmVzb2x2ZXIucmVqZWN0KTsKfQoKZnVuY3Rpb24gX2ZpbmRBbGwoYWRhcHRl
1593
+ ciwgc3RvcmUsIHR5cGUsIHNpbmNlVG9rZW4sIHJlc29sdmVyKSB7CiAgdmFy
1594
+ IHByb21pc2UgPSBhZGFwdGVyLmZpbmRBbGwoc3RvcmUsIHR5cGUsIHNpbmNl
1595
+ VG9rZW4pLAogICAgICBzZXJpYWxpemVyID0gc2VyaWFsaXplckZvcihhZGFw
1596
+ dGVyLCB0eXBlKTsKCiAgcmV0dXJuIHJlc29sdmUocHJvbWlzZSkudGhlbihm
1597
+ dW5jdGlvbihwYXlsb2FkKSB7CiAgICBwYXlsb2FkID0gc2VyaWFsaXplci5l
1598
+ eHRyYWN0KHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBudWxsLCAnZmluZEFsbCcp
1599
+ OwoKICAgIHN0b3JlLnB1c2hNYW55KHR5cGUsIHBheWxvYWQpOwogICAgc3Rv
1600
+ cmUuZGlkVXBkYXRlQWxsKHR5cGUpOwogICAgcmV0dXJuIHN0b3JlLmFsbCh0
1601
+ eXBlKTsKICB9KS50aGVuKHJlc29sdmVyLnJlc29sdmUsIHJlc29sdmVyLnJl
1602
+ amVjdCk7Cn0KCmZ1bmN0aW9uIF9maW5kUXVlcnkoYWRhcHRlciwgc3RvcmUs
1603
+ IHR5cGUsIHF1ZXJ5LCByZWNvcmRBcnJheSwgcmVzb2x2ZXIpIHsKICB2YXIg
1604
+ cHJvbWlzZSA9IGFkYXB0ZXIuZmluZFF1ZXJ5KHN0b3JlLCB0eXBlLCBxdWVy
1605
+ eSwgcmVjb3JkQXJyYXkpLAogICAgICBzZXJpYWxpemVyID0gc2VyaWFsaXpl
1606
+ ckZvcihhZGFwdGVyLCB0eXBlKTsKCiAgcmV0dXJuIHJlc29sdmUocHJvbWlz
1607
+ ZSkudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7CiAgICBwYXlsb2FkID0gc2Vy
1608
+ aWFsaXplci5leHRyYWN0KHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBudWxsLCAn
1609
+ ZmluZEFsbCcpOwoKICAgIHJlY29yZEFycmF5LmxvYWQocGF5bG9hZCk7CiAg
1610
+ ICByZXR1cm4gcmVjb3JkQXJyYXk7CiAgfSkudGhlbihyZXNvbHZlci5yZXNv
1611
+ bHZlLCByZXNvbHZlci5yZWplY3QpOwp9CgpmdW5jdGlvbiBfY29tbWl0KGFk
1612
+ YXB0ZXIsIHN0b3JlLCBvcGVyYXRpb24sIHJlY29yZCwgcmVzb2x2ZXIpIHsK
1613
+ ICB2YXIgdHlwZSA9IHJlY29yZC5jb25zdHJ1Y3RvciwKICAgICAgcHJvbWlz
1614
+ ZSA9IGFkYXB0ZXJbb3BlcmF0aW9uXShzdG9yZSwgdHlwZSwgcmVjb3JkKSwK
1615
+ ICAgICAgc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3IoYWRhcHRlciwgdHlw
1616
+ ZSk7CgogIEVtYmVyLmFzc2VydCgiWW91ciBhZGFwdGVyJ3MgJyIgKyBvcGVy
1617
+ YXRpb24gKyAiJyBtZXRob2QgbXVzdCByZXR1cm4gYSBwcm9taXNlLCBidXQg
1618
+ aXQgcmV0dXJuZWQgIiArIHByb21pc2UsIGlzVGhlbmFibGUocHJvbWlzZSkp
1619
+ OwoKICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsK
1620
+ ICAgIHBheWxvYWQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUs
1621
+ IHBheWxvYWQsIGdldChyZWNvcmQsICdpZCcpLCBvcGVyYXRpb24pOwogICAg
1622
+ c3RvcmUuZGlkU2F2ZVJlY29yZChyZWNvcmQsIHBheWxvYWQpOwogICAgcmV0
1623
+ dXJuIHJlY29yZDsKICB9LCBmdW5jdGlvbihyZWFzb24pIHsKICAgIGlmIChy
1624
+ ZWFzb24gaW5zdGFuY2VvZiBEUy5JbnZhbGlkRXJyb3IpIHsKICAgICAgc3Rv
1625
+ cmUucmVjb3JkV2FzSW52YWxpZChyZWNvcmQsIHJlYXNvbi5lcnJvcnMpOwog
1626
+ ICAgfSBlbHNlIHsKICAgICAgc3RvcmUucmVjb3JkV2FzRXJyb3IocmVjb3Jk
1627
+ LCByZWFzb24pOwogICAgfQoKICAgIHRocm93IHJlYXNvbjsKICB9KS50aGVu
1628
+ KHJlc29sdmVyLnJlc29sdmUsIHJlc29sdmVyLnJlamVjdCk7Cn0KCn0pKCk7
1629
+ CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVsZSBlbWJlci1kYXRhCiov
1630
+ Cgp2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQsCiAgICBv
1631
+ bmNlID0gRW1iZXIucnVuLm9uY2UsIGFycmF5TWFwID0gRW1iZXIuQXJyYXlQ
1632
+ b2x5ZmlsbHMubWFwOwoKLyoKICBXQVJOSU5HOiBNdWNoIG9mIHRoZXNlIGRv
1633
+ Y3MgYXJlIGluYWNjdXJhdGUgYXMgb2YgYmY4NDk3LgoKICBUaGlzIGZpbGUg
1634
+ ZW5jYXBzdWxhdGVzIHRoZSB2YXJpb3VzIHN0YXRlcyB0aGF0IGEgcmVjb3Jk
1635
+ IGNhbiB0cmFuc2l0aW9uCiAgdGhyb3VnaCBkdXJpbmcgaXRzIGxpZmVjeWNs
1636
+ ZS4KCiAgIyMjIFN0YXRlIE1hbmFnZXIKCiAgQSByZWNvcmQncyBzdGF0ZSBt
1637
+ YW5hZ2VyIGV4cGxpY2l0bHkgdHJhY2tzIHdoYXQgc3RhdGUgYSByZWNvcmQg
1638
+ aXMgaW4KICBhdCBhbnkgZ2l2ZW4gdGltZS4gRm9yIGluc3RhbmNlLCBpZiBh
1639
+ IHJlY29yZCBpcyBuZXdseSBjcmVhdGVkIGFuZCBoYXMKICBub3QgeWV0IGJl
1640
+ ZW4gc2VudCB0byB0aGUgYWRhcHRlciB0byBiZSBzYXZlZCwgaXQgd291bGQg
1641
+ YmUgaW4gdGhlCiAgYGNyZWF0ZWQudW5jb21taXR0ZWRgIHN0YXRlLiAgSWYg
1642
+ YSByZWNvcmQgaGFzIGhhZCBsb2NhbCBtb2RpZmljYXRpb25zCiAgbWFkZSB0
1643
+ byBpdCB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzYXZlZCwg
1644
+ dGhlIHJlY29yZCB3b3VsZCBiZQogIGluIHRoZSBgdXBkYXRlZC5pbkZsaWdo
1645
+ dGAgc3RhdGUuIChUaGVzZSBzdGF0ZSBwYXRocyB3aWxsIGJlIGV4cGxhaW5l
1646
+ ZAogIGluIG1vcmUgZGV0YWlsIGJlbG93LikKCiAgRXZlbnRzIGFyZSBzZW50
1647
+ IGJ5IHRoZSByZWNvcmQgb3IgaXRzIHN0b3JlIHRvIHRoZSByZWNvcmQncyBz
1648
+ dGF0ZSBtYW5hZ2VyLgogIEhvdyB0aGUgc3RhdGUgbWFuYWdlciByZWFjdHMg
1649
+ dG8gdGhlc2UgZXZlbnRzIGlzIGRlcGVuZGVudCBvbiB3aGljaCBzdGF0ZQog
1650
+ IGl0IGlzIGluLiBJbiBzb21lIHN0YXRlcywgY2VydGFpbiBldmVudHMgd2ls
1651
+ bCBiZSBpbnZhbGlkIGFuZCB3aWxsIGNhdXNlCiAgYW4gZXhjZXB0aW9uIHRv
1652
+ IGJlIHJhaXNlZC4KCiAgU3RhdGVzIGFyZSBoaWVyYXJjaGljYWwuIEZvciBl
1653
+ eGFtcGxlLCBhIHJlY29yZCBjYW4gYmUgaW4gdGhlCiAgYGRlbGV0ZWQuc3Rh
1654
+ cnRgIHN0YXRlLCB0aGVuIHRyYW5zaXRpb24gaW50byB0aGUgYGRlbGV0ZWQu
1655
+ aW5GbGlnaHRgIHN0YXRlLgogIElmIGEgY2hpbGQgc3RhdGUgZG9lcyBub3Qg
1656
+ aW1wbGVtZW50IGFuIGV2ZW50IGhhbmRsZXIsIHRoZSBzdGF0ZSBtYW5hZ2Vy
1657
+ CiAgd2lsbCBhdHRlbXB0IHRvIGludm9rZSB0aGUgZXZlbnQgb24gYWxsIHBh
1658
+ cmVudCBzdGF0ZXMgdW50aWwgdGhlIHJvb3Qgc3RhdGUgaXMKICByZWFjaGVk
1659
+ LiBUaGUgc3RhdGUgaGllcmFyY2h5IG9mIGEgcmVjb3JkIGlzIGRlc2NyaWJl
1660
+ ZCBpbiB0ZXJtcyBvZiBhIHBhdGgKICBzdHJpbmcuIFlvdSBjYW4gZGV0ZXJt
1661
+ aW5lIGEgcmVjb3JkJ3MgY3VycmVudCBzdGF0ZSBieSBnZXR0aW5nIGl0cyBt
1662
+ YW5hZ2VyJ3MKICBjdXJyZW50IHN0YXRlIHBhdGg6CgogICAgICByZWNvcmQu
1663
+ Z2V0KCdzdGF0ZU1hbmFnZXIuY3VycmVudFBhdGgnKTsKICAgICAgLy89PiAi
1664
+ Y3JlYXRlZC51bmNvbW1pdHRlZCIKCiAgVGhlIGBEUy5Nb2RlbGAgc3RhdGVz
1665
+ IGFyZSB0aGVtc2VsdmVzIHN0YXRlbGVzcy4gV2hhdCB3ZSBtZWFuIGlzIHRo
1666
+ YXQsCiAgdGhvdWdoIGVhY2ggaW5zdGFuY2Ugb2YgYSByZWNvcmQgYWxzbyBo
1667
+ YXMgYSB1bmlxdWUgaW5zdGFuY2Ugb2YgYQogIGBEUy5TdGF0ZU1hbmFnZXJg
1668
+ LCB0aGUgaGllcmFyY2hpY2FsIHN0YXRlcyB0aGF0IGVhY2ggb2YgKnRob3Nl
1669
+ KiBwb2ludHMKICB0byBpcyBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZS4gRm9y
1670
+ IHBlcmZvcm1hbmNlIHJlYXNvbnMsIGluc3RlYWQgb2YgZWFjaAogIHJlY29y
1671
+ ZCBnZXR0aW5nIGl0cyBvd24gY29weSBvZiB0aGUgaGllcmFyY2h5IG9mIHN0
1672
+ YXRlcywgZWFjaCBzdGF0ZQogIG1hbmFnZXIgcG9pbnRzIHRvIHRoaXMgZ2xv
1673
+ YmFsLCBpbW11dGFibGUgc2hhcmVkIGluc3RhbmNlLiBIb3cgZG9lcyBhCiAg
1674
+ c3RhdGUga25vdyB3aGljaCByZWNvcmQgaXQgc2hvdWxkIGJlIGFjdGluZyBv
1675
+ bj8gIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8KICB0aGUgY3VycmVudCBzdGF0
1676
+ ZSBtYW5hZ2VyIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gZXZlcnkgbWV0
1677
+ aG9kIGludm9rZWQKICBvbiBhIHN0YXRlLgoKICBUaGUgc3RhdGUgbWFuYWdl
1678
+ ciBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB3aGVyZSB5b3Ug
1679
+ c2hvdWxkIHN0YXNoCiAgc3RhdGUgYWJvdXQgdGhlIHJlY29yZCBpZiBuZWVk
1680
+ ZWQ7IHlvdSBzaG91bGQgbmV2ZXIgc3RvcmUgZGF0YSBvbiB0aGUgc3RhdGUK
1681
+ ICBvYmplY3QgaXRzZWxmLiBJZiB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIHJl
1682
+ Y29yZCBiZWluZyBhY3RlZCBvbiwgeW91IGNhbgogIHJldHJpZXZlIHRoZSBz
1683
+ dGF0ZSBtYW5hZ2VyJ3MgYHJlY29yZGAgcHJvcGVydHkuIEZvciBleGFtcGxl
1684
+ LCBpZiB5b3UgaGFkCiAgYW4gZXZlbnQgaGFuZGxlciBgbXlFdmVudGA6Cgog
1685
+ ICAgICBteUV2ZW50OiBmdW5jdGlvbihtYW5hZ2VyKSB7CiAgICAgICAgdmFy
1686
+ IHJlY29yZCA9IG1hbmFnZXIuZ2V0KCdyZWNvcmQnKTsKICAgICAgICByZWNv
1687
+ cmQuZG9Tb21ldGhpbmcoKTsKICAgICAgfQoKICBGb3IgbW9yZSBpbmZvcm1h
1688
+ dGlvbiBhYm91dCBzdGF0ZSBtYW5hZ2VycyBpbiBnZW5lcmFsLCBzZWUgdGhl
1689
+ IEVtYmVyLmpzCiAgZG9jdW1lbnRhdGlvbiBvbiBgRW1iZXIuU3RhdGVNYW5h
1690
+ Z2VyYC4KCiAgIyMjIEV2ZW50cywgRmxhZ3MsIGFuZCBUcmFuc2l0aW9ucwoK
1691
+ ICBBIHN0YXRlIG1heSBpbXBsZW1lbnQgemVybyBvciBtb3JlIGV2ZW50cywg
1692
+ ZmxhZ3MsIG9yIHRyYW5zaXRpb25zLgoKICAjIyMjIEV2ZW50cwoKICBFdmVu
1693
+ dHMgYXJlIG5hbWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZva2VkIHdoZW4g
1694
+ c2VudCB0byBhIHJlY29yZC4gVGhlCiAgc3RhdGUgbWFuYWdlciB3aWxsIGZp
1695
+ cnN0IGxvb2sgZm9yIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgb24g
1696
+ dGhlCiAgY3VycmVudCBzdGF0ZS4gSWYgbm8gbWV0aG9kIGlzIGZvdW5kLCBp
1697
+ dCB3aWxsIHNlYXJjaCB0aGUgY3VycmVudCBzdGF0ZSdzCiAgcGFyZW50LCBh
1698
+ bmQgdGhlbiBpdHMgZ3JhbmRwYXJlbnQsIGFuZCBzbyBvbiB1bnRpbCByZWFj
1699
+ aGluZyB0aGUgdG9wIG9mCiAgdGhlIGhpZXJhcmNoeS4gSWYgdGhlIHJvb3Qg
1700
+ aXMgcmVhY2hlZCB3aXRob3V0IGFuIGV2ZW50IGhhbmRsZXIgYmVpbmcgZm91
1701
+ bmQsCiAgYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBUaGlzIGNhbiBi
1702
+ ZSB2ZXJ5IGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgbmV3CiAgZmVhdHVyZXMu
1703
+ CgogIEhlcmUncyBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIGEgc3Rh
1704
+ dGUgd2l0aCBhIGBteUV2ZW50YCBldmVudCBoYW5kbGVyOgoKICAgICAgYVN0
1705
+ YXRlOiBEUy5TdGF0ZS5jcmVhdGUoewogICAgICAgIG15RXZlbnQ6IGZ1bmN0
1706
+ aW9uKG1hbmFnZXIsIHBhcmFtKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygi
1707
+ UmVjZWl2ZWQgbXlFdmVudCB3aXRoICIrcGFyYW0pOwogICAgICAgIH0KICAg
1708
+ ICAgfSkKCiAgVG8gdHJpZ2dlciB0aGlzIGV2ZW50OgoKICAgICAgcmVjb3Jk
1709
+ LnNlbmQoJ215RXZlbnQnLCAnZm9vJyk7CiAgICAgIC8vPT4gIlJlY2VpdmVk
1710
+ IG15RXZlbnQgd2l0aCBmb28iCgogIE5vdGUgdGhhdCBhbiBvcHRpb25hbCBw
1711
+ YXJhbWV0ZXIgY2FuIGJlIHNlbnQgdG8gYSByZWNvcmQncyBgc2VuZCgpYCBt
1712
+ ZXRob2QsCiAgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBw
1713
+ YXJhbWV0ZXIgdG8gdGhlIGV2ZW50IGhhbmRsZXIuCgogIEV2ZW50cyBzaG91
1714
+ bGQgdHJhbnNpdGlvbiB0byBhIGRpZmZlcmVudCBzdGF0ZSBpZiBhcHByb3By
1715
+ aWF0ZS4gVGhpcyBjYW4gYmUKICBkb25lIGJ5IGNhbGxpbmcgdGhlIHN0YXRl
1716
+ IG1hbmFnZXIncyBgdHJhbnNpdGlvblRvKClgIG1ldGhvZCB3aXRoIGEgcGF0
1717
+ aCB0byB0aGUKICBkZXNpcmVkIHN0YXRlLiBUaGUgc3RhdGUgbWFuYWdlciB3
1718
+ aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgc3RhdGUgcGF0aAogIHJlbGF0
1719
+ aXZlIHRvIHRoZSBjdXJyZW50IHN0YXRlLiBJZiBubyBzdGF0ZSBpcyBmb3Vu
1720
+ ZCBhdCB0aGF0IHBhdGgsIGl0IHdpbGwKICBhdHRlbXB0IHRvIHJlc29sdmUg
1721
+ aXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RhdGUncyBwYXJlbnQsIGFu
1722
+ ZCB0aGVuIGl0cwogIHBhcmVudCwgYW5kIHNvIG9uIHVudGlsIHRoZSByb290
1723
+ IGlzIHJlYWNoZWQuIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgaGllcmFyY2h5
1724
+ CiAgbGlrZSB0aGlzOgoKICAgICAgKiBjcmVhdGVkCiAgICAgICAgKiBzdGFy
1725
+ dCA8LS0gY3VycmVudFN0YXRlCiAgICAgICAgKiBpbkZsaWdodAogICAgICAq
1726
+ IHVwZGF0ZWQKICAgICAgICAqIGluRmxpZ2h0CgogIElmIHdlIGFyZSBjdXJy
1727
+ ZW50bHkgaW4gdGhlIGBzdGFydGAgc3RhdGUsIGNhbGxpbmcKICBgdHJhbnNp
1728
+ dGlvblRvKCdpbkZsaWdodCcpYCB3b3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBg
1729
+ Y3JlYXRlZC5pbkZsaWdodGAgc3RhdGUsCiAgd2hpbGUgY2FsbGluZyBgdHJh
1730
+ bnNpdGlvblRvKCd1cGRhdGVkLmluRmxpZ2h0JylgIHdvdWxkIHRyYW5zaXRp
1731
+ b24gdG8KICB0aGUgYHVwZGF0ZWQuaW5GbGlnaHRgIHN0YXRlLgoKICBSZW1l
1732
+ bWJlciB0aGF0ICpvbmx5IGV2ZW50cyogc2hvdWxkIGV2ZXIgY2F1c2UgYSBz
1733
+ dGF0ZSB0cmFuc2l0aW9uLiBZb3Ugc2hvdWxkCiAgbmV2ZXIgY2FsbCBgdHJh
1734
+ bnNpdGlvblRvKClgIGZyb20gb3V0c2lkZSBhIHN0YXRlJ3MgZXZlbnQgaGFu
1735
+ ZGxlci4gSWYgeW91IGFyZQogIHRlbXB0ZWQgdG8gZG8gc28sIGNyZWF0ZSBh
1736
+ IG5ldyBldmVudCBhbmQgc2VuZCB0aGF0IHRvIHRoZSBzdGF0ZSBtYW5hZ2Vy
1737
+ LgoKICAjIyMjIEZsYWdzCgogIEZsYWdzIGFyZSBCb29sZWFuIHZhbHVlcyB0
1738
+ aGF0IGNhbiBiZSB1c2VkIHRvIGludHJvc3BlY3QgYSByZWNvcmQncyBjdXJy
1739
+ ZW50CiAgc3RhdGUgaW4gYSBtb3JlIHVzZXItZnJpZW5kbHkgd2F5IHRoYW4g
1740
+ ZXhhbWluaW5nIGl0cyBzdGF0ZSBwYXRoLiBGb3IgZXhhbXBsZSwKICBpbnN0
1741
+ ZWFkIG9mIGRvaW5nIHRoaXM6CgogICAgICB2YXIgc3RhdGVQYXRoID0gcmVj
1742
+ b3JkLmdldCgnc3RhdGVNYW5hZ2VyLmN1cnJlbnRQYXRoJyk7CiAgICAgIGlm
1743
+ IChzdGF0ZVBhdGggPT09ICdjcmVhdGVkLmluRmxpZ2h0JykgewogICAgICAg
1744
+ IGRvU29tZXRoaW5nKCk7CiAgICAgIH0KCiAgWW91IGNhbiBzYXk6CgogICAg
1745
+ ICBpZiAocmVjb3JkLmdldCgnaXNOZXcnKSAmJiByZWNvcmQuZ2V0KCdpc1Nh
1746
+ dmluZycpKSB7CiAgICAgICAgZG9Tb21ldGhpbmcoKTsKICAgICAgfQoKICBJ
1747
+ ZiB5b3VyIHN0YXRlIGRvZXMgbm90IHNldCBhIHZhbHVlIGZvciBhIGdpdmVu
1748
+ IGZsYWcsIHRoZSB2YWx1ZSB3aWxsCiAgYmUgaW5oZXJpdGVkIGZyb20gaXRz
1749
+ IHBhcmVudCAob3IgdGhlIGZpcnN0IHBsYWNlIGluIHRoZSBzdGF0ZSBoaWVy
1750
+ YXJjaHkKICB3aGVyZSBpdCBpcyBkZWZpbmVkKS4KCiAgVGhlIGN1cnJlbnQg
1751
+ c2V0IG9mIGZsYWdzIGFyZSBkZWZpbmVkIGJlbG93LiBJZiB5b3Ugd2FudCB0
1752
+ byBhZGQgYSBuZXcgZmxhZywKICBpbiBhZGRpdGlvbiB0byB0aGUgYXJlYSBi
1753
+ ZWxvdywgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGRlY2xhcmUgaXQgaW4gdGhl
1754
+ CiAgYERTLk1vZGVsYCBjbGFzcy4KCiAgIyMjIyBUcmFuc2l0aW9ucwoKICBU
1755
+ cmFuc2l0aW9ucyBhcmUgbGlrZSBldmVudCBoYW5kbGVycyBidXQgYXJlIGNh
1756
+ bGxlZCBhdXRvbWF0aWNhbGx5IHVwb24KICBlbnRlcmluZyBvciBleGl0aW5n
1757
+ IGEgc3RhdGUuIFRvIGltcGxlbWVudCBhIHRyYW5zaXRpb24sIGp1c3QgY2Fs
1758
+ bCBhIG1ldGhvZAogIGVpdGhlciBgZW50ZXJgIG9yIGBleGl0YDoKCiAgICAg
1759
+ IG15U3RhdGU6IERTLlN0YXRlLmNyZWF0ZSh7CiAgICAgICAgLy8gR2V0cyBj
1760
+ YWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGVudGVyaW5nCiAgICAgICAgLy8g
1761
+ dGhpcyBzdGF0ZS4KICAgICAgICBlbnRlcjogZnVuY3Rpb24obWFuYWdlcikg
1762
+ ewogICAgICAgICAgY29uc29sZS5sb2coIkVudGVyZWQgbXlTdGF0ZSIpOwog
1763
+ ICAgICAgIH0KICAgICAgfSkKCiAgTm90ZSB0aGF0IGVudGVyIGFuZCBleGl0
1764
+ IGV2ZW50cyBhcmUgY2FsbGVkIG9uY2UgcGVyIHRyYW5zaXRpb24uIElmIHRo
1765
+ ZQogIGN1cnJlbnQgc3RhdGUgY2hhbmdlcywgYnV0IGNoYW5nZXMgdG8gYW5v
1766
+ dGhlciBjaGlsZCBzdGF0ZSBvZiB0aGUgcGFyZW50LAogIHRoZSB0cmFuc2l0
1767
+ aW9uIGV2ZW50IG9uIHRoZSBwYXJlbnQgd2lsbCBub3QgYmUgdHJpZ2dlcmVk
1768
+ LgoqLwoKdmFyIGhhc0RlZmluZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2Jq
1769
+ ZWN0KSB7CiAgLy8gSWdub3JlIGludGVybmFsIHByb3BlcnR5IGRlZmluZWQg
1770
+ Ynkgc2ltdWxhdGVkIGBFbWJlci5jcmVhdGVgLgogIHZhciBuYW1lcyA9IEVt
1771
+ YmVyLmtleXMob2JqZWN0KTsKICB2YXIgaSwgbCwgbmFtZTsKICBmb3IgKGkg
1772
+ PSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgbmFt
1773
+ ZSA9IG5hbWVzW2ldOwogICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShu
1774
+ YW1lKSAmJiBvYmplY3RbbmFtZV0pIHsgcmV0dXJuIHRydWU7IH0KICB9Cgog
1775
+ IHJldHVybiBmYWxzZTsKfTsKCnZhciBkaWRTZXRQcm9wZXJ0eSA9IGZ1bmN0
1776
+ aW9uKHJlY29yZCwgY29udGV4dCkgewogIGlmIChjb250ZXh0LnZhbHVlICE9
1777
+ PSBjb250ZXh0Lm9sZFZhbHVlKSB7CiAgICByZWNvcmQuc2VuZCgnYmVjb21l
1778
+ RGlydHknKTsKICAgIHJlY29yZC51cGRhdGVSZWNvcmRBcnJheXNMYXRlcigp
1779
+ OwogIH0KfTsKCi8vIEltcGxlbWVudGF0aW9uIG5vdGVzOgovLwovLyBFYWNo
1780
+ IHN0YXRlIGhhcyBhIGJvb2xlYW4gdmFsdWUgZm9yIGFsbCBvZiB0aGUgZm9s
1781
+ bG93aW5nIGZsYWdzOgovLwovLyAqIGlzTG9hZGVkOiBUaGUgcmVjb3JkIGhh
1782
+ cyBhIHBvcHVsYXRlZCBgZGF0YWAgcHJvcGVydHkuIFdoZW4gYQovLyAgIHJl
1783
+ Y29yZCBpcyBsb2FkZWQgdmlhIGBzdG9yZS5maW5kYCwgYGlzTG9hZGVkYCBp
1784
+ cyBmYWxzZQovLyAgIHVudGlsIHRoZSBhZGFwdGVyIHNldHMgaXQuIFdoZW4g
1785
+ YSByZWNvcmQgaXMgY3JlYXRlZCBsb2NhbGx5LAovLyAgIGl0cyBgaXNMb2Fk
1786
+ ZWRgIHByb3BlcnR5IGlzIGFsd2F5cyB0cnVlLgovLyAqIGlzRGlydHk6IFRo
1787
+ ZSByZWNvcmQgaGFzIGxvY2FsIGNoYW5nZXMgdGhhdCBoYXZlIG5vdCB5ZXQg
1788
+ YmVlbgovLyAgIHNhdmVkIGJ5IHRoZSBhZGFwdGVyLiBUaGlzIGluY2x1ZGVz
1789
+ IHJlY29yZHMgdGhhdCBoYXZlIGJlZW4KLy8gICBjcmVhdGVkIChidXQgbm90
1790
+ IHlldCBzYXZlZCkgb3IgZGVsZXRlZC4KLy8gKiBpc1NhdmluZzogVGhlIHJl
1791
+ Y29yZCBoYXMgYmVlbiBjb21taXR0ZWQsIGJ1dAovLyAgIHRoZSBhZGFwdGVy
1792
+ IGhhcyBub3QgeWV0IGFja25vd2xlZGdlZCB0aGF0IHRoZSBjaGFuZ2VzIGhh
1793
+ dmUKLy8gICBiZWVuIHBlcnNpc3RlZCB0byB0aGUgYmFja2VuZC4KLy8gKiBp
1794
+ c0RlbGV0ZWQ6IFRoZSByZWNvcmQgd2FzIG1hcmtlZCBmb3IgZGVsZXRpb24u
1795
+ IFdoZW4gYGlzRGVsZXRlZGAKLy8gICBpcyB0cnVlIGFuZCBgaXNEaXJ0eWAg
1796
+ aXMgdHJ1ZSwgdGhlIHJlY29yZCBpcyBkZWxldGVkIGxvY2FsbHkKLy8gICBi
1797
+ dXQgdGhlIGRlbGV0aW9uIHdhcyBub3QgeWV0IHBlcnNpc3RlZC4gV2hlbiBg
1798
+ aXNTYXZpbmdgIGlzCi8vICAgdHJ1ZSwgdGhlIGNoYW5nZSBpcyBpbi1mbGln
1799
+ aHQuIFdoZW4gYm90aCBgaXNEaXJ0eWAgYW5kCi8vICAgYGlzU2F2aW5nYCBh
1800
+ cmUgZmFsc2UsIHRoZSBjaGFuZ2UgaGFzIHBlcnNpc3RlZC4KLy8gKiBpc0Vy
1801
+ cm9yOiBUaGUgYWRhcHRlciByZXBvcnRlZCB0aGF0IGl0IHdhcyB1bmFibGUg
1802
+ dG8gc2F2ZQovLyAgIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGJhY2tlbmQuIFRo
1803
+ aXMgbWF5IGFsc28gcmVzdWx0IGluIHRoZQovLyAgIHJlY29yZCBoYXZpbmcg
1804
+ aXRzIGBpc1ZhbGlkYCBwcm9wZXJ0eSBiZWNvbWUgZmFsc2UgaWYgdGhlCi8v
1805
+ ICAgYWRhcHRlciByZXBvcnRlZCB0aGF0IHNlcnZlci1zaWRlIHZhbGlkYXRp
1806
+ b25zIGZhaWxlZC4KLy8gKiBpc05ldzogVGhlIHJlY29yZCB3YXMgY3JlYXRl
1807
+ ZCBvbiB0aGUgY2xpZW50IGFuZCB0aGUgYWRhcHRlcgovLyAgIGRpZCBub3Qg
1808
+ eWV0IHJlcG9ydCB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQuCi8v
1809
+ ICogaXNWYWxpZDogTm8gY2xpZW50LXNpZGUgdmFsaWRhdGlvbnMgaGF2ZSBm
1810
+ YWlsZWQgYW5kIHRoZQovLyAgIGFkYXB0ZXIgZGlkIG5vdCByZXBvcnQgYW55
1811
+ IHNlcnZlci1zaWRlIHZhbGlkYXRpb24gZmFpbHVyZXMuCgovLyBUaGUgZGly
1812
+ dHkgc3RhdGUgaXMgYSBhYnN0cmFjdCBzdGF0ZSB3aG9zZSBmdW5jdGlvbmFs
1813
+ aXR5IGlzCi8vIHNoYXJlZCBiZXR3ZWVuIHRoZSBgY3JlYXRlZGAgYW5kIGB1
1814
+ cGRhdGVkYCBzdGF0ZXMuCi8vCi8vIFRoZSBkZWxldGVkIHN0YXRlIHNoYXJl
1815
+ cyB0aGUgYGlzRGlydHlgIGZsYWcgd2l0aCB0aGUKLy8gc3ViY2xhc3NlcyBv
1816
+ ZiBgRGlydHlTdGF0ZWAsIGJ1dCB3aXRoIGEgdmVyeSBkaWZmZXJlbnQKLy8g
1817
+ aW1wbGVtZW50YXRpb24uCi8vCi8vIERpcnR5IHN0YXRlcyBoYXZlIHRocmVl
1818
+ IGNoaWxkIHN0YXRlczoKLy8KLy8gYHVuY29tbWl0dGVkYDogdGhlIHN0b3Jl
1819
+ IGhhcyBub3QgeWV0IGhhbmRlZCBvZmYgdGhlIHJlY29yZAovLyAgIHRvIGJl
1820
+ IHNhdmVkLgovLyBgaW5GbGlnaHRgOiB0aGUgc3RvcmUgaGFzIGhhbmRlZCBv
1821
+ ZmYgdGhlIHJlY29yZCB0byBiZSBzYXZlZCwKLy8gICBidXQgdGhlIGFkYXB0
1822
+ ZXIgaGFzIG5vdCB5ZXQgYWNrbm93bGVkZ2VkIHN1Y2Nlc3MuCi8vIGBpbnZh
1823
+ bGlkYDogdGhlIHJlY29yZCBoYXMgaW52YWxpZCBpbmZvcm1hdGlvbiBhbmQg
1824
+ Y2Fubm90IGJlCi8vICAgc2VuZCB0byB0aGUgYWRhcHRlciB5ZXQuCnZhciBE
1825
+ aXJ0eVN0YXRlID0gewogIGluaXRpYWxTdGF0ZTogJ3VuY29tbWl0dGVkJywK
1826
+ CiAgLy8gRkxBR1MKICBpc0RpcnR5OiB0cnVlLAoKICAvLyBTVUJTVEFURVMK
1827
+ CiAgLy8gV2hlbiBhIHJlY29yZCBmaXJzdCBiZWNvbWVzIGRpcnR5LCBpdCBp
1828
+ cyBgdW5jb21taXR0ZWRgLgogIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBh
1829
+ cmUgbG9jYWwgcGVuZGluZyBjaGFuZ2VzLCBidXQgdGhleQogIC8vIGhhdmUg
1830
+ bm90IHlldCBiZWd1biB0byBiZSBzYXZlZCwgYW5kIGFyZSBub3QgaW52YWxp
1831
+ ZC4KICB1bmNvbW1pdHRlZDogewoKICAgIC8vIEVWRU5UUwogICAgZGlkU2V0
1832
+ UHJvcGVydHk6IGRpZFNldFByb3BlcnR5LAoKICAgIHB1c2hlZERhdGE6IEVt
1833
+ YmVyLkssCgogICAgYmVjb21lRGlydHk6IEVtYmVyLkssCgogICAgd2lsbENv
1834
+ bW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHJlY29yZC50cmFuc2l0
1835
+ aW9uVG8oJ2luRmxpZ2h0Jyk7CiAgICB9LAoKICAgIHJlbG9hZFJlY29yZDog
1836
+ ZnVuY3Rpb24ocmVjb3JkLCByZXNvbHZlcikgewogICAgICBnZXQocmVjb3Jk
1837
+ LCAnc3RvcmUnKS5yZWxvYWRSZWNvcmQocmVjb3JkLCByZXNvbHZlcik7CiAg
1838
+ ICB9LAoKICAgIGJlY2FtZUNsZWFuOiBmdW5jdGlvbihyZWNvcmQpIHsKICAg
1839
+ ICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGVkLnNhdmVkJyk7CiAgICB9
1840
+ LAoKICAgIGJlY2FtZUludmFsaWQ6IGZ1bmN0aW9uKHJlY29yZCkgewogICAg
1841
+ ICByZWNvcmQudHJhbnNpdGlvblRvKCdpbnZhbGlkJyk7CiAgICB9LAoKICAg
1842
+ IHJvbGxiYWNrOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgcmVjb3JkLnJv
1843
+ bGxiYWNrKCk7CiAgICB9CiAgfSwKCiAgLy8gT25jZSBhIHJlY29yZCBoYXMg
1844
+ YmVlbiBoYW5kZWQgb2ZmIHRvIHRoZSBhZGFwdGVyIHRvIGJlCiAgLy8gc2F2
1845
+ ZWQsIGl0IGlzIGluIHRoZSAnaW4gZmxpZ2h0JyBzdGF0ZS4gQ2hhbmdlcyB0
1846
+ byB0aGUKICAvLyByZWNvcmQgY2Fubm90IGJlIG1hZGUgZHVyaW5nIHRoaXMg
1847
+ d2luZG93LgogIGluRmxpZ2h0OiB7CiAgICAvLyBGTEFHUwogICAgaXNTYXZp
1848
+ bmc6IHRydWUsCgogICAgLy8gRVZFTlRTCiAgICBkaWRTZXRQcm9wZXJ0eTog
1849
+ ZGlkU2V0UHJvcGVydHksCiAgICBiZWNvbWVEaXJ0eTogRW1iZXIuSywKICAg
1850
+ IHB1c2hlZERhdGE6IEVtYmVyLkssCgogICAgLy8gVE9ETzogTW9yZSByb2J1
1851
+ c3Qgc2VtYW50aWNzIGFyb3VuZCBzYXZlLXdoaWxlLWluLWZsaWdodAogICAg
1852
+ d2lsbENvbW1pdDogRW1iZXIuSywKCiAgICBkaWRDb21taXQ6IGZ1bmN0aW9u
1853
+ KHJlY29yZCkgewogICAgICB2YXIgZGlydHlUeXBlID0gZ2V0KHRoaXMsICdk
1854
+ aXJ0eVR5cGUnKTsKCiAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ3NhdmVk
1855
+ Jyk7CiAgICAgIHJlY29yZC5zZW5kKCdpbnZva2VMaWZlY3ljbGVDYWxsYmFj
1856
+ a3MnLCBkaXJ0eVR5cGUpOwogICAgfSwKCiAgICBiZWNhbWVJbnZhbGlkOiBm
1857
+ dW5jdGlvbihyZWNvcmQsIGVycm9ycykgewogICAgICBzZXQocmVjb3JkLCAn
1858
+ ZXJyb3JzJywgZXJyb3JzKTsKCiAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8o
1859
+ J2ludmFsaWQnKTsKICAgICAgcmVjb3JkLnNlbmQoJ2ludm9rZUxpZmVjeWNs
1860
+ ZUNhbGxiYWNrcycpOwogICAgfSwKCiAgICBiZWNhbWVFcnJvcjogZnVuY3Rp
1861
+ b24ocmVjb3JkKSB7CiAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ3VuY29t
1862
+ bWl0dGVkJyk7CiAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2JlY2FtZUVy
1863
+ cm9yJywgcmVjb3JkKTsKICAgIH0KICB9LAoKICAvLyBBIHJlY29yZCBpcyBp
1864
+ biB0aGUgYGludmFsaWRgIHN0YXRlIHdoZW4gaXRzIGNsaWVudC1zaWRlCiAg
1865
+ Ly8gaW52YWxpZGF0aW9ucyBoYXZlIGZhaWxlZCwgb3IgaWYgdGhlIGFkYXB0
1866
+ ZXIgaGFzIGluZGljYXRlZAogIC8vIHRoZSB0aGUgcmVjb3JkIGZhaWxlZCBz
1867
+ ZXJ2ZXItc2lkZSBpbnZhbGlkYXRpb25zLgogIGludmFsaWQ6IHsKICAgIC8v
1868
+ IEZMQUdTCiAgICBpc1ZhbGlkOiBmYWxzZSwKCiAgICAvLyBFVkVOVFMKICAg
1869
+ IGRlbGV0ZVJlY29yZDogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHJlY29y
1870
+ ZC50cmFuc2l0aW9uVG8oJ2RlbGV0ZWQudW5jb21taXR0ZWQnKTsKICAgICAg
1871
+ cmVjb3JkLmNsZWFyUmVsYXRpb25zaGlwcygpOwogICAgfSwKCiAgICBkaWRT
1872
+ ZXRQcm9wZXJ0eTogZnVuY3Rpb24ocmVjb3JkLCBjb250ZXh0KSB7CiAgICAg
1873
+ IHZhciBlcnJvcnMgPSBnZXQocmVjb3JkLCAnZXJyb3JzJyksCiAgICAgICAg
1874
+ ICBrZXkgPSBjb250ZXh0Lm5hbWU7CgogICAgICBzZXQoZXJyb3JzLCBrZXks
1875
+ IG51bGwpOwoKICAgICAgaWYgKCFoYXNEZWZpbmVkUHJvcGVydGllcyhlcnJv
1876
+ cnMpKSB7CiAgICAgICAgcmVjb3JkLnNlbmQoJ2JlY2FtZVZhbGlkJyk7CiAg
1877
+ ICAgIH0KCiAgICAgIGRpZFNldFByb3BlcnR5KHJlY29yZCwgY29udGV4dCk7
1878
+ CiAgICB9LAoKICAgIGJlY29tZURpcnR5OiBFbWJlci5LLAoKICAgIHJvbGxi
1879
+ YWNrOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgcmVjb3JkLnNlbmQoJ2Jl
1880
+ Y2FtZVZhbGlkJyk7CiAgICAgIHJlY29yZC5zZW5kKCdyb2xsYmFjaycpOwog
1881
+ ICAgfSwKCiAgICBiZWNhbWVWYWxpZDogZnVuY3Rpb24ocmVjb3JkKSB7CiAg
1882
+ ICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ3VuY29tbWl0dGVkJyk7CiAgICB9
1883
+ LAoKICAgIGludm9rZUxpZmVjeWNsZUNhbGxiYWNrczogZnVuY3Rpb24ocmVj
1884
+ b3JkKSB7CiAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2JlY2FtZUludmFs
1885
+ aWQnLCByZWNvcmQpOwogICAgfQogIH0KfTsKCi8vIFRoZSBjcmVhdGVkIGFu
1886
+ ZCB1cGRhdGVkIHN0YXRlcyBhcmUgY3JlYXRlZCBvdXRzaWRlIHRoZSBzdGF0
1887
+ ZQovLyBjaGFydCBzbyB3ZSBjYW4gcmVvcGVuIHRoZWlyIHN1YnN0YXRlcyBh
1888
+ bmQgYWRkIG1peGlucyBhcwovLyBuZWNlc3NhcnkuCgpmdW5jdGlvbiBkZWVw
1889
+ Q2xvbmUob2JqZWN0KSB7CiAgdmFyIGNsb25lID0ge30sIHZhbHVlOwoKICBm
1890
+ b3IgKHZhciBwcm9wIGluIG9iamVjdCkgewogICAgdmFsdWUgPSBvYmplY3Rb
1891
+ cHJvcF07CiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2Jq
1892
+ ZWN0JykgewogICAgICBjbG9uZVtwcm9wXSA9IGRlZXBDbG9uZSh2YWx1ZSk7
1893
+ CiAgICB9IGVsc2UgewogICAgICBjbG9uZVtwcm9wXSA9IHZhbHVlOwogICAg
1894
+ fQogIH0KCiAgcmV0dXJuIGNsb25lOwp9CgpmdW5jdGlvbiBtaXhpbihvcmln
1895
+ aW5hbCwgaGFzaCkgewogIGZvciAodmFyIHByb3AgaW4gaGFzaCkgewogICAg
1896
+ b3JpZ2luYWxbcHJvcF0gPSBoYXNoW3Byb3BdOwogIH0KCiAgcmV0dXJuIG9y
1897
+ aWdpbmFsOwp9CgpmdW5jdGlvbiBkaXJ0eVN0YXRlKG9wdGlvbnMpIHsKICB2
1898
+ YXIgbmV3U3RhdGUgPSBkZWVwQ2xvbmUoRGlydHlTdGF0ZSk7CiAgcmV0dXJu
1899
+ IG1peGluKG5ld1N0YXRlLCBvcHRpb25zKTsKfQoKdmFyIGNyZWF0ZWRTdGF0
1900
+ ZSA9IGRpcnR5U3RhdGUoewogIGRpcnR5VHlwZTogJ2NyZWF0ZWQnLAoKICAv
1901
+ LyBGTEFHUwogIGlzTmV3OiB0cnVlCn0pOwoKdmFyIHVwZGF0ZWRTdGF0ZSA9
1902
+ IGRpcnR5U3RhdGUoewogIGRpcnR5VHlwZTogJ3VwZGF0ZWQnCn0pOwoKY3Jl
1903
+ YXRlZFN0YXRlLnVuY29tbWl0dGVkLmRlbGV0ZVJlY29yZCA9IGZ1bmN0aW9u
1904
+ KHJlY29yZCkgewogIHJlY29yZC5jbGVhclJlbGF0aW9uc2hpcHMoKTsKICBy
1905
+ ZWNvcmQudHJhbnNpdGlvblRvKCdkZWxldGVkLnNhdmVkJyk7Cn07CgpjcmVh
1906
+ dGVkU3RhdGUudW5jb21taXR0ZWQucm9sbGJhY2sgPSBmdW5jdGlvbihyZWNv
1907
+ cmQpIHsKICBEaXJ0eVN0YXRlLnVuY29tbWl0dGVkLnJvbGxiYWNrLmFwcGx5
1908
+ KHRoaXMsIGFyZ3VtZW50cyk7CiAgcmVjb3JkLnRyYW5zaXRpb25UbygnZGVs
1909
+ ZXRlZC5zYXZlZCcpOwp9OwoKdXBkYXRlZFN0YXRlLnVuY29tbWl0dGVkLmRl
1910
+ bGV0ZVJlY29yZCA9IGZ1bmN0aW9uKHJlY29yZCkgewogIHJlY29yZC50cmFu
1911
+ c2l0aW9uVG8oJ2RlbGV0ZWQudW5jb21taXR0ZWQnKTsKICByZWNvcmQuY2xl
1912
+ YXJSZWxhdGlvbnNoaXBzKCk7Cn07Cgp2YXIgUm9vdFN0YXRlID0gewogIC8v
1913
+ IEZMQUdTCiAgaXNFbXB0eTogZmFsc2UsCiAgaXNMb2FkaW5nOiBmYWxzZSwK
1914
+ ICBpc0xvYWRlZDogZmFsc2UsCiAgaXNEaXJ0eTogZmFsc2UsCiAgaXNTYXZp
1915
+ bmc6IGZhbHNlLAogIGlzRGVsZXRlZDogZmFsc2UsCiAgaXNOZXc6IGZhbHNl
1916
+ LAogIGlzVmFsaWQ6IHRydWUsCgogIC8vIFNVQlNUQVRFUwoKICAvLyBBIHJl
1917
+ Y29yZCBiZWdpbnMgaXRzIGxpZmVjeWNsZSBpbiB0aGUgYGVtcHR5YCBzdGF0
1918
+ ZS4KICAvLyBJZiBpdHMgZGF0YSB3aWxsIGNvbWUgZnJvbSB0aGUgYWRhcHRl
1919
+ ciwgaXQgd2lsbAogIC8vIHRyYW5zaXRpb24gaW50byB0aGUgYGxvYWRpbmdg
1920
+ IHN0YXRlLiBPdGhlcndpc2UsIGlmCiAgLy8gdGhlIHJlY29yZCBpcyBiZWlu
1921
+ ZyBjcmVhdGVkIG9uIHRoZSBjbGllbnQsIGl0IHdpbGwKICAvLyB0cmFuc2l0
1922
+ aW9uIGludG8gdGhlIGBjcmVhdGVkYCBzdGF0ZS4KICBlbXB0eTogewogICAg
1923
+ aXNFbXB0eTogdHJ1ZSwKCiAgICAvLyBFVkVOVFMKICAgIGxvYWRpbmdEYXRh
1924
+ OiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgcmVjb3JkLnRyYW5zaXRpb25U
1925
+ bygnbG9hZGluZycpOwogICAgfSwKCiAgICBsb2FkZWREYXRhOiBmdW5jdGlv
1926
+ bihyZWNvcmQpIHsKICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGVk
1927
+ LmNyZWF0ZWQudW5jb21taXR0ZWQnKTsKCiAgICAgIHJlY29yZC5zdXNwZW5k
1928
+ UmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCkgewogICAgICAgIHJl
1929
+ Y29yZC5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgnZGF0YScpOwogICAgICB9KTsK
1930
+ ICAgIH0sCgogICAgcHVzaGVkRGF0YTogZnVuY3Rpb24ocmVjb3JkKSB7CiAg
1931
+ ICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5zYXZlZCcpOwogICAg
1932
+ fQogIH0sCgogIC8vIEEgcmVjb3JkIGVudGVycyB0aGlzIHN0YXRlIHdoZW4g
1933
+ dGhlIHN0b3JlIGFza2VzCiAgLy8gdGhlIGFkYXB0ZXIgZm9yIGl0cyBkYXRh
1934
+ LiBJdCByZW1haW5zIGluIHRoaXMgc3RhdGUKICAvLyB1bnRpbCB0aGUgYWRh
1935
+ cHRlciBwcm92aWRlcyB0aGUgcmVxdWVzdGVkIGRhdGEuCiAgLy8KICAvLyBV
1936
+ c3VhbGx5LCB0aGlzIHByb2Nlc3MgaXMgYXN5bmNocm9ub3VzLCB1c2luZyBh
1937
+ bgogIC8vIFhIUiB0byByZXRyaWV2ZSB0aGUgZGF0YS4KICBsb2FkaW5nOiB7
1938
+ CiAgICAvLyBGTEFHUwogICAgaXNMb2FkaW5nOiB0cnVlLAoKICAgIC8vIEVW
1939
+ RU5UUwogICAgcHVzaGVkRGF0YTogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAg
1940
+ IHJlY29yZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5zYXZlZCcpOwogICAgICBy
1941
+ ZWNvcmQudHJpZ2dlckxhdGVyKCdkaWRMb2FkJyk7CiAgICAgIHNldChyZWNv
1942
+ cmQsICdpc0Vycm9yJywgZmFsc2UpOwogICAgfSwKCiAgICBiZWNhbWVFcnJv
1943
+ cjogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHJlY29yZC50cmlnZ2VyTGF0
1944
+ ZXIoJ2JlY2FtZUVycm9yJywgcmVjb3JkKTsKICAgIH0KICB9LAoKICAvLyBB
1945
+ IHJlY29yZCBlbnRlcnMgdGhpcyBzdGF0ZSB3aGVuIGl0cyBkYXRhIGlzIHBv
1946
+ cHVsYXRlZC4KICAvLyBNb3N0IG9mIGEgcmVjb3JkJ3MgbGlmZWN5Y2xlIGlz
1947
+ IHNwZW50IGluc2lkZSBzdWJzdGF0ZXMKICAvLyBvZiB0aGUgYGxvYWRlZGAg
1948
+ c3RhdGUuCiAgbG9hZGVkOiB7CiAgICBpbml0aWFsU3RhdGU6ICdzYXZlZCcs
1949
+ CgogICAgLy8gRkxBR1MKICAgIGlzTG9hZGVkOiB0cnVlLAoKICAgIC8vIFNV
1950
+ QlNUQVRFUwoKICAgIC8vIElmIHRoZXJlIGFyZSBubyBsb2NhbCBjaGFuZ2Vz
1951
+ IHRvIGEgcmVjb3JkLCBpdCByZW1haW5zCiAgICAvLyBpbiB0aGUgYHNhdmVk
1952
+ YCBzdGF0ZS4KICAgIHNhdmVkOiB7CiAgICAgIHNldHVwOiBmdW5jdGlvbihy
1953
+ ZWNvcmQpIHsKICAgICAgICB2YXIgYXR0cnMgPSByZWNvcmQuX2F0dHJpYnV0
1954
+ ZXMsCiAgICAgICAgICAgIGlzRGlydHkgPSBmYWxzZTsKCiAgICAgICAgZm9y
1955
+ ICh2YXIgcHJvcCBpbiBhdHRycykgewogICAgICAgICAgaWYgKGF0dHJzLmhh
1956
+ c093blByb3BlcnR5KHByb3ApKSB7CiAgICAgICAgICAgIGlzRGlydHkgPSB0
1957
+ cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9
1958
+ CgogICAgICAgIGlmIChpc0RpcnR5KSB7CiAgICAgICAgICByZWNvcmQuYWRh
1959
+ cHRlckRpZERpcnR5KCk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgLy8g
1960
+ RVZFTlRTCiAgICAgIGRpZFNldFByb3BlcnR5OiBkaWRTZXRQcm9wZXJ0eSwK
1961
+ CiAgICAgIHB1c2hlZERhdGE6IEVtYmVyLkssCgogICAgICBiZWNvbWVEaXJ0
1962
+ eTogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgICAgcmVjb3JkLnRyYW5zaXRp
1963
+ b25UbygndXBkYXRlZC51bmNvbW1pdHRlZCcpOwogICAgICB9LAoKICAgICAg
1964
+ d2lsbENvbW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgICAgcmVjb3Jk
1965
+ LnRyYW5zaXRpb25UbygndXBkYXRlZC5pbkZsaWdodCcpOwogICAgICB9LAoK
1966
+ ICAgICAgcmVsb2FkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQsIHJlc29sdmVy
1967
+ KSB7CiAgICAgICAgZ2V0KHJlY29yZCwgJ3N0b3JlJykucmVsb2FkUmVjb3Jk
1968
+ KHJlY29yZCwgcmVzb2x2ZXIpOwogICAgICB9LAoKICAgICAgZGVsZXRlUmVj
1969
+ b3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgICByZWNvcmQudHJhbnNp
1970
+ dGlvblRvKCdkZWxldGVkLnVuY29tbWl0dGVkJyk7CiAgICAgICAgcmVjb3Jk
1971
+ LmNsZWFyUmVsYXRpb25zaGlwcygpOwogICAgICB9LAoKICAgICAgdW5sb2Fk
1972
+ UmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgICAvLyBjbGVhciBy
1973
+ ZWxhdGlvbnNoaXBzIGJlZm9yZSBtb3ZpbmcgdG8gZGVsZXRlZCBzdGF0ZQog
1974
+ ICAgICAgIC8vIG90aGVyd2lzZSBpdCBmYWlscwogICAgICAgIHJlY29yZC5j
1975
+ bGVhclJlbGF0aW9uc2hpcHMoKTsKICAgICAgICByZWNvcmQudHJhbnNpdGlv
1976
+ blRvKCdkZWxldGVkLnNhdmVkJyk7CiAgICAgIH0sCgogICAgICBkaWRDb21t
1977
+ aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewogICAgICAgIHJlY29yZC5zZW5kKCdp
1978
+ bnZva2VMaWZlY3ljbGVDYWxsYmFja3MnLCBnZXQocmVjb3JkLCAnbGFzdERp
1979
+ cnR5VHlwZScpKTsKICAgICAgfSwKCiAgICB9LAoKICAgIC8vIEEgcmVjb3Jk
1980
+ IGlzIGluIHRoaXMgc3RhdGUgYWZ0ZXIgaXQgaGFzIGJlZW4gbG9jYWxseQog
1981
+ ICAgLy8gY3JlYXRlZCBidXQgYmVmb3JlIHRoZSBhZGFwdGVyIGhhcyBpbmRp
1982
+ Y2F0ZWQgdGhhdAogICAgLy8gaXQgaGFzIGJlZW4gc2F2ZWQuCiAgICBjcmVh
1983
+ dGVkOiBjcmVhdGVkU3RhdGUsCgogICAgLy8gQSByZWNvcmQgaXMgaW4gdGhp
1984
+ cyBzdGF0ZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuCiAgICAvLyBzYXZlZCB0
1985
+ byB0aGUgc2VydmVyLCBidXQgdGhlcmUgYXJlIG5ldyBsb2NhbCBjaGFuZ2Vz
1986
+ CiAgICAvLyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHNhdmVkLgogICAgdXBk
1987
+ YXRlZDogdXBkYXRlZFN0YXRlCiAgfSwKCiAgLy8gQSByZWNvcmQgaXMgaW4g
1988
+ dGhpcyBzdGF0ZSBpZiBpdCB3YXMgZGVsZXRlZCBmcm9tIHRoZSBzdG9yZS4K
1989
+ ICBkZWxldGVkOiB7CiAgICBpbml0aWFsU3RhdGU6ICd1bmNvbW1pdHRlZCcs
1990
+ CiAgICBkaXJ0eVR5cGU6ICdkZWxldGVkJywKCiAgICAvLyBGTEFHUwogICAg
1991
+ aXNEZWxldGVkOiB0cnVlLAogICAgaXNMb2FkZWQ6IHRydWUsCiAgICBpc0Rp
1992
+ cnR5OiB0cnVlLAoKICAgIC8vIFRSQU5TSVRJT05TCiAgICBzZXR1cDogZnVu
1993
+ Y3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBzdG9yZSA9IGdldChyZWNvcmQs
1994
+ ICdzdG9yZScpOwoKICAgICAgc3RvcmUucmVjb3JkQXJyYXlNYW5hZ2VyLnJl
1995
+ bW92ZShyZWNvcmQpOwogICAgfSwKCiAgICAvLyBTVUJTVEFURVMKCiAgICAv
1996
+ LyBXaGVuIGEgcmVjb3JkIGlzIGRlbGV0ZWQsIGl0IGVudGVycyB0aGUgYHN0
1997
+ YXJ0YAogICAgLy8gc3RhdGUuIEl0IHdpbGwgZXhpdCB0aGlzIHN0YXRlIHdo
1998
+ ZW4gdGhlIHJlY29yZAogICAgLy8gc3RhcnRzIHRvIGNvbW1pdC4KICAgIHVu
1999
+ Y29tbWl0dGVkOiB7CgogICAgICAvLyBFVkVOVFMKCiAgICAgIHdpbGxDb21t
2000
+ aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewogICAgICAgIHJlY29yZC50cmFuc2l0
2001
+ aW9uVG8oJ2luRmxpZ2h0Jyk7CiAgICAgIH0sCgogICAgICByb2xsYmFjazog
2002
+ ZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgICAgcmVjb3JkLnJvbGxiYWNrKCk7
2003
+ CiAgICAgIH0sCgogICAgICBiZWNvbWVEaXJ0eTogRW1iZXIuSywKICAgICAg
2004
+ ZGVsZXRlUmVjb3JkOiBFbWJlci5LLAoKICAgICAgYmVjYW1lQ2xlYW46IGZ1
2005
+ bmN0aW9uKHJlY29yZCkgewogICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8o
2006
+ J2xvYWRlZC5zYXZlZCcpOwogICAgICB9CiAgICB9LAoKICAgIC8vIEFmdGVy
2007
+ IGEgcmVjb3JkIHN0YXJ0cyBjb21taXR0aW5nLCBidXQKICAgIC8vIGJlZm9y
2008
+ ZSB0aGUgYWRhcHRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVsZXRpb24KICAg
2009
+ IC8vIGhhcyBzYXZlZCB0byB0aGUgc2VydmVyLCBhIHJlY29yZCBpcyBpbiB0
2010
+ aGUKICAgIC8vIGBpbkZsaWdodGAgc3Vic3RhdGUgb2YgYGRlbGV0ZWRgLgog
2011
+ ICAgaW5GbGlnaHQ6IHsKICAgICAgLy8gRkxBR1MKICAgICAgaXNTYXZpbmc6
2012
+ IHRydWUsCgogICAgICAvLyBFVkVOVFMKCiAgICAgIC8vIFRPRE86IE1vcmUg
2013
+ cm9idXN0IHNlbWFudGljcyBhcm91bmQgc2F2ZS13aGlsZS1pbi1mbGlnaHQK
2014
+ ICAgICAgd2lsbENvbW1pdDogRW1iZXIuSywKICAgICAgZGlkQ29tbWl0OiBm
2015
+ dW5jdGlvbihyZWNvcmQpIHsKICAgICAgICByZWNvcmQudHJhbnNpdGlvblRv
2016
+ KCdzYXZlZCcpOwoKICAgICAgICByZWNvcmQuc2VuZCgnaW52b2tlTGlmZWN5
2017
+ Y2xlQ2FsbGJhY2tzJyk7CiAgICAgIH0KICAgIH0sCgogICAgLy8gT25jZSB0
2018
+ aGUgYWRhcHRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVsZXRpb24gaGFzCiAg
2019
+ ICAvLyBiZWVuIHNhdmVkLCB0aGUgcmVjb3JkIGVudGVycyB0aGUgYHNhdmVk
2020
+ YCBzdWJzdGF0ZQogICAgLy8gb2YgYGRlbGV0ZWRgLgogICAgc2F2ZWQ6IHsK
2021
+ ICAgICAgLy8gRkxBR1MKICAgICAgaXNEaXJ0eTogZmFsc2UsCgogICAgICBz
2022
+ ZXR1cDogZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgICAgdmFyIHN0b3JlID0g
2023
+ Z2V0KHJlY29yZCwgJ3N0b3JlJyk7CiAgICAgICAgc3RvcmUuZGVtYXRlcmlh
2024
+ bGl6ZVJlY29yZChyZWNvcmQpOwogICAgICB9LAoKICAgICAgaW52b2tlTGlm
2025
+ ZWN5Y2xlQ2FsbGJhY2tzOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgICAgICBy
2026
+ ZWNvcmQudHJpZ2dlckxhdGVyKCdkaWREZWxldGUnLCByZWNvcmQpOwogICAg
2027
+ ICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2RpZENvbW1pdCcsIHJlY29yZCk7
2028
+ CiAgICAgIH0KICAgIH0KICB9LAoKICBpbnZva2VMaWZlY3ljbGVDYWxsYmFj
2029
+ a3M6IGZ1bmN0aW9uKHJlY29yZCwgZGlydHlUeXBlKSB7CiAgICBpZiAoZGly
2030
+ dHlUeXBlID09PSAnY3JlYXRlZCcpIHsKICAgICAgcmVjb3JkLnRyaWdnZXJM
2031
+ YXRlcignZGlkQ3JlYXRlJywgcmVjb3JkKTsKICAgIH0gZWxzZSB7CiAgICAg
2032
+ IHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2RpZFVwZGF0ZScsIHJlY29yZCk7CiAg
2033
+ ICB9CgogICAgcmVjb3JkLnRyaWdnZXJMYXRlcignZGlkQ29tbWl0JywgcmVj
2034
+ b3JkKTsKICB9Cn07Cgp2YXIgaGFzT3duUHJvcCA9IHt9Lmhhc093blByb3Bl
2035
+ cnR5OwoKZnVuY3Rpb24gd2lyZVN0YXRlKG9iamVjdCwgcGFyZW50LCBuYW1l
2036
+ KSB7CiAgLypqc2hpbnQgcHJvdG86dHJ1ZSovCiAgLy8gVE9ETzogVXNlIE9i
2037
+ amVjdC5jcmVhdGUgYW5kIGNvcHkgaW5zdGVhZAogIG9iamVjdCA9IG1peGlu
2038
+ KHBhcmVudCA/IEVtYmVyLmNyZWF0ZShwYXJlbnQpIDoge30sIG9iamVjdCk7
2039
+ CiAgb2JqZWN0LnBhcmVudFN0YXRlID0gcGFyZW50OwogIG9iamVjdC5zdGF0
2040
+ ZU5hbWUgPSBuYW1lOwoKICBmb3IgKHZhciBwcm9wIGluIG9iamVjdCkgewog
2041
+ ICAgaWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgcHJvcCA9
2042
+ PT0gJ3BhcmVudFN0YXRlJyB8fCBwcm9wID09PSAnc3RhdGVOYW1lJykgeyBj
2043
+ b250aW51ZTsgfQogICAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdv
2044
+ YmplY3QnKSB7CiAgICAgIG9iamVjdFtwcm9wXSA9IHdpcmVTdGF0ZShvYmpl
2045
+ Y3RbcHJvcF0sIG9iamVjdCwgbmFtZSArICIuIiArIHByb3ApOwogICAgfQog
2046
+ IH0KCiAgcmV0dXJuIG9iamVjdDsKfQoKUm9vdFN0YXRlID0gd2lyZVN0YXRl
2047
+ KFJvb3RTdGF0ZSwgbnVsbCwgInJvb3QiKTsKCkRTLlJvb3RTdGF0ZSA9IFJv
2048
+ b3RTdGF0ZTsKCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVs
2049
+ ZSBlbWJlci1kYXRhCiovCgp2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBF
2050
+ bWJlci5zZXQsIG1hcCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5tYXAsCiAg
2051
+ ICBtZXJnZSA9IEVtYmVyLm1lcmdlLCBvbmNlID0gRW1iZXIucnVuLm9uY2U7
2052
+ Cgp2YXIgYXJyYXlNYXAgPSBFbWJlci5BcnJheVBvbHlmaWxscy5tYXA7Cgp2
2053
+ YXIgcmV0cmlldmVGcm9tQ3VycmVudFN0YXRlID0gRW1iZXIuY29tcHV0ZWQo
2054
+ ZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewogIHJldHVybiBnZXQoZ2V0KHRoaXMs
2055
+ ICdjdXJyZW50U3RhdGUnKSwga2V5KTsKfSkucHJvcGVydHkoJ2N1cnJlbnRT
2056
+ dGF0ZScpLnJlYWRPbmx5KCk7CgovKioKCiAgVGhlIG1vZGVsIGNsYXNzIHRo
2057
+ YXQgYWxsIEVtYmVyIERhdGEgcmVjb3JkcyBkZXNjZW5kIGZyb20uCgogIEBj
2058
+ bGFzcyBNb2RlbAogIEBuYW1lc3BhY2UgRFMKICBAZXh0ZW5kcyBFbWJlci5P
2059
+ YmplY3QKICBAdXNlcyBFbWJlci5FdmVudGVkCiovCkRTLk1vZGVsID0gRW1i
2060
+ ZXIuT2JqZWN0LmV4dGVuZChFbWJlci5FdmVudGVkLCB7CiAgaXNFbXB0eTog
2061
+ cmV0cmlldmVGcm9tQ3VycmVudFN0YXRlLAogIGlzTG9hZGluZzogcmV0cmll
2062
+ dmVGcm9tQ3VycmVudFN0YXRlLAogIGlzTG9hZGVkOiByZXRyaWV2ZUZyb21D
2063
+ dXJyZW50U3RhdGUsCiAgaXNEaXJ0eTogcmV0cmlldmVGcm9tQ3VycmVudFN0
2064
+ YXRlLAogIGlzU2F2aW5nOiByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUsCiAg
2065
+ aXNEZWxldGVkOiByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUsCiAgaXNOZXc6
2066
+ IHJldHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSwKICBpc1ZhbGlkOiByZXRyaWV2
2067
+ ZUZyb21DdXJyZW50U3RhdGUsCiAgZGlydHlUeXBlOiByZXRyaWV2ZUZyb21D
2068
+ dXJyZW50U3RhdGUsCgogIGlzRXJyb3I6IGZhbHNlLAogIGlzUmVsb2FkaW5n
2069
+ OiBmYWxzZSwKCiAgY2xpZW50SWQ6IG51bGwsCiAgaWQ6IG51bGwsCiAgdHJh
2070
+ bnNhY3Rpb246IG51bGwsCiAgY3VycmVudFN0YXRlOiBudWxsLAogIGVycm9y
2071
+ czogbnVsbCwKCiAgLyoqCiAgICBDcmVhdGUgYSBKU09OIHJlcHJlc2VudGF0
2072
+ aW9uIG9mIHRoZSByZWNvcmQsIHVzaW5nIHRoZSBzZXJpYWxpemF0aW9uCiAg
2073
+ ICBzdHJhdGVneSBvZiB0aGUgc3RvcmUncyBhZGFwdGVyLgoKICAgIEBtZXRo
2074
+ b2Qgc2VyaWFsaXplCiAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBdmFp
2075
+ bGFibGUgb3B0aW9uczoKCiAgICAqIGBpbmNsdWRlSWRgOiBgdHJ1ZWAgaWYg
2076
+ dGhlIHJlY29yZCdzIElEIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUKICAg
2077
+ ICAgSlNPTiByZXByZXNlbnRhdGlvbi4KCiAgICBAcmV0dXJucyB7T2JqZWN0
2078
+ fSBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBwcmltaXRpdmUgSlNPTiB2
2079
+ YWx1ZXMgb25seQogICovCiAgc2VyaWFsaXplOiBmdW5jdGlvbihvcHRpb25z
2080
+ KSB7CiAgICB2YXIgc3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyk7CiAgICBy
2081
+ ZXR1cm4gc3RvcmUuc2VyaWFsaXplKHRoaXMsIG9wdGlvbnMpOwogIH0sCgog
2082
+ IC8qKgogICAgVXNlIHt7I2Nyb3NzTGluayAiRFMuSlNPTlNlcmlhbGl6ZXIi
2083
+ fX1EUy5KU09OU2VyaWFsaXplcnt7L2Nyb3NzTGlua319IHRvCiAgICBnZXQg
2084
+ dGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSByZWNvcmQuCgogICAgQG1l
2085
+ dGhvZCB0b0pTT04KICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEF2YWls
2086
+ YWJsZSBvcHRpb25zOgoKICAgICogYGluY2x1ZGVJZGA6IGB0cnVlYCBpZiB0
2087
+ aGUgcmVjb3JkJ3MgSUQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQogICAg
2088
+ ICBKU09OIHJlcHJlc2VudGF0aW9uLgoKICAgIEByZXR1cm5zIHtPYmplY3R9
2089
+ IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LgogICovCiAg
2090
+ dG9KU09OOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIgc2VyaWFsaXpl
2091
+ ciA9IERTLkpTT05TZXJpYWxpemVyLmNyZWF0ZSgpOwogICAgcmV0dXJuIHNl
2092
+ cmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMsIG9wdGlvbnMpOwogIH0sCgogIC8q
2093
+ KgogICAgRmlyZWQgd2hlbiB0aGUgcmVjb3JkIGlzIGxvYWRlZCBmcm9tIHRo
2094
+ ZSBzZXJ2ZXIuCgogICAgQGV2ZW50IGRpZExvYWQKICAqLwogIGRpZExvYWQ6
2095
+ IEVtYmVyLkssCgogIC8qKgogICAgRmlyZWQgd2hlbiB0aGUgcmVjb3JkIGlz
2096
+ IHJlbG9hZGVkIGZyb20gdGhlIHNlcnZlci4KCiAgICBAZXZlbnQgZGlkUmVs
2097
+ b2FkCiAgKi8KICBkaWRSZWxvYWQ6IEVtYmVyLkssCgogIC8qKgogICAgRmly
2098
+ ZWQgd2hlbiB0aGUgcmVjb3JkIGlzIHVwZGF0ZWQuCgogICAgQGV2ZW50IGRp
2099
+ ZFVwZGF0ZQogICovCiAgZGlkVXBkYXRlOiBFbWJlci5LLAoKICAvKioKICAg
2100
+ IEZpcmVkIHdoZW4gdGhlIHJlY29yZCBpcyBjcmVhdGVkLgoKICAgIEBldmVu
2101
+ dCBkaWRDcmVhdGUKICAqLwogIGRpZENyZWF0ZTogRW1iZXIuSywKCiAgLyoq
2102
+ CiAgICBGaXJlZCB3aGVuIHRoZSByZWNvcmQgaXMgZGVsZXRlZC4KCiAgICBA
2103
+ ZXZlbnQgZGlkRGVsZXRlCiAgKi8KICBkaWREZWxldGU6IEVtYmVyLkssCgog
2104
+ IC8qKgogICAgRmlyZWQgd2hlbiB0aGUgcmVjb3JkIGJlY29tZXMgaW52YWxp
2105
+ ZC4KCiAgICBAZXZlbnQgYmVjYW1lSW52YWxpZAogICovCiAgYmVjYW1lSW52
2106
+ YWxpZDogRW1iZXIuSywKCiAgLyoqCiAgICBGaXJlZCB3aGVuIHRoZSByZWNv
2107
+ cmQgZW50ZXJzIHRoZSBlcnJvciBzdGF0ZS4KCiAgICBAZXZlbnQgYmVjYW1l
2108
+ RXJyb3IKICAqLwogIGJlY2FtZUVycm9yOiBFbWJlci5LLAoKICBkYXRhOiBF
2109
+ bWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsKICAgIHRoaXMuX2RhdGEgPSB0
2110
+ aGlzLl9kYXRhIHx8IHt9OwogICAgcmV0dXJuIHRoaXMuX2RhdGE7CiAgfSku
2111
+ cHJvcGVydHkoKSwKCiAgX2RhdGE6IG51bGwsCgogIGluaXQ6IGZ1bmN0aW9u
2112
+ KCkgewogICAgc2V0KHRoaXMsICdjdXJyZW50U3RhdGUnLCBEUy5Sb290U3Rh
2113
+ dGUuZW1wdHkpOwogICAgdGhpcy5fc3VwZXIoKTsKICAgIHRoaXMuX3NldHVw
2114
+ KCk7CiAgfSwKCiAgX3NldHVwOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuX2No
2115
+ YW5nZXNUb1N5bmMgPSB7fTsKICAgIHRoaXMuX2RlZmVycmVkVHJpZ2dlcnMg
2116
+ PSBbXTsKICAgIHRoaXMuX2RhdGEgPSB7fTsKICAgIHRoaXMuX2F0dHJpYnV0
2117
+ ZXMgPSB7fTsKICAgIHRoaXMuX2luRmxpZ2h0QXR0cmlidXRlcyA9IHt9Owog
2118
+ ICAgdGhpcy5fcmVsYXRpb25zaGlwcyA9IHt9OwogIH0sCgogIHNlbmQ6IGZ1
2119
+ bmN0aW9uKG5hbWUsIGNvbnRleHQpIHsKICAgIHZhciBjdXJyZW50U3RhdGUg
2120
+ PSBnZXQodGhpcywgJ2N1cnJlbnRTdGF0ZScpOwoKICAgIGlmICghY3VycmVu
2121
+ dFN0YXRlW25hbWVdKSB7CiAgICAgIHRoaXMuX3VuaGFuZGxlZEV2ZW50KGN1
2122
+ cnJlbnRTdGF0ZSwgbmFtZSwgY29udGV4dCk7CiAgICB9CgogICAgcmV0dXJu
2123
+ IGN1cnJlbnRTdGF0ZVtuYW1lXSh0aGlzLCBjb250ZXh0KTsKICB9LAoKICB0
2124
+ cmFuc2l0aW9uVG86IGZ1bmN0aW9uKG5hbWUpIHsKICAgIC8vIFBPU1NJQkxF
2125
+ IFRPRE86IFJlbW92ZSB0aGlzIGNvZGUgYW5kIHJlcGxhY2Ugd2l0aAogICAg
2126
+ Ly8gYWx3YXlzIGhhdmluZyBkaXJlY3QgcmVmZXJlbmNlcyB0byBzdGF0ZSBv
2127
+ YmplY3RzCgogICAgdmFyIHBpdm90TmFtZSA9IG5hbWUuc3BsaXQoIi4iLCAx
2128
+ KSwKICAgICAgICBjdXJyZW50U3RhdGUgPSBnZXQodGhpcywgJ2N1cnJlbnRT
2129
+ dGF0ZScpLAogICAgICAgIHN0YXRlID0gY3VycmVudFN0YXRlOwoKICAgIGRv
2130
+ IHsKICAgICAgaWYgKHN0YXRlLmV4aXQpIHsgc3RhdGUuZXhpdCh0aGlzKTsg
2131
+ fQogICAgICBzdGF0ZSA9IHN0YXRlLnBhcmVudFN0YXRlOwogICAgfSB3aGls
2132
+ ZSAoIXN0YXRlLmhhc093blByb3BlcnR5KHBpdm90TmFtZSkpOwoKICAgIHZh
2133
+ ciBwYXRoID0gbmFtZS5zcGxpdCgiLiIpOwoKICAgIHZhciBzZXR1cHMgPSBb
2134
+ XSwgZW50ZXJzID0gW10sIGksIGw7CgogICAgZm9yIChpPTAsIGw9cGF0aC5s
2135
+ ZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgIHN0YXRlID0gc3RhdGVbcGF0aFtp
2136
+ XV07CgogICAgICBpZiAoc3RhdGUuZW50ZXIpIHsgZW50ZXJzLnB1c2goc3Rh
2137
+ dGUpOyB9CiAgICAgIGlmIChzdGF0ZS5zZXR1cCkgeyBzZXR1cHMucHVzaChz
2138
+ dGF0ZSk7IH0KICAgIH0KCiAgICBmb3IgKGk9MCwgbD1lbnRlcnMubGVuZ3Ro
2139
+ OyBpPGw7IGkrKykgewogICAgICBlbnRlcnNbaV0uZW50ZXIodGhpcyk7CiAg
2140
+ ICB9CgogICAgc2V0KHRoaXMsICdjdXJyZW50U3RhdGUnLCBzdGF0ZSk7Cgog
2141
+ ICAgZm9yIChpPTAsIGw9c2V0dXBzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAg
2142
+ ICAgc2V0dXBzW2ldLnNldHVwKHRoaXMpOwogICAgfQogIH0sCgogIF91bmhh
2143
+ bmRsZWRFdmVudDogZnVuY3Rpb24oc3RhdGUsIG5hbWUsIGNvbnRleHQpIHsK
2144
+ ICAgIHZhciBlcnJvck1lc3NhZ2UgPSAiQXR0ZW1wdGVkIHRvIGhhbmRsZSBl
2145
+ dmVudCBgIiArIG5hbWUgKyAiYCAiOwogICAgZXJyb3JNZXNzYWdlICAgICs9
2146
+ ICJvbiAiICsgU3RyaW5nKHRoaXMpICsgIiB3aGlsZSBpbiBzdGF0ZSAiOwog
2147
+ ICAgZXJyb3JNZXNzYWdlICAgICs9IHN0YXRlLnN0YXRlTmFtZSArICIuICI7
2148
+ CgogICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkgewogICAgICBlcnJv
2149
+ ck1lc3NhZ2UgICs9ICJDYWxsZWQgd2l0aCAiICsgRW1iZXIuaW5zcGVjdChj
2150
+ b250ZXh0KSArICIuIjsKICAgIH0KCiAgICB0aHJvdyBuZXcgRW1iZXIuRXJy
2151
+ b3IoZXJyb3JNZXNzYWdlKTsKICB9LAoKICB3aXRoVHJhbnNhY3Rpb246IGZ1
2152
+ bmN0aW9uKGZuKSB7CiAgICB2YXIgdHJhbnNhY3Rpb24gPSBnZXQodGhpcywg
2153
+ J3RyYW5zYWN0aW9uJyk7CiAgICBpZiAodHJhbnNhY3Rpb24pIHsgZm4odHJh
2154
+ bnNhY3Rpb24pOyB9CiAgfSwKCiAgbG9hZGluZ0RhdGE6IGZ1bmN0aW9uKCkg
2155
+ ewogICAgdGhpcy5zZW5kKCdsb2FkaW5nRGF0YScpOwogIH0sCgogIGxvYWRl
2156
+ ZERhdGE6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5zZW5kKCdsb2FkZWREYXRh
2157
+ Jyk7CiAgfSwKCiAgcHVzaGVkRGF0YTogZnVuY3Rpb24oKSB7CiAgICB0aGlz
2158
+ LnNlbmQoJ3B1c2hlZERhdGEnKTsKICB9LAoKICBkZWxldGVSZWNvcmQ6IGZ1
2159
+ bmN0aW9uKCkgewogICAgdGhpcy5zZW5kKCdkZWxldGVSZWNvcmQnKTsKICB9
2160
+ LAoKICB1bmxvYWRSZWNvcmQ6IGZ1bmN0aW9uKCkgewogICAgRW1iZXIuYXNz
2161
+ ZXJ0KCJZb3UgY2FuIG9ubHkgdW5sb2FkIGEgbG9hZGVkLCBub24tZGlydHkg
2162
+ cmVjb3JkLiIsICFnZXQodGhpcywgJ2lzRGlydHknKSk7CgogICAgdGhpcy5z
2163
+ ZW5kKCd1bmxvYWRSZWNvcmQnKTsKICB9LAoKICBjbGVhclJlbGF0aW9uc2hp
2164
+ cHM6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lYWNoUmVsYXRpb25zaGlwKGZ1
2165
+ bmN0aW9uKG5hbWUsIHJlbGF0aW9uc2hpcCkgewogICAgICBpZiAocmVsYXRp
2166
+ b25zaGlwLmtpbmQgPT09ICdiZWxvbmdzVG8nKSB7CiAgICAgICAgc2V0KHRo
2167
+ aXMsIG5hbWUsIG51bGwpOwogICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hp
2168
+ cC5raW5kID09PSAnaGFzTWFueScpIHsKICAgICAgICB2YXIgaGFzTWFueSA9
2169
+ IHRoaXMuX3JlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwLm5hbWVdOwogICAg
2170
+ ICAgIGlmIChoYXNNYW55KSB7IGhhc01hbnkuY2xlYXIoKTsgfQogICAgICB9
2171
+ CiAgICB9LCB0aGlzKTsKICB9LAoKICB1cGRhdGVSZWNvcmRBcnJheXM6IGZ1
2172
+ bmN0aW9uKCkgewogICAgdmFyIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScp
2173
+ OwogICAgaWYgKHN0b3JlKSB7CiAgICAgIHN0b3JlLmRhdGFXYXNVcGRhdGVk
2174
+ KHRoaXMuY29uc3RydWN0b3IsIHRoaXMpOwogICAgfQogIH0sCgogIGFkYXB0
2175
+ ZXJXaWxsQ29tbWl0OiBmdW5jdGlvbigpIHsKICAgIHRoaXMuc2VuZCgnd2ls
2176
+ bENvbW1pdCcpOwogIH0sCgogIC8qKgogICAgSWYgdGhlIGFkYXB0ZXIgZGlk
2177
+ IG5vdCByZXR1cm4gYSBoYXNoIGluIHJlc3BvbnNlIHRvIGEgY29tbWl0LAog
2178
+ ICAgbWVyZ2UgdGhlIGNoYW5nZWQgYXR0cmlidXRlcyBhbmQgcmVsYXRpb25z
2179
+ aGlwcyBpbnRvIHRoZSBleGlzdGluZwogICAgc2F2ZWQgZGF0YS4KCiAgICBA
2180
+ bWV0aG9kIGFkYXB0ZXJEaWRDb21taXQKICAqLwogIGFkYXB0ZXJEaWRDb21t
2181
+ aXQ6IGZ1bmN0aW9uKGRhdGEpIHsKICAgIHNldCh0aGlzLCAnaXNFcnJvcics
2182
+ IGZhbHNlKTsKCiAgICBpZiAoZGF0YSkgewogICAgICB0aGlzLl9kYXRhID0g
2183
+ ZGF0YTsKICAgIH0gZWxzZSB7CiAgICAgIEVtYmVyLm1peGluKHRoaXMuX2Rh
2184
+ dGEsIHRoaXMuX2luRmxpZ2h0QXR0cmlidXRlcyk7CiAgICB9CgogICAgdGhp
2185
+ cy5faW5GbGlnaHRBdHRyaWJ1dGVzID0ge307CgogICAgdGhpcy5zZW5kKCdk
2186
+ aWRDb21taXQnKTsKICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXlzTGF0ZXIo
2187
+ KTsKCiAgICBpZiAoIWRhdGEpIHsgcmV0dXJuOyB9CgogICAgdGhpcy5zdXNw
2188
+ ZW5kUmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCkgewogICAgICB0
2189
+ aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKCdkYXRhJyk7CiAgICB9KTsKICB9
2190
+ LAoKICBhZGFwdGVyRGlkRGlydHk6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5z
2191
+ ZW5kKCdiZWNvbWVEaXJ0eScpOwogICAgdGhpcy51cGRhdGVSZWNvcmRBcnJh
2192
+ eXNMYXRlcigpOwogIH0sCgogIGRhdGFEaWRDaGFuZ2U6IEVtYmVyLm9ic2Vy
2193
+ dmVyKGZ1bmN0aW9uKCkgewogICAgdGhpcy5yZWxvYWRIYXNNYW55cygpOwog
2194
+ IH0sICdkYXRhJyksCgogIHJlbG9hZEhhc01hbnlzOiBmdW5jdGlvbigpIHsK
2195
+ ICAgIHZhciByZWxhdGlvbnNoaXBzID0gZ2V0KHRoaXMuY29uc3RydWN0b3Is
2196
+ ICdyZWxhdGlvbnNoaXBzQnlOYW1lJyk7CiAgICB0aGlzLnVwZGF0ZVJlY29y
2197
+ ZEFycmF5c0xhdGVyKCk7CiAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goZnVu
2198
+ Y3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7CiAgICAgIGlmIChyZWxhdGlv
2199
+ bnNoaXAua2luZCA9PT0gJ2hhc01hbnknKSB7CiAgICAgICAgdGhpcy5oYXNN
2200
+ YW55RGlkQ2hhbmdlKHJlbGF0aW9uc2hpcC5rZXkpOwogICAgICB9CiAgICB9
2201
+ LCB0aGlzKTsKICB9LAoKICBoYXNNYW55RGlkQ2hhbmdlOiBmdW5jdGlvbihr
2202
+ ZXkpIHsKICAgIHZhciBoYXNNYW55ID0gdGhpcy5fcmVsYXRpb25zaGlwc1tr
2203
+ ZXldOwoKICAgIGlmIChoYXNNYW55KSB7CiAgICAgIHZhciB0eXBlID0gZ2V0
2204
+ KHRoaXMuY29uc3RydWN0b3IsICdyZWxhdGlvbnNoaXBzQnlOYW1lJykuZ2V0
2205
+ KGtleSkudHlwZTsKICAgICAgdmFyIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9y
2206
+ ZScpOwogICAgICB2YXIgcmVjb3JkcyA9IHRoaXMuX2RhdGFba2V5XSB8fCBb
2207
+ XTsKCiAgICAgIHNldChoYXNNYW55LCAnY29udGVudCcsIEVtYmVyLkEocmVj
2208
+ b3JkcykpOwogICAgICBzZXQoaGFzTWFueSwgJ2lzTG9hZGVkJywgdHJ1ZSk7
2209
+ CiAgICAgIGhhc01hbnkudHJpZ2dlcignZGlkTG9hZCcpOwogICAgfQogIH0s
2210
+ CgogIHVwZGF0ZVJlY29yZEFycmF5c0xhdGVyOiBmdW5jdGlvbigpIHsKICAg
2211
+ IEVtYmVyLnJ1bi5vbmNlKHRoaXMsIHRoaXMudXBkYXRlUmVjb3JkQXJyYXlz
2212
+ KTsKICB9LAoKICBzZXR1cERhdGE6IGZ1bmN0aW9uKGRhdGEpIHsKICAgIHRo
2213
+ aXMuX2RhdGEgPSBkYXRhOwoKICAgIGlmIChkYXRhKSB7IHRoaXMucHVzaGVk
2214
+ RGF0YSgpOyB9CgogICAgdGhpcy5zdXNwZW5kUmVsYXRpb25zaGlwT2JzZXJ2
2215
+ ZXJzKGZ1bmN0aW9uKCkgewogICAgICB0aGlzLm5vdGlmeVByb3BlcnR5Q2hh
2216
+ bmdlKCdkYXRhJyk7CiAgICB9KTsKICB9LAoKICBtYXRlcmlhbGl6ZUlkOiBm
2217
+ dW5jdGlvbihpZCkgewogICAgc2V0KHRoaXMsICdpZCcsIGlkKTsKICB9LAoK
2218
+ ICBtYXRlcmlhbGl6ZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMp
2219
+ IHsKICAgIEVtYmVyLmFzc2VydCgiTXVzdCBwYXNzIGEgaGFzaCBvZiBhdHRy
2220
+ aWJ1dGVzIHRvIG1hdGVyaWFsaXplQXR0cmlidXRlcyIsICEhYXR0cmlidXRl
2221
+ cyk7CiAgICBtZXJnZSh0aGlzLl9kYXRhLCBhdHRyaWJ1dGVzKTsKICB9LAoK
2222
+ ICBtYXRlcmlhbGl6ZUF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUp
2223
+ IHsKICAgIHRoaXMuX2RhdGFbbmFtZV0gPSB2YWx1ZTsKICB9LAoKICB1cGRh
2224
+ dGVIYXNNYW55OiBmdW5jdGlvbihuYW1lLCByZWNvcmRzKSB7CiAgICB0aGlz
2225
+ Ll9kYXRhW25hbWVdID0gcmVjb3JkczsKICAgIHRoaXMuaGFzTWFueURpZENo
2226
+ YW5nZShuYW1lKTsKICB9LAoKICByb2xsYmFjazogZnVuY3Rpb24oKSB7CiAg
2227
+ ICB0aGlzLl9zZXR1cCgpOwogICAgdGhpcy5zZW5kKCdiZWNhbWVDbGVhbicp
2228
+ OwoKICAgIHRoaXMuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5j
2229
+ dGlvbigpIHsKICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgnZGF0
2230
+ YScpOwogICAgfSk7CiAgfSwKCiAgdG9TdHJpbmdFeHRlbnNpb246IGZ1bmN0
2231
+ aW9uKCkgewogICAgcmV0dXJuIGdldCh0aGlzLCAnaWQnKTsKICB9LAoKICAv
2232
+ KioKICAgIFRoZSBnb2FsIG9mIHRoaXMgbWV0aG9kIGlzIHRvIHRlbXBvcmFy
2233
+ aWx5IGRpc2FibGUgc3BlY2lmaWMgb2JzZXJ2ZXJzCiAgICB0aGF0IHRha2Ug
2234
+ YWN0aW9uIGluIHJlc3BvbnNlIHRvIGFwcGxpY2F0aW9uIGNoYW5nZXMuCgog
2235
+ ICAgVGhpcyBhbGxvd3MgdGhlIHN5c3RlbSB0byBtYWtlIGNoYW5nZXMgKHN1
2236
+ Y2ggYXMgbWF0ZXJpYWxpemF0aW9uIGFuZAogICAgcm9sbGJhY2spIHRoYXQg
2237
+ c2hvdWxkIG5vdCB0cmlnZ2VyIHNlY29uZGFyeSBiZWhhdmlvciAoc3VjaCBh
2238
+ cyBzZXR0aW5nIGFuCiAgICBpbnZlcnNlIHJlbGF0aW9uc2hpcCBvciBtYXJr
2239
+ aW5nIHJlY29yZHMgYXMgZGlydHkpLgoKICAgIFRoZSBzcGVjaWZpYyBpbXBs
2240
+ ZW1lbnRhdGlvbiB3aWxsIGxpa2VseSBjaGFuZ2UgYXMgRW1iZXIgcHJvcGVy
2241
+ IHByb3ZpZGVzCiAgICBiZXR0ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIHN1c3Bl
2242
+ bmRpbmcgZ3JvdXBzIG9mIG9ic2VydmVycywgYW5kIGlmIEFycmF5CiAgICBv
2243
+ YnNlcnZhdGlvbiBiZWNvbWVzIG1vcmUgdW5pZmllZCB3aXRoIHJlZ3VsYXIg
2244
+ b2JzZXJ2ZXJzLgoKICAgIEBtZXRob2Qgc3VzcGVuZFJlbGF0aW9uc2hpcE9i
2245
+ c2VydmVycwogICAgQHByaXZhdGUKICAgIEBwYXJhbSBjYWxsYmFjawogICAg
2246
+ QHBhcmFtIGJpbmRpbmcKICAqLwogIHN1c3BlbmRSZWxhdGlvbnNoaXBPYnNl
2247
+ cnZlcnM6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7CiAgICB2YXIg
2248
+ b2JzZXJ2ZXJzID0gZ2V0KHRoaXMuY29uc3RydWN0b3IsICdyZWxhdGlvbnNo
2249
+ aXBOYW1lcycpLmJlbG9uZ3NUbzsKICAgIHZhciBzZWxmID0gdGhpczsKCiAg
2250
+ ICB0cnkgewogICAgICB0aGlzLl9zdXNwZW5kZWRSZWxhdGlvbnNoaXBzID0g
2251
+ dHJ1ZTsKICAgICAgRW1iZXIuX3N1c3BlbmRPYnNlcnZlcnMoc2VsZiwgb2Jz
2252
+ ZXJ2ZXJzLCBudWxsLCAnYmVsb25nc1RvRGlkQ2hhbmdlJywgZnVuY3Rpb24o
2253
+ KSB7CiAgICAgICAgRW1iZXIuX3N1c3BlbmRCZWZvcmVPYnNlcnZlcnMoc2Vs
2254
+ Ziwgb2JzZXJ2ZXJzLCBudWxsLCAnYmVsb25nc1RvV2lsbENoYW5nZScsIGZ1
2255
+ bmN0aW9uKCkgewogICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nIHx8
2256
+ IHNlbGYpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0gZmluYWxseSB7
2257
+ CiAgICAgIHRoaXMuX3N1c3BlbmRlZFJlbGF0aW9uc2hpcHMgPSBmYWxzZTsK
2258
+ ICAgIH0KICB9LAoKICAvKioKICAgIFNhdmUgdGhlIHJlY29yZC4KCiAgICBA
2259
+ bWV0aG9kIHNhdmUKICAqLwogIHNhdmU6IGZ1bmN0aW9uKCkgewogICAgdmFy
2260
+ IHJlc29sdmVyID0gRW1iZXIuUlNWUC5kZWZlcigpLCByZWNvcmQgPSB0aGlz
2261
+ OwoKICAgIHRoaXMuZ2V0KCdzdG9yZScpLnNjaGVkdWxlU2F2ZSh0aGlzLCBy
2262
+ ZXNvbHZlcik7CiAgICB0aGlzLl9pbkZsaWdodEF0dHJpYnV0ZXMgPSB0aGlz
2263
+ Ll9hdHRyaWJ1dGVzOwogICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9OwoKICAg
2264
+ IHJldHVybiBEUy5Qcm9taXNlT2JqZWN0LmNyZWF0ZSh7IHByb21pc2U6IHJl
2265
+ c29sdmVyLnByb21pc2UgfSk7CiAgfSwKCiAgLyoqCiAgICBSZWxvYWQgdGhl
2266
+ IHJlY29yZCBmcm9tIHRoZSBhZGFwdGVyLgoKICAgIFRoaXMgd2lsbCBvbmx5
2267
+ IHdvcmsgaWYgdGhlIHJlY29yZCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBsb2Fk
2268
+ aW5nCiAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBtb2RpZmllZCAoYGlzTG9h
2269
+ ZGVkYCBidXQgbm90IGBpc0RpcnR5YCwKICAgIG9yIGBpc1NhdmluZ2ApLgoK
2270
+ ICAgIEBtZXRob2QgcmVsb2FkCiAgKi8KICByZWxvYWQ6IGZ1bmN0aW9uKCkg
2271
+ ewogICAgc2V0KHRoaXMsICdpc1JlbG9hZGluZycsIHRydWUpOwoKICAgIHZh
2272
+ ciByZXNvbHZlciA9IEVtYmVyLlJTVlAuZGVmZXIoKSwgcmVjb3JkID0gdGhp
2273
+ czsKCiAgICByZXNvbHZlci5wcm9taXNlID0gcmVzb2x2ZXIucHJvbWlzZS50
2274
+ aGVuKGZ1bmN0aW9uKCkgewogICAgICByZWNvcmQuc2V0KCdpc1JlbG9hZGlu
2275
+ ZycsIGZhbHNlKTsKICAgICAgcmVjb3JkLnNldCgnaXNFcnJvcicsIGZhbHNl
2276
+ KTsKICAgICAgcmV0dXJuIHJlY29yZDsKICAgIH0sIGZ1bmN0aW9uKHJlYXNv
2277
+ bikgewogICAgICByZWNvcmQuc2V0KCdpc0Vycm9yJywgdHJ1ZSk7CiAgICAg
2278
+ IHRocm93IHJlYXNvbjsKICAgIH0pOwoKICAgIHRoaXMuc2VuZCgncmVsb2Fk
2279
+ UmVjb3JkJywgcmVzb2x2ZXIpOwoKICAgIHJldHVybiBEUy5Qcm9taXNlT2Jq
2280
+ ZWN0LmNyZWF0ZSh7IHByb21pc2U6IHJlc29sdmVyLnByb21pc2UgfSk7CiAg
2281
+ fSwKCiAgLy8gRk9SIFVTRSBEVVJJTkcgQ09NTUlUIFBST0NFU1MKCiAgYWRh
2282
+ cHRlckRpZFVwZGF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cmlidXRlTmFt
2283
+ ZSwgdmFsdWUpIHsKCiAgICAvLyBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwg
2284
+ dXBkYXRlIHRoZSBpbnRlcm5hbCBhdHRyaWJ1dGVzIGFuZCBjbGVhcgogICAg
2285
+ Ly8gdGhlIGF0dHJpYnV0ZSBjYWNoZSBzbyBpdCBwaWNrcyB1cCB0aGUgbmV3
2286
+ IHZhbHVlLiBPdGhlcndpc2UsCiAgICAvLyBjb2xsYXBzZSB0aGUgY3VycmVu
2287
+ dCB2YWx1ZSBpbnRvIHRoZSBpbnRlcm5hbCBhdHRyaWJ1dGVzIGJlY2F1c2UK
2288
+ ICAgIC8vIHRoZSBhZGFwdGVyIGhhcyBhY2tub3dsZWRnZWQgaXQuCiAgICBp
2289
+ ZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICB0aGlzLl9kYXRhW2F0
2290
+ dHJpYnV0ZU5hbWVdID0gdmFsdWU7CiAgICAgIHRoaXMubm90aWZ5UHJvcGVy
2291
+ dHlDaGFuZ2UoYXR0cmlidXRlTmFtZSk7CiAgICB9IGVsc2UgewogICAgICB0
2292
+ aGlzLl9kYXRhW2F0dHJpYnV0ZU5hbWVdID0gdGhpcy5faW5GbGlnaHRBdHRy
2293
+ aWJ1dGVzW2F0dHJpYnV0ZU5hbWVdOwogICAgfQoKICAgIHRoaXMudXBkYXRl
2294
+ UmVjb3JkQXJyYXlzTGF0ZXIoKTsKICB9LAoKICBhZGFwdGVyRGlkSW52YWxp
2295
+ ZGF0ZTogZnVuY3Rpb24oZXJyb3JzKSB7CiAgICB0aGlzLnNlbmQoJ2JlY2Ft
2296
+ ZUludmFsaWQnLCBlcnJvcnMpOwogIH0sCgogIGFkYXB0ZXJEaWRFcnJvcjog
2297
+ ZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNlbmQoJ2JlY2FtZUVycm9yJyk7CiAg
2298
+ ICBzZXQodGhpcywgJ2lzRXJyb3InLCB0cnVlKTsKICB9LAoKICAvKioKICAg
2299
+ IE92ZXJyaWRlIHRoZSBkZWZhdWx0IGV2ZW50IGZpcmluZyBmcm9tIEVtYmVy
2300
+ LkV2ZW50ZWQgdG8KICAgIGFsc28gY2FsbCBtZXRob2RzIHdpdGggdGhlIGdp
2301
+ dmVuIG5hbWUuCgogICAgQG1ldGhvZCB0cmlnZ2VyCiAgICBAcHJpdmF0ZQog
2302
+ ICAgQHBhcmFtIG5hbWUKICAqLwogIHRyaWdnZXI6IGZ1bmN0aW9uKG5hbWUp
2303
+ IHsKICAgIEVtYmVyLnRyeUludm9rZSh0aGlzLCBuYW1lLCBbXS5zbGljZS5j
2304
+ YWxsKGFyZ3VtZW50cywgMSkpOwogICAgdGhpcy5fc3VwZXIuYXBwbHkodGhp
2305
+ cywgYXJndW1lbnRzKTsKICB9LAoKICB0cmlnZ2VyTGF0ZXI6IGZ1bmN0aW9u
2306
+ KCkgewogICAgdGhpcy5fZGVmZXJyZWRUcmlnZ2Vycy5wdXNoKGFyZ3VtZW50
2307
+ cyk7CiAgICBvbmNlKHRoaXMsICdfdHJpZ2dlckRlZmVycmVkVHJpZ2dlcnMn
2308
+ KTsKICB9LAoKICBfdHJpZ2dlckRlZmVycmVkVHJpZ2dlcnM6IGZ1bmN0aW9u
2309
+ KCkgewogICAgZm9yICh2YXIgaT0wLCBsPXRoaXMuX2RlZmVycmVkVHJpZ2dl
2310
+ cnMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICB0aGlzLnRyaWdnZXIuYXBw
2311
+ bHkodGhpcywgdGhpcy5fZGVmZXJyZWRUcmlnZ2Vyc1tpXSk7CiAgICB9Cgog
2312
+ ICAgdGhpcy5fZGVmZXJyZWRUcmlnZ2VycyA9IFtdOwogIH0KfSk7CgpEUy5N
2313
+ b2RlbC5yZW9wZW5DbGFzcyh7CgogIC8qKgogICAgQWxpYXMgRFMuTW9kZWwn
2314
+ cyBgY3JlYXRlYCBtZXRob2QgdG8gYF9jcmVhdGVgLiBUaGlzIGFsbG93cyB1
2315
+ cyB0byBjcmVhdGUgRFMuTW9kZWwKICAgIGluc3RhbmNlcyBmcm9tIHdpdGhp
2316
+ biB0aGUgc3RvcmUsIGJ1dCBpZiBlbmQgdXNlcnMgYWNjaWRlbnRhbGx5IGNh
2317
+ bGwgYGNyZWF0ZSgpYAogICAgKGluc3RlYWQgb2YgYGNyZWF0ZVJlY29yZCgp
2318
+ YCksIHdlIGNhbiByYWlzZSBhbiBlcnJvci4KCiAgICBAbWV0aG9kIF9jcmVh
2319
+ dGUKICAgIEBwcml2YXRlCiAgICBAc3RhdGljCiAgKi8KICBfY3JlYXRlOiBE
2320
+ Uy5Nb2RlbC5jcmVhdGUsCgogIC8qKgogICAgT3ZlcnJpZGUgdGhlIGNsYXNz
2321
+ JyBgY3JlYXRlKClgIG1ldGhvZCB0byByYWlzZSBhbiBlcnJvci4gVGhpcyBw
2322
+ cmV2ZW50cyBlbmQgdXNlcnMKICAgIGZyb20gaW5hZHZlcnRlbnRseSBjYWxs
2323
+ aW5nIGBjcmVhdGUoKWAgaW5zdGVhZCBvZiBgY3JlYXRlUmVjb3JkKClgLiBU
2324
+ aGUgc3RvcmUgaXMKICAgIHN0aWxsIGFibGUgdG8gY3JlYXRlIGluc3RhbmNl
2325
+ cyBieSBjYWxsaW5nIHRoZSBgX2NyZWF0ZSgpYCBtZXRob2QuCgogICAgQG1l
2326
+ dGhvZCBjcmVhdGUKICAgIEBwcml2YXRlCiAgICBAc3RhdGljCiAgKi8KICBj
2327
+ cmVhdGU6IGZ1bmN0aW9uKCkgewogICAgdGhyb3cgbmV3IEVtYmVyLkVycm9y
2328
+ KCJZb3Ugc2hvdWxkIG5vdCBjYWxsIGBjcmVhdGVgIG9uIGEgbW9kZWwuIElu
2329
+ c3RlYWQsIGNhbGwgYHN0b3JlLmNyZWF0ZVJlY29yZGAgd2l0aCB0aGUgYXR0
2330
+ cmlidXRlcyB5b3Ugd291bGQgbGlrZSB0byBzZXQuIik7CiAgfQp9KTsKCn0p
2331
+ KCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVsZSBlbWJlci1kYXRh
2332
+ CiovCgp2YXIgZ2V0ID0gRW1iZXIuZ2V0OwoKLyoqCiAgQGNsYXNzIE1vZGVs
2333
+ CiAgQG5hbWVzcGFjZSBEUwoqLwpEUy5Nb2RlbC5yZW9wZW5DbGFzcyh7CiAg
2334
+ YXR0cmlidXRlczogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7CiAgICB2
2335
+ YXIgbWFwID0gRW1iZXIuTWFwLmNyZWF0ZSgpOwoKICAgIHRoaXMuZWFjaENv
2336
+ bXB1dGVkUHJvcGVydHkoZnVuY3Rpb24obmFtZSwgbWV0YSkgewogICAgICBp
2337
+ ZiAobWV0YS5pc0F0dHJpYnV0ZSkgewogICAgICAgIEVtYmVyLmFzc2VydCgi
2338
+ WW91IG1heSBub3Qgc2V0IGBpZGAgYXMgYW4gYXR0cmlidXRlIG9uIHlvdXIg
2339
+ bW9kZWwuIFBsZWFzZSByZW1vdmUgYW55IGxpbmVzIHRoYXQgbG9vayBsaWtl
2340
+ OiBgaWQ6IERTLmF0dHIoJzx0eXBlPicpYCBmcm9tICIgKyB0aGlzLnRvU3Ry
2341
+ aW5nKCksIG5hbWUgIT09ICdpZCcpOwoKICAgICAgICBtZXRhLm5hbWUgPSBu
2342
+ YW1lOwogICAgICAgIG1hcC5zZXQobmFtZSwgbWV0YSk7CiAgICAgIH0KICAg
2343
+ IH0pOwoKICAgIHJldHVybiBtYXA7CiAgfSksCgogIHRyYW5zZm9ybWVkQXR0
2344
+ cmlidXRlczogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7CiAgICB2YXIg
2345
+ bWFwID0gRW1iZXIuTWFwLmNyZWF0ZSgpOwoKICAgIHRoaXMuZWFjaEF0dHJp
2346
+ YnV0ZShmdW5jdGlvbihrZXksIG1ldGEpIHsKICAgICAgaWYgKG1ldGEudHlw
2347
+ ZSkgewogICAgICAgIG1hcC5zZXQoa2V5LCBtZXRhLnR5cGUpOwogICAgICB9
2348
+ CiAgICB9KTsKCiAgICByZXR1cm4gbWFwOwogIH0pLAoKICBlYWNoQXR0cmli
2349
+ dXRlOiBmdW5jdGlvbihjYWxsYmFjaywgYmluZGluZykgewogICAgZ2V0KHRo
2350
+ aXMsICdhdHRyaWJ1dGVzJykuZm9yRWFjaChmdW5jdGlvbihuYW1lLCBtZXRh
2351
+ KSB7CiAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZywgbmFtZSwgbWV0YSk7
2352
+ CiAgICB9LCBiaW5kaW5nKTsKICB9LAoKICBlYWNoVHJhbnNmb3JtZWRBdHRy
2353
+ aWJ1dGU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7CiAgICBnZXQo
2354
+ dGhpcywgJ3RyYW5zZm9ybWVkQXR0cmlidXRlcycpLmZvckVhY2goZnVuY3Rp
2355
+ b24obmFtZSwgdHlwZSkgewogICAgICBjYWxsYmFjay5jYWxsKGJpbmRpbmcs
2356
+ IG5hbWUsIHR5cGUpOwogICAgfSk7CiAgfQp9KTsKCgpEUy5Nb2RlbC5yZW9w
2357
+ ZW4oewogIGVhY2hBdHRyaWJ1dGU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5k
2358
+ aW5nKSB7CiAgICB0aGlzLmNvbnN0cnVjdG9yLmVhY2hBdHRyaWJ1dGUoY2Fs
2359
+ bGJhY2ssIGJpbmRpbmcpOwogIH0KfSk7CgpmdW5jdGlvbiBnZXRBdHRyKHJl
2360
+ Y29yZCwgb3B0aW9ucywga2V5KSB7CiAgdmFyIGF0dHJpYnV0ZXMgPSBnZXQo
2361
+ cmVjb3JkLCAnZGF0YScpOwogIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5
2362
+ XTsKCiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgIGlmICh0eXBl
2363
+ b2Ygb3B0aW9ucy5kZWZhdWx0VmFsdWUgPT09ICJmdW5jdGlvbiIpIHsKICAg
2364
+ ICAgdmFsdWUgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZSgpOwogICAgfSBlbHNl
2365
+ IHsKICAgICAgdmFsdWUgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZTsKICAgIH0K
2366
+ ICB9CgogIHJldHVybiB2YWx1ZTsKfQoKRFMuYXR0ciA9IGZ1bmN0aW9uKHR5
2367
+ cGUsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAg
2368
+ dmFyIG1ldGEgPSB7CiAgICB0eXBlOiB0eXBlLAogICAgaXNBdHRyaWJ1dGU6
2369
+ IHRydWUsCiAgICBvcHRpb25zOiBvcHRpb25zCiAgfTsKCiAgcmV0dXJuIEVt
2370
+ YmVyLmNvbXB1dGVkKGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9sZFZhbHVlKSB7
2371
+ CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgRW1iZXIu
2372
+ YXNzZXJ0KCJZb3UgbWF5IG5vdCBzZXQgYGlkYCBhcyBhbiBhdHRyaWJ1dGUg
2373
+ b24geW91ciBtb2RlbC4gUGxlYXNlIHJlbW92ZSBhbnkgbGluZXMgdGhhdCBs
2374
+ b29rIGxpa2U6IGBpZDogRFMuYXR0cignPHR5cGU+JylgIGZyb20gIiArIHRo
2375
+ aXMuY29uc3RydWN0b3IudG9TdHJpbmcoKSwga2V5ICE9PSAnaWQnKTsKICAg
2376
+ ICAgdGhpcy5zZW5kKCdkaWRTZXRQcm9wZXJ0eScsIHsgbmFtZToga2V5LCBv
2377
+ bGRWYWx1ZTogdGhpcy5fYXR0cmlidXRlc1trZXldIHx8IHRoaXMuX2luRmxp
2378
+ Z2h0QXR0cmlidXRlc1trZXldIHx8IHRoaXMuX2RhdGFba2V5XSwgdmFsdWU6
2379
+ IHZhbHVlIH0pOwogICAgICB0aGlzLl9hdHRyaWJ1dGVzW2tleV0gPSB2YWx1
2380
+ ZTsKICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0cmlidXRlc1trZXldKSB7CiAg
2381
+ ICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzW2tleV07CiAgICB9IGVsc2Ug
2382
+ ewogICAgICB2YWx1ZSA9IGdldEF0dHIodGhpcywgb3B0aW9ucywga2V5KTsK
2383
+ ICAgIH0KCiAgICByZXR1cm4gdmFsdWU7CiAgLy8gYGRhdGFgIGlzIG5ldmVy
2384
+ IHNldCBkaXJlY3RseS4gSG93ZXZlciwgaXQgbWF5IGJlCiAgLy8gaW52YWxp
2385
+ ZGF0ZWQgZnJvbSB0aGUgc3RhdGUgbWFuYWdlcidzIHNldERhdGEKICAvLyBl
2386
+ dmVudC4KICB9KS5wcm9wZXJ0eSgnZGF0YScpLm1ldGEobWV0YSk7Cn07CgoK
2387
+ fSkoKTsKCgoKKGZ1bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRh
2388
+ dGEKKi8KCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVsZSBl
2389
+ bWJlci1kYXRhCiovCgovKioKICBBbiBBdHRyaWJ1dGVDaGFuZ2Ugb2JqZWN0
2390
+ IGlzIGNyZWF0ZWQgd2hlbmV2ZXIgYSByZWNvcmQncwogIGF0dHJpYnV0ZSBj
2391
+ aGFuZ2VzIHZhbHVlLiBJdCBpcyB1c2VkIHRvIHRyYWNrIGNoYW5nZXMgdG8g
2392
+ YQogIHJlY29yZCBiZXR3ZWVuIHRyYW5zYWN0aW9uIGNvbW1pdHMuCgogIEBj
2393
+ bGFzcyBBdHRyaWJ1dGVDaGFuZ2UKICBAbmFtZXNwYWNlIERTCiAgQHByaXZh
2394
+ dGUKICBAY29uc3RydWN0b3IKKi8KdmFyIEF0dHJpYnV0ZUNoYW5nZSA9IERT
2395
+ LkF0dHJpYnV0ZUNoYW5nZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICB0aGlz
2396
+ LnJlY29yZCA9IG9wdGlvbnMucmVjb3JkOwogIHRoaXMuc3RvcmUgPSBvcHRp
2397
+ b25zLnN0b3JlOwogIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTsKICB0aGlz
2398
+ LnZhbHVlID0gb3B0aW9ucy52YWx1ZTsKICB0aGlzLm9sZFZhbHVlID0gb3B0
2399
+ aW9ucy5vbGRWYWx1ZTsKfTsKCkF0dHJpYnV0ZUNoYW5nZS5jcmVhdGVDaGFu
2400
+ Z2UgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgcmV0dXJuIG5ldyBBdHRyaWJ1
2401
+ dGVDaGFuZ2Uob3B0aW9ucyk7Cn07CgpBdHRyaWJ1dGVDaGFuZ2UucHJvdG90
2402
+ eXBlID0gewogIHN5bmM6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMudmFs
2403
+ dWUgIT09IHRoaXMub2xkVmFsdWUpIHsKICAgICAgdGhpcy5yZWNvcmQuc2Vu
2404
+ ZCgnYmVjb21lRGlydHknKTsKICAgICAgdGhpcy5yZWNvcmQudXBkYXRlUmVj
2405
+ b3JkQXJyYXlzTGF0ZXIoKTsKICAgIH0KCiAgICAvLyBUT0RPOiBVc2UgdGhp
2406
+ cyBvYmplY3QgaW4gdGhlIGNvbW1pdCBwcm9jZXNzCiAgICB0aGlzLmRlc3Ry
2407
+ b3koKTsKICB9LAoKICAvKioKICAgIElmIHRoZSBBdHRyaWJ1dGVDaGFuZ2Ug
2408
+ aXMgZGVzdHJveWVkIChlaXRoZXIgYnkgYmVpbmcgcm9sbGVkIGJhY2sKICAg
2409
+ IG9yIGJlaW5nIGNvbW1pdHRlZCksIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0
2410
+ IG9mIHBlbmRpbmcgY2hhbmdlcwogICAgb24gdGhlIHJlY29yZC4KCiAgICBA
2411
+ bWV0aG9kIGRlc3Ryb3kKICAqLwogIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewog
2412
+ ICAgZGVsZXRlIHRoaXMucmVjb3JkLl9jaGFuZ2VzVG9TeW5jW3RoaXMubmFt
2413
+ ZV07CiAgfQp9OwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewovKioKICBAbW9k
2414
+ dWxlIGVtYmVyLWRhdGEKKi8KCnZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9
2415
+ IEVtYmVyLnNldDsKdmFyIGZvckVhY2ggPSBFbWJlci5FbnVtZXJhYmxlVXRp
2416
+ bHMuZm9yRWFjaDsKCi8qKgogIEBjbGFzcyBSZWxhdGlvbnNoaXBDaGFuZ2UK
2417
+ ICBAbmFtZXNwYWNlIERTCiAgQHByaXZhdGUKICBAY29uc3RydXRvcgoqLwpE
2418
+ Uy5SZWxhdGlvbnNoaXBDaGFuZ2UgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAg
2419
+ dGhpcy5wYXJlbnRSZWNvcmQgPSBvcHRpb25zLnBhcmVudFJlY29yZDsKICB0
2420
+ aGlzLmNoaWxkUmVjb3JkID0gb3B0aW9ucy5jaGlsZFJlY29yZDsKICB0aGlz
2421
+ LmZpcnN0UmVjb3JkID0gb3B0aW9ucy5maXJzdFJlY29yZDsKICB0aGlzLmZp
2422
+ cnN0UmVjb3JkS2luZCA9IG9wdGlvbnMuZmlyc3RSZWNvcmRLaW5kOwogIHRo
2423
+ aXMuZmlyc3RSZWNvcmROYW1lID0gb3B0aW9ucy5maXJzdFJlY29yZE5hbWU7
2424
+ CiAgdGhpcy5zZWNvbmRSZWNvcmQgPSBvcHRpb25zLnNlY29uZFJlY29yZDsK
2425
+ ICB0aGlzLnNlY29uZFJlY29yZEtpbmQgPSBvcHRpb25zLnNlY29uZFJlY29y
2426
+ ZEtpbmQ7CiAgdGhpcy5zZWNvbmRSZWNvcmROYW1lID0gb3B0aW9ucy5zZWNv
2427
+ bmRSZWNvcmROYW1lOwogIHRoaXMuY2hhbmdlVHlwZSA9IG9wdGlvbnMuY2hh
2428
+ bmdlVHlwZTsKICB0aGlzLnN0b3JlID0gb3B0aW9ucy5zdG9yZTsKCiAgdGhp
2429
+ cy5jb21taXR0ZWQgPSB7fTsKfTsKCi8qKgogIEBjbGFzcyBSZWxhdGlvbnNo
2430
+ aXBDaGFuZ2VBZGQKICBAbmFtZXNwYWNlIERTCiAgQHByaXZhdGUKICBAY29u
2431
+ c3RydXRvcgoqLwpEUy5SZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBmdW5jdGlv
2432
+ bihvcHRpb25zKXsKICBEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuY2FsbCh0aGlz
2433
+ LCBvcHRpb25zKTsKfTsKCi8qKgogIEBjbGFzcyBSZWxhdGlvbnNoaXBDaGFu
2434
+ Z2VSZW1vdmUKICBAbmFtZXNwYWNlIERTCiAgQHByaXZhdGUKICBAY29uc3Ry
2435
+ dXRvcgoqLwpEUy5SZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUgPSBmdW5jdGlv
2436
+ bihvcHRpb25zKXsKICBEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuY2FsbCh0aGlz
2437
+ LCBvcHRpb25zKTsKfTsKCkRTLlJlbGF0aW9uc2hpcENoYW5nZS5jcmVhdGUg
2438
+ PSBmdW5jdGlvbihvcHRpb25zKSB7CiAgcmV0dXJuIG5ldyBEUy5SZWxhdGlv
2439
+ bnNoaXBDaGFuZ2Uob3B0aW9ucyk7Cn07CgpEUy5SZWxhdGlvbnNoaXBDaGFu
2440
+ Z2VBZGQuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewogIHJldHVybiBu
2441
+ ZXcgRFMuUmVsYXRpb25zaGlwQ2hhbmdlQWRkKG9wdGlvbnMpOwp9OwoKRFMu
2442
+ UmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlLmNyZWF0ZSA9IGZ1bmN0aW9uKG9w
2443
+ dGlvbnMpIHsKICByZXR1cm4gbmV3IERTLlJlbGF0aW9uc2hpcENoYW5nZVJl
2444
+ bW92ZShvcHRpb25zKTsKfTsKCkRTLk9uZVRvTWFueUNoYW5nZSA9IHt9OwpE
2445
+ Uy5PbmVUb05vbmVDaGFuZ2UgPSB7fTsKRFMuTWFueVRvTm9uZUNoYW5nZSA9
2446
+ IHt9OwpEUy5PbmVUb09uZUNoYW5nZSA9IHt9OwpEUy5NYW55VG9NYW55Q2hh
2447
+ bmdlID0ge307CgpEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5n
2448
+ ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpewogIGlmKG9wdGlvbnMuY2hhbmdlVHlw
2449
+ ZSA9PT0gImFkZCIpewogICAgcmV0dXJuIERTLlJlbGF0aW9uc2hpcENoYW5n
2450
+ ZUFkZC5jcmVhdGUob3B0aW9ucyk7CiAgfQogIGlmKG9wdGlvbnMuY2hhbmdl
2451
+ VHlwZSA9PT0gInJlbW92ZSIpewogICAgcmV0dXJuIERTLlJlbGF0aW9uc2hp
2452
+ cENoYW5nZVJlbW92ZS5jcmVhdGUob3B0aW9ucyk7CiAgfQp9OwoKCkRTLlJl
2453
+ bGF0aW9uc2hpcENoYW5nZS5kZXRlcm1pbmVSZWxhdGlvbnNoaXBUeXBlID0g
2454
+ ZnVuY3Rpb24ocmVjb3JkVHlwZSwga25vd25TaWRlKXsKICB2YXIga25vd25L
2455
+ ZXkgPSBrbm93blNpZGUua2V5LCBrZXksIG90aGVyS2luZDsKICB2YXIga25v
2456
+ d25LaW5kID0ga25vd25TaWRlLmtpbmQ7CgogIHZhciBpbnZlcnNlID0gcmVj
2457
+ b3JkVHlwZS5pbnZlcnNlRm9yKGtub3duS2V5KTsKCiAgaWYgKGludmVyc2Up
2458
+ ewogICAga2V5ID0gaW52ZXJzZS5uYW1lOwogICAgb3RoZXJLaW5kID0gaW52
2459
+ ZXJzZS5raW5kOwogIH0KCiAgaWYgKCFpbnZlcnNlKXsKICAgIHJldHVybiBr
2460
+ bm93bktpbmQgPT09ICJiZWxvbmdzVG8iID8gIm9uZVRvTm9uZSIgOiAibWFu
2461
+ eVRvTm9uZSI7CiAgfQogIGVsc2V7CiAgICBpZihvdGhlcktpbmQgPT09ICJi
2462
+ ZWxvbmdzVG8iKXsKICAgICAgcmV0dXJuIGtub3duS2luZCA9PT0gImJlbG9u
2463
+ Z3NUbyIgPyAib25lVG9PbmUiIDogIm1hbnlUb09uZSI7CiAgICB9CiAgICBl
2464
+ bHNlewogICAgICByZXR1cm4ga25vd25LaW5kID09PSAiYmVsb25nc1RvIiA/
2465
+ ICJvbmVUb01hbnkiIDogIm1hbnlUb01hbnkiOwogICAgfQogIH0KCn07CgpE
2466
+ Uy5SZWxhdGlvbnNoaXBDaGFuZ2UuY3JlYXRlQ2hhbmdlID0gZnVuY3Rpb24o
2467
+ Zmlyc3RSZWNvcmQsIHNlY29uZFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpewog
2468
+ IC8vIEdldCB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgYmFzZWQgb24gdGhlIGNo
2469
+ aWxkJ3MgY2xpZW50IElECiAgdmFyIGZpcnN0UmVjb3JkVHlwZSA9IGZpcnN0
2470
+ UmVjb3JkLmNvbnN0cnVjdG9yLCBjaGFuZ2VUeXBlOwogIGNoYW5nZVR5cGUg
2471
+ PSBEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuZGV0ZXJtaW5lUmVsYXRpb25zaGlw
2472
+ VHlwZShmaXJzdFJlY29yZFR5cGUsIG9wdGlvbnMpOwogIGlmIChjaGFuZ2VU
2473
+ eXBlID09PSAib25lVG9NYW55Iil7CiAgICByZXR1cm4gRFMuT25lVG9NYW55
2474
+ Q2hhbmdlLmNyZWF0ZUNoYW5nZShmaXJzdFJlY29yZCwgc2Vjb25kUmVjb3Jk
2475
+ LCBzdG9yZSwgb3B0aW9ucyk7CiAgfQogIGVsc2UgaWYgKGNoYW5nZVR5cGUg
2476
+ PT09ICJtYW55VG9PbmUiKXsKICAgIHJldHVybiBEUy5PbmVUb01hbnlDaGFu
2477
+ Z2UuY3JlYXRlQ2hhbmdlKHNlY29uZFJlY29yZCwgZmlyc3RSZWNvcmQsIHN0
2478
+ b3JlLCBvcHRpb25zKTsKICB9CiAgZWxzZSBpZiAoY2hhbmdlVHlwZSA9PT0g
2479
+ Im9uZVRvTm9uZSIpewogICAgcmV0dXJuIERTLk9uZVRvTm9uZUNoYW5nZS5j
2480
+ cmVhdGVDaGFuZ2UoZmlyc3RSZWNvcmQsIHNlY29uZFJlY29yZCwgc3RvcmUs
2481
+ IG9wdGlvbnMpOwogIH0KICBlbHNlIGlmIChjaGFuZ2VUeXBlID09PSAibWFu
2482
+ eVRvTm9uZSIpewogICAgcmV0dXJuIERTLk1hbnlUb05vbmVDaGFuZ2UuY3Jl
2483
+ YXRlQ2hhbmdlKGZpcnN0UmVjb3JkLCBzZWNvbmRSZWNvcmQsIHN0b3JlLCBv
2484
+ cHRpb25zKTsKICB9CiAgZWxzZSBpZiAoY2hhbmdlVHlwZSA9PT0gIm9uZVRv
2485
+ T25lIil7CiAgICByZXR1cm4gRFMuT25lVG9PbmVDaGFuZ2UuY3JlYXRlQ2hh
2486
+ bmdlKGZpcnN0UmVjb3JkLCBzZWNvbmRSZWNvcmQsIHN0b3JlLCBvcHRpb25z
2487
+ KTsKICB9CiAgZWxzZSBpZiAoY2hhbmdlVHlwZSA9PT0gIm1hbnlUb01hbnki
2488
+ KXsKICAgIHJldHVybiBEUy5NYW55VG9NYW55Q2hhbmdlLmNyZWF0ZUNoYW5n
2489
+ ZShmaXJzdFJlY29yZCwgc2Vjb25kUmVjb3JkLCBzdG9yZSwgb3B0aW9ucyk7
2490
+ CiAgfQp9OwoKRFMuT25lVG9Ob25lQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1
2491
+ bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0b3JlLCBvcHRp
2492
+ b25zKSB7CiAgdmFyIGtleSA9IG9wdGlvbnMua2V5OwogIHZhciBjaGFuZ2Ug
2493
+ PSBEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5nZSh7CiAgICAg
2494
+ IHBhcmVudFJlY29yZDogcGFyZW50UmVjb3JkLAogICAgICBjaGlsZFJlY29y
2495
+ ZDogY2hpbGRSZWNvcmQsCiAgICAgIGZpcnN0UmVjb3JkOiBjaGlsZFJlY29y
2496
+ ZCwKICAgICAgc3RvcmU6IHN0b3JlLAogICAgICBjaGFuZ2VUeXBlOiBvcHRp
2497
+ b25zLmNoYW5nZVR5cGUsCiAgICAgIGZpcnN0UmVjb3JkTmFtZToga2V5LAog
2498
+ ICAgICBmaXJzdFJlY29yZEtpbmQ6ICJiZWxvbmdzVG8iCiAgfSk7CgogIHN0
2499
+ b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwga2V5
2500
+ LCBwYXJlbnRSZWNvcmQsIG51bGwsIGNoYW5nZSk7CgogIHJldHVybiBjaGFu
2501
+ Z2U7Cn07CgpEUy5NYW55VG9Ob25lQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1
2502
+ bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0b3JlLCBvcHRp
2503
+ b25zKSB7CiAgdmFyIGtleSA9IG9wdGlvbnMua2V5OwogIHZhciBjaGFuZ2Ug
2504
+ PSBEUy5SZWxhdGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5nZSh7CiAgICAg
2505
+ IHBhcmVudFJlY29yZDogY2hpbGRSZWNvcmQsCiAgICAgIGNoaWxkUmVjb3Jk
2506
+ OiBwYXJlbnRSZWNvcmQsCiAgICAgIHNlY29uZFJlY29yZDogY2hpbGRSZWNv
2507
+ cmQsCiAgICAgIHN0b3JlOiBzdG9yZSwKICAgICAgY2hhbmdlVHlwZTogb3B0
2508
+ aW9ucy5jaGFuZ2VUeXBlLAogICAgICBzZWNvbmRSZWNvcmROYW1lOiBvcHRp
2509
+ b25zLmtleSwKICAgICAgc2Vjb25kUmVjb3JkS2luZDogImhhc01hbnkiCiAg
2510
+ fSk7CgogIHN0b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGlsZFJl
2511
+ Y29yZCwga2V5LCBwYXJlbnRSZWNvcmQsIG51bGwsIGNoYW5nZSk7CiAgcmV0
2512
+ dXJuIGNoYW5nZTsKfTsKCgpEUy5NYW55VG9NYW55Q2hhbmdlLmNyZWF0ZUNo
2513
+ YW5nZSA9IGZ1bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0
2514
+ b3JlLCBvcHRpb25zKSB7CiAgLy8gSWYgdGhlIG5hbWUgb2YgdGhlIGJlbG9u
2515
+ Z3NUbyBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAgaXMgc3BlY2lmaWVkLAog
2516
+ IC8vIHVzZSB0aGF0CiAgLy8gSWYgdGhlIHR5cGUgb2YgdGhlIHBhcmVudCBp
2517
+ cyBzcGVjaWZpZWQsIGxvb2sgaXQgdXAgb24gdGhlIGNoaWxkJ3MgdHlwZQog
2518
+ IC8vIGRlZmluaXRpb24uCiAgdmFyIGtleSA9IG9wdGlvbnMua2V5OwoKICB2
2519
+ YXIgY2hhbmdlID0gRFMuUmVsYXRpb25zaGlwQ2hhbmdlLl9jcmVhdGVDaGFu
2520
+ Z2UoewogICAgICBwYXJlbnRSZWNvcmQ6IHBhcmVudFJlY29yZCwKICAgICAg
2521
+ Y2hpbGRSZWNvcmQ6IGNoaWxkUmVjb3JkLAogICAgICBmaXJzdFJlY29yZDog
2522
+ Y2hpbGRSZWNvcmQsCiAgICAgIHNlY29uZFJlY29yZDogcGFyZW50UmVjb3Jk
2523
+ LAogICAgICBmaXJzdFJlY29yZEtpbmQ6ICJoYXNNYW55IiwKICAgICAgc2Vj
2524
+ b25kUmVjb3JkS2luZDogImhhc01hbnkiLAogICAgICBzdG9yZTogc3RvcmUs
2525
+ CiAgICAgIGNoYW5nZVR5cGU6IG9wdGlvbnMuY2hhbmdlVHlwZSwKICAgICAg
2526
+ Zmlyc3RSZWNvcmROYW1lOiAga2V5CiAgfSk7CgogIHN0b3JlLmFkZFJlbGF0
2527
+ aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwga2V5LCBwYXJlbnRSZWNv
2528
+ cmQsIG51bGwsIGNoYW5nZSk7CgoKICByZXR1cm4gY2hhbmdlOwp9OwoKRFMu
2529
+ T25lVG9PbmVDaGFuZ2UuY3JlYXRlQ2hhbmdlID0gZnVuY3Rpb24oY2hpbGRS
2530
+ ZWNvcmQsIHBhcmVudFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpIHsKICB2YXIg
2531
+ a2V5OwoKICAvLyBJZiB0aGUgbmFtZSBvZiB0aGUgYmVsb25nc1RvIHNpZGUg
2532
+ b2YgdGhlIHJlbGF0aW9uc2hpcCBpcyBzcGVjaWZpZWQsCiAgLy8gdXNlIHRo
2533
+ YXQKICAvLyBJZiB0aGUgdHlwZSBvZiB0aGUgcGFyZW50IGlzIHNwZWNpZmll
2534
+ ZCwgbG9vayBpdCB1cCBvbiB0aGUgY2hpbGQncyB0eXBlCiAgLy8gZGVmaW5p
2535
+ dGlvbi4KICBpZiAob3B0aW9ucy5wYXJlbnRUeXBlKSB7CiAgICBrZXkgPSBv
2536
+ cHRpb25zLnBhcmVudFR5cGUuaW52ZXJzZUZvcihvcHRpb25zLmtleSkubmFt
2537
+ ZTsKICB9IGVsc2UgaWYgKG9wdGlvbnMua2V5KSB7CiAgICBrZXkgPSBvcHRp
2538
+ b25zLmtleTsKICB9IGVsc2UgewogICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVz
2539
+ dCBwYXNzIGVpdGhlciBhIHBhcmVudFR5cGUgb3IgYmVsb25nc1RvTmFtZSBv
2540
+ cHRpb24gdG8gT25lVG9NYW55Q2hhbmdlLmZvckNoaWxkQW5kUGFyZW50Iiwg
2541
+ ZmFsc2UpOwogIH0KCiAgdmFyIGNoYW5nZSA9IERTLlJlbGF0aW9uc2hpcENo
2542
+ YW5nZS5fY3JlYXRlQ2hhbmdlKHsKICAgICAgcGFyZW50UmVjb3JkOiBwYXJl
2543
+ bnRSZWNvcmQsCiAgICAgIGNoaWxkUmVjb3JkOiBjaGlsZFJlY29yZCwKICAg
2544
+ ICAgZmlyc3RSZWNvcmQ6IGNoaWxkUmVjb3JkLAogICAgICBzZWNvbmRSZWNv
2545
+ cmQ6IHBhcmVudFJlY29yZCwKICAgICAgZmlyc3RSZWNvcmRLaW5kOiAiYmVs
2546
+ b25nc1RvIiwKICAgICAgc2Vjb25kUmVjb3JkS2luZDogImJlbG9uZ3NUbyIs
2547
+ CiAgICAgIHN0b3JlOiBzdG9yZSwKICAgICAgY2hhbmdlVHlwZTogb3B0aW9u
2548
+ cy5jaGFuZ2VUeXBlLAogICAgICBmaXJzdFJlY29yZE5hbWU6ICBrZXkKICB9
2549
+ KTsKCiAgc3RvcmUuYWRkUmVsYXRpb25zaGlwQ2hhbmdlRm9yKGNoaWxkUmVj
2550
+ b3JkLCBrZXksIHBhcmVudFJlY29yZCwgbnVsbCwgY2hhbmdlKTsKCgogIHJl
2551
+ dHVybiBjaGFuZ2U7Cn07CgpEUy5PbmVUb09uZUNoYW5nZS5tYWludGFpbklu
2552
+ dmFyaWFudCA9IGZ1bmN0aW9uKG9wdGlvbnMsIHN0b3JlLCBjaGlsZFJlY29y
2553
+ ZCwga2V5KXsKICBpZiAob3B0aW9ucy5jaGFuZ2VUeXBlID09PSAiYWRkIiAm
2554
+ JiBzdG9yZS5yZWNvcmRJc01hdGVyaWFsaXplZChjaGlsZFJlY29yZCkpIHsK
2555
+ ICAgIHZhciBvbGRQYXJlbnQgPSBnZXQoY2hpbGRSZWNvcmQsIGtleSk7CiAg
2556
+ ICBpZiAob2xkUGFyZW50KXsKICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDaGFu
2557
+ Z2UgPSBEUy5PbmVUb09uZUNoYW5nZS5jcmVhdGVDaGFuZ2UoY2hpbGRSZWNv
2558
+ cmQsIG9sZFBhcmVudCwgc3RvcmUsIHsKICAgICAgICAgIHBhcmVudFR5cGU6
2559
+ IG9wdGlvbnMucGFyZW50VHlwZSwKICAgICAgICAgIGhhc01hbnlOYW1lOiBv
2560
+ cHRpb25zLmhhc01hbnlOYW1lLAogICAgICAgICAgY2hhbmdlVHlwZTogInJl
2561
+ bW92ZSIsCiAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5CiAgICAgICAgfSk7
2562
+ CiAgICAgIHN0b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGlsZFJl
2563
+ Y29yZCwga2V5LCBvcHRpb25zLnBhcmVudFJlY29yZCAsIG51bGwsIGNvcnJl
2564
+ c3BvbmRpbmdDaGFuZ2UpOwogICAgIGNvcnJlc3BvbmRpbmdDaGFuZ2Uuc3lu
2565
+ YygpOwogICAgfQogIH0KfTsKCkRTLk9uZVRvTWFueUNoYW5nZS5jcmVhdGVD
2566
+ aGFuZ2UgPSBmdW5jdGlvbihjaGlsZFJlY29yZCwgcGFyZW50UmVjb3JkLCBz
2567
+ dG9yZSwgb3B0aW9ucykgewogIHZhciBrZXk7CgogIC8vIElmIHRoZSBuYW1l
2568
+ IG9mIHRoZSBiZWxvbmdzVG8gc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwIGlz
2569
+ IHNwZWNpZmllZCwKICAvLyB1c2UgdGhhdAogIC8vIElmIHRoZSB0eXBlIG9m
2570
+ IHRoZSBwYXJlbnQgaXMgc3BlY2lmaWVkLCBsb29rIGl0IHVwIG9uIHRoZSBj
2571
+ aGlsZCdzIHR5cGUKICAvLyBkZWZpbml0aW9uLgogIGlmIChvcHRpb25zLnBh
2572
+ cmVudFR5cGUpIHsKICAgIGtleSA9IG9wdGlvbnMucGFyZW50VHlwZS5pbnZl
2573
+ cnNlRm9yKG9wdGlvbnMua2V5KS5uYW1lOwogICAgRFMuT25lVG9NYW55Q2hh
2574
+ bmdlLm1haW50YWluSW52YXJpYW50KCBvcHRpb25zLCBzdG9yZSwgY2hpbGRS
2575
+ ZWNvcmQsIGtleSApOwogIH0gZWxzZSBpZiAob3B0aW9ucy5rZXkpIHsKICAg
2576
+ IGtleSA9IG9wdGlvbnMua2V5OwogIH0gZWxzZSB7CiAgICBFbWJlci5hc3Nl
2577
+ cnQoIllvdSBtdXN0IHBhc3MgZWl0aGVyIGEgcGFyZW50VHlwZSBvciBiZWxv
2578
+ bmdzVG9OYW1lIG9wdGlvbiB0byBPbmVUb01hbnlDaGFuZ2UuZm9yQ2hpbGRB
2579
+ bmRQYXJlbnQiLCBmYWxzZSk7CiAgfQoKICB2YXIgY2hhbmdlID0gRFMuUmVs
2580
+ YXRpb25zaGlwQ2hhbmdlLl9jcmVhdGVDaGFuZ2UoewogICAgICBwYXJlbnRS
2581
+ ZWNvcmQ6IHBhcmVudFJlY29yZCwKICAgICAgY2hpbGRSZWNvcmQ6IGNoaWxk
2582
+ UmVjb3JkLAogICAgICBmaXJzdFJlY29yZDogY2hpbGRSZWNvcmQsCiAgICAg
2583
+ IHNlY29uZFJlY29yZDogcGFyZW50UmVjb3JkLAogICAgICBmaXJzdFJlY29y
2584
+ ZEtpbmQ6ICJiZWxvbmdzVG8iLAogICAgICBzZWNvbmRSZWNvcmRLaW5kOiAi
2585
+ aGFzTWFueSIsCiAgICAgIHN0b3JlOiBzdG9yZSwKICAgICAgY2hhbmdlVHlw
2586
+ ZTogb3B0aW9ucy5jaGFuZ2VUeXBlLAogICAgICBmaXJzdFJlY29yZE5hbWU6
2587
+ ICBrZXkKICB9KTsKCiAgc3RvcmUuYWRkUmVsYXRpb25zaGlwQ2hhbmdlRm9y
2588
+ KGNoaWxkUmVjb3JkLCBrZXksIHBhcmVudFJlY29yZCwgY2hhbmdlLmdldFNl
2589
+ Y29uZFJlY29yZE5hbWUoKSwgY2hhbmdlKTsKCgogIHJldHVybiBjaGFuZ2U7
2590
+ Cn07CgoKRFMuT25lVG9NYW55Q2hhbmdlLm1haW50YWluSW52YXJpYW50ID0g
2591
+ ZnVuY3Rpb24ob3B0aW9ucywgc3RvcmUsIGNoaWxkUmVjb3JkLCBrZXkpewog
2592
+ IGlmIChvcHRpb25zLmNoYW5nZVR5cGUgPT09ICJhZGQiICYmIGNoaWxkUmVj
2593
+ b3JkKSB7CiAgICB2YXIgb2xkUGFyZW50ID0gZ2V0KGNoaWxkUmVjb3JkLCBr
2594
+ ZXkpOwogICAgaWYgKG9sZFBhcmVudCl7CiAgICAgIHZhciBjb3JyZXNwb25k
2595
+ aW5nQ2hhbmdlID0gRFMuT25lVG9NYW55Q2hhbmdlLmNyZWF0ZUNoYW5nZShj
2596
+ aGlsZFJlY29yZCwgb2xkUGFyZW50LCBzdG9yZSwgewogICAgICAgICAgcGFy
2597
+ ZW50VHlwZTogb3B0aW9ucy5wYXJlbnRUeXBlLAogICAgICAgICAgaGFzTWFu
2598
+ eU5hbWU6IG9wdGlvbnMuaGFzTWFueU5hbWUsCiAgICAgICAgICBjaGFuZ2VU
2599
+ eXBlOiAicmVtb3ZlIiwKICAgICAgICAgIGtleTogb3B0aW9ucy5rZXkKICAg
2600
+ ICAgICB9KTsKICAgICAgc3RvcmUuYWRkUmVsYXRpb25zaGlwQ2hhbmdlRm9y
2601
+ KGNoaWxkUmVjb3JkLCBrZXksIG9wdGlvbnMucGFyZW50UmVjb3JkLCBjb3Jy
2602
+ ZXNwb25kaW5nQ2hhbmdlLmdldFNlY29uZFJlY29yZE5hbWUoKSwgY29ycmVz
2603
+ cG9uZGluZ0NoYW5nZSk7CiAgICAgIGNvcnJlc3BvbmRpbmdDaGFuZ2Uuc3lu
2604
+ YygpOwogICAgfQogIH0KfTsKCi8qKgogIEBjbGFzcyBSZWxhdGlvbnNoaXBD
2605
+ aGFuZ2UKICBAbmFtZXNwYWNlIERTCiovCkRTLlJlbGF0aW9uc2hpcENoYW5n
2606
+ ZS5wcm90b3R5cGUgPSB7CgogIGdldFNlY29uZFJlY29yZE5hbWU6IGZ1bmN0
2607
+ aW9uKCkgewogICAgdmFyIG5hbWUgPSB0aGlzLnNlY29uZFJlY29yZE5hbWUs
2608
+ IHBhcmVudDsKCiAgICBpZiAoIW5hbWUpIHsKICAgICAgcGFyZW50ID0gdGhp
2609
+ cy5zZWNvbmRSZWNvcmQ7CiAgICAgIGlmICghcGFyZW50KSB7IHJldHVybjsg
2610
+ fQoKICAgICAgdmFyIGNoaWxkVHlwZSA9IHRoaXMuZmlyc3RSZWNvcmQuY29u
2611
+ c3RydWN0b3I7CiAgICAgIHZhciBpbnZlcnNlID0gY2hpbGRUeXBlLmludmVy
2612
+ c2VGb3IodGhpcy5maXJzdFJlY29yZE5hbWUpOwogICAgICB0aGlzLnNlY29u
2613
+ ZFJlY29yZE5hbWUgPSBpbnZlcnNlLm5hbWU7CiAgICB9CgogICAgcmV0dXJu
2614
+ IHRoaXMuc2Vjb25kUmVjb3JkTmFtZTsKICB9LAoKICAvKioKICAgIEdldCB0
2615
+ aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIG9uIHRoZSBiZWxvbmdzVG8g
2616
+ c2lkZS4KCiAgICBAbWV0aG9kIGdldEZpcnN0UmVjb3JkTmFtZQogICAgQHJl
2617
+ dHVybiB7U3RyaW5nfQogICovCiAgZ2V0Rmlyc3RSZWNvcmROYW1lOiBmdW5j
2618
+ dGlvbigpIHsKICAgIHZhciBuYW1lID0gdGhpcy5maXJzdFJlY29yZE5hbWU7
2619
+ CiAgICByZXR1cm4gbmFtZTsKICB9LAoKICAvKioKICAgIEBtZXRob2QgZGVz
2620
+ dHJveQogICAgQHByaXZhdGUKICAqLwogIGRlc3Ryb3k6IGZ1bmN0aW9uKCkg
2621
+ ewogICAgdmFyIGNoaWxkUmVjb3JkID0gdGhpcy5jaGlsZFJlY29yZCwKICAg
2622
+ ICAgICBiZWxvbmdzVG9OYW1lID0gdGhpcy5nZXRGaXJzdFJlY29yZE5hbWUo
2623
+ KSwKICAgICAgICBoYXNNYW55TmFtZSA9IHRoaXMuZ2V0U2Vjb25kUmVjb3Jk
2624
+ TmFtZSgpLAogICAgICAgIHN0b3JlID0gdGhpcy5zdG9yZTsKCiAgICBzdG9y
2625
+ ZS5yZW1vdmVSZWxhdGlvbnNoaXBDaGFuZ2VGb3IoY2hpbGRSZWNvcmQsIGJl
2626
+ bG9uZ3NUb05hbWUsIHRoaXMucGFyZW50UmVjb3JkLCBoYXNNYW55TmFtZSwg
2627
+ dGhpcy5jaGFuZ2VUeXBlKTsKICB9LAoKICBnZXRTZWNvbmRSZWNvcmQ6IGZ1
2628
+ bmN0aW9uKCl7CiAgICByZXR1cm4gdGhpcy5zZWNvbmRSZWNvcmQ7CiAgfSwK
2629
+ CiAgLyoqCiAgICBAbWV0aG9kIGdldEZpcnN0UmVjb3JkCiAgICBAcHJpdmF0
2630
+ ZQogICovCiAgZ2V0Rmlyc3RSZWNvcmQ6IGZ1bmN0aW9uKCkgewogICAgcmV0
2631
+ dXJuIHRoaXMuZmlyc3RSZWNvcmQ7CiAgfSwKCiAgY29hbGVzY2U6IGZ1bmN0
2632
+ aW9uKCl7CiAgICB2YXIgcmVsYXRpb25zaGlwUGFpcnMgPSB0aGlzLnN0b3Jl
2633
+ LnJlbGF0aW9uc2hpcENoYW5nZVBhaXJzRm9yKHRoaXMuZmlyc3RSZWNvcmQp
2634
+ OwogICAgZm9yRWFjaChyZWxhdGlvbnNoaXBQYWlycywgZnVuY3Rpb24ocGFp
2635
+ cil7CiAgICAgIHZhciBhZGRlZENoYW5nZSA9IHBhaXJbImFkZCJdOwogICAg
2636
+ ICB2YXIgcmVtb3ZlZENoYW5nZSA9IHBhaXJbInJlbW92ZSJdOwogICAgICBp
2637
+ ZihhZGRlZENoYW5nZSAmJiByZW1vdmVkQ2hhbmdlKSB7CiAgICAgICAgYWRk
2638
+ ZWRDaGFuZ2UuZGVzdHJveSgpOwogICAgICAgIHJlbW92ZWRDaGFuZ2UuZGVz
2639
+ dHJveSgpOwogICAgICB9CiAgICB9KTsKICB9Cn07CgpEUy5SZWxhdGlvbnNo
2640
+ aXBDaGFuZ2VBZGQucHJvdG90eXBlID0gRW1iZXIuY3JlYXRlKERTLlJlbGF0
2641
+ aW9uc2hpcENoYW5nZS5jcmVhdGUoe30pKTsKRFMuUmVsYXRpb25zaGlwQ2hh
2642
+ bmdlUmVtb3ZlLnByb3RvdHlwZSA9IEVtYmVyLmNyZWF0ZShEUy5SZWxhdGlv
2643
+ bnNoaXBDaGFuZ2UuY3JlYXRlKHt9KSk7CgovLyB0aGUgb2JqZWN0IGlzIGEg
2644
+ dmFsdWUsIGFuZCBub3QgYSBwcm9taXNlCmZ1bmN0aW9uIGlzVmFsdWUob2Jq
2645
+ ZWN0KSB7CiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYm
2646
+ ICghb2JqZWN0LnRoZW4gfHwgdHlwZW9mIG9iamVjdC50aGVuICE9PSAnZnVu
2647
+ Y3Rpb24nKTsKfQoKRFMuUmVsYXRpb25zaGlwQ2hhbmdlQWRkLnByb3RvdHlw
2648
+ ZS5jaGFuZ2VUeXBlID0gImFkZCI7CkRTLlJlbGF0aW9uc2hpcENoYW5nZUFk
2649
+ ZC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKCkgewogIHZhciBzZWNvbmRS
2650
+ ZWNvcmROYW1lID0gdGhpcy5nZXRTZWNvbmRSZWNvcmROYW1lKCksCiAgICAg
2651
+ IGZpcnN0UmVjb3JkTmFtZSA9IHRoaXMuZ2V0Rmlyc3RSZWNvcmROYW1lKCks
2652
+ CiAgICAgIGZpcnN0UmVjb3JkID0gdGhpcy5nZXRGaXJzdFJlY29yZCgpLAog
2653
+ ICAgICBzZWNvbmRSZWNvcmQgPSB0aGlzLmdldFNlY29uZFJlY29yZCgpOwoK
2654
+ ICAvL0VtYmVyLmFzc2VydCgiWW91IHNwZWNpZmllZCBhIGhhc01hbnkgKCIg
2655
+ KyBoYXNNYW55TmFtZSArICIpIG9uICIgKyAoIWJlbG9uZ3NUb05hbWUgJiYg
2656
+ KG5ld1BhcmVudCB8fCBvbGRQYXJlbnQgfHwgdGhpcy5sYXN0UGFyZW50KS5j
2657
+ b25zdHJ1Y3RvcikgKyAiIGJ1dCBkaWQgbm90IHNwZWNpZnkgYW4gaW52ZXJz
2658
+ ZSBiZWxvbmdzVG8gb24gIiArIGNoaWxkLmNvbnN0cnVjdG9yLCBiZWxvbmdz
2659
+ VG9OYW1lKTsKICAvL0VtYmVyLmFzc2VydCgiWW91IHNwZWNpZmllZCBhIGJl
2660
+ bG9uZ3NUbyAoIiArIGJlbG9uZ3NUb05hbWUgKyAiKSBvbiAiICsgY2hpbGQu
2661
+ Y29uc3RydWN0b3IgKyAiIGJ1dCBkaWQgbm90IHNwZWNpZnkgYW4gaW52ZXJz
2662
+ ZSBoYXNNYW55IG9uICIgKyAoIWhhc01hbnlOYW1lICYmIChuZXdQYXJlbnQg
2663
+ fHwgb2xkUGFyZW50IHx8IHRoaXMubGFzdFBhcmVudFJlY29yZCkuY29uc3Ry
2664
+ dWN0b3IpLCBoYXNNYW55TmFtZSk7CgogIGlmIChzZWNvbmRSZWNvcmQgaW5z
2665
+ dGFuY2VvZiBEUy5Nb2RlbCAmJiBmaXJzdFJlY29yZCBpbnN0YW5jZW9mIERT
2666
+ Lk1vZGVsKSB7CiAgICBpZih0aGlzLnNlY29uZFJlY29yZEtpbmQgPT09ICJi
2667
+ ZWxvbmdzVG8iKXsKICAgICAgc2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlv
2668
+ bnNoaXBPYnNlcnZlcnMoZnVuY3Rpb24oKXsKICAgICAgICBzZXQoc2Vjb25k
2669
+ UmVjb3JkLCBzZWNvbmRSZWNvcmROYW1lLCBmaXJzdFJlY29yZCk7CiAgICAg
2670
+ IH0pOwoKICAgICB9CiAgICAgZWxzZSBpZih0aGlzLnNlY29uZFJlY29yZEtp
2671
+ bmQgPT09ICJoYXNNYW55Iil7CiAgICAgIHNlY29uZFJlY29yZC5zdXNwZW5k
2672
+ UmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFy
2673
+ IHJlbGF0aW9uc2hpcCA9IGdldChzZWNvbmRSZWNvcmQsIHNlY29uZFJlY29y
2674
+ ZE5hbWUpOwogICAgICAgIGlmIChpc1ZhbHVlKHJlbGF0aW9uc2hpcCkpIHsg
2675
+ cmVsYXRpb25zaGlwLmFkZE9iamVjdChmaXJzdFJlY29yZCk7IH0KICAgICAg
2676
+ fSk7CiAgICB9CiAgfQoKICBpZiAoZmlyc3RSZWNvcmQgaW5zdGFuY2VvZiBE
2677
+ Uy5Nb2RlbCAmJiBzZWNvbmRSZWNvcmQgaW5zdGFuY2VvZiBEUy5Nb2RlbCAm
2678
+ JiBnZXQoZmlyc3RSZWNvcmQsIGZpcnN0UmVjb3JkTmFtZSkgIT09IHNlY29u
2679
+ ZFJlY29yZCkgewogICAgaWYodGhpcy5maXJzdFJlY29yZEtpbmQgPT09ICJi
2680
+ ZWxvbmdzVG8iKXsKICAgICAgZmlyc3RSZWNvcmQuc3VzcGVuZFJlbGF0aW9u
2681
+ c2hpcE9ic2VydmVycyhmdW5jdGlvbigpewogICAgICAgIHNldChmaXJzdFJl
2682
+ Y29yZCwgZmlyc3RSZWNvcmROYW1lLCBzZWNvbmRSZWNvcmQpOwogICAgICB9
2683
+ KTsKICAgIH0KICAgIGVsc2UgaWYodGhpcy5maXJzdFJlY29yZEtpbmQgPT09
2684
+ ICJoYXNNYW55Iil7CiAgICAgIGZpcnN0UmVjb3JkLnN1c3BlbmRSZWxhdGlv
2685
+ bnNoaXBPYnNlcnZlcnMoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgcmVsYXRp
2686
+ b25zaGlwID0gZ2V0KGZpcnN0UmVjb3JkLCBmaXJzdFJlY29yZE5hbWUpOwog
2687
+ ICAgICAgIGlmIChpc1ZhbHVlKHJlbGF0aW9uc2hpcCkpIHsgcmVsYXRpb25z
2688
+ aGlwLmFkZE9iamVjdChzZWNvbmRSZWNvcmQpOyB9CiAgICAgIH0pOwogICAg
2689
+ fQogIH0KCiAgdGhpcy5jb2FsZXNjZSgpOwp9OwoKRFMuUmVsYXRpb25zaGlw
2690
+ Q2hhbmdlUmVtb3ZlLnByb3RvdHlwZS5jaGFuZ2VUeXBlID0gInJlbW92ZSI7
2691
+ CkRTLlJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZS5wcm90b3R5cGUuc3luYyA9
2692
+ IGZ1bmN0aW9uKCkgewogIHZhciBzZWNvbmRSZWNvcmROYW1lID0gdGhpcy5n
2693
+ ZXRTZWNvbmRSZWNvcmROYW1lKCksCiAgICAgIGZpcnN0UmVjb3JkTmFtZSA9
2694
+ IHRoaXMuZ2V0Rmlyc3RSZWNvcmROYW1lKCksCiAgICAgIGZpcnN0UmVjb3Jk
2695
+ ID0gdGhpcy5nZXRGaXJzdFJlY29yZCgpLAogICAgICBzZWNvbmRSZWNvcmQg
2696
+ PSB0aGlzLmdldFNlY29uZFJlY29yZCgpOwoKICAvL0VtYmVyLmFzc2VydCgi
2697
+ WW91IHNwZWNpZmllZCBhIGhhc01hbnkgKCIgKyBoYXNNYW55TmFtZSArICIp
2698
+ IG9uICIgKyAoIWJlbG9uZ3NUb05hbWUgJiYgKG5ld1BhcmVudCB8fCBvbGRQ
2699
+ YXJlbnQgfHwgdGhpcy5sYXN0UGFyZW50KS5jb25zdHJ1Y3RvcikgKyAiIGJ1
2700
+ dCBkaWQgbm90IHNwZWNpZnkgYW4gaW52ZXJzZSBiZWxvbmdzVG8gb24gIiAr
2701
+ IGNoaWxkLmNvbnN0cnVjdG9yLCBiZWxvbmdzVG9OYW1lKTsKICAvL0VtYmVy
2702
+ LmFzc2VydCgiWW91IHNwZWNpZmllZCBhIGJlbG9uZ3NUbyAoIiArIGJlbG9u
2703
+ Z3NUb05hbWUgKyAiKSBvbiAiICsgY2hpbGQuY29uc3RydWN0b3IgKyAiIGJ1
2704
+ dCBkaWQgbm90IHNwZWNpZnkgYW4gaW52ZXJzZSBoYXNNYW55IG9uICIgKyAo
2705
+ IWhhc01hbnlOYW1lICYmIChuZXdQYXJlbnQgfHwgb2xkUGFyZW50IHx8IHRo
2706
+ aXMubGFzdFBhcmVudFJlY29yZCkuY29uc3RydWN0b3IpLCBoYXNNYW55TmFt
2707
+ ZSk7CgogIGlmIChzZWNvbmRSZWNvcmQgaW5zdGFuY2VvZiBEUy5Nb2RlbCAm
2708
+ JiBmaXJzdFJlY29yZCBpbnN0YW5jZW9mIERTLk1vZGVsKSB7CiAgICBpZih0
2709
+ aGlzLnNlY29uZFJlY29yZEtpbmQgPT09ICJiZWxvbmdzVG8iKXsKICAgICAg
2710
+ c2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVu
2711
+ Y3Rpb24oKXsKICAgICAgICBzZXQoc2Vjb25kUmVjb3JkLCBzZWNvbmRSZWNv
2712
+ cmROYW1lLCBudWxsKTsKICAgICAgfSk7CiAgICB9CiAgICBlbHNlIGlmKHRo
2713
+ aXMuc2Vjb25kUmVjb3JkS2luZCA9PT0gImhhc01hbnkiKXsKICAgICAgc2Vj
2714
+ b25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVuY3Rp
2715
+ b24oKXsKICAgICAgICB2YXIgcmVsYXRpb25zaGlwID0gZ2V0KHNlY29uZFJl
2716
+ Y29yZCwgc2Vjb25kUmVjb3JkTmFtZSk7CiAgICAgICAgaWYgKGlzVmFsdWUo
2717
+ cmVsYXRpb25zaGlwKSkgeyByZWxhdGlvbnNoaXAucmVtb3ZlT2JqZWN0KGZp
2718
+ cnN0UmVjb3JkKTsgfQogICAgICB9KTsKICAgIH0KICB9CgogIGlmIChmaXJz
2719
+ dFJlY29yZCBpbnN0YW5jZW9mIERTLk1vZGVsICYmIGdldChmaXJzdFJlY29y
2720
+ ZCwgZmlyc3RSZWNvcmROYW1lKSkgewogICAgaWYodGhpcy5maXJzdFJlY29y
2721
+ ZEtpbmQgPT09ICJiZWxvbmdzVG8iKXsKICAgICAgZmlyc3RSZWNvcmQuc3Vz
2722
+ cGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpewogICAgICAg
2723
+ IHNldChmaXJzdFJlY29yZCwgZmlyc3RSZWNvcmROYW1lLCBudWxsKTsKICAg
2724
+ ICAgfSk7CiAgICAgfQogICAgIGVsc2UgaWYodGhpcy5maXJzdFJlY29yZEtp
2725
+ bmQgPT09ICJoYXNNYW55Iil7CiAgICAgICBmaXJzdFJlY29yZC5zdXNwZW5k
2726
+ UmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7CiAgICAgICAgIHZh
2727
+ ciByZWxhdGlvbnNoaXAgPSBnZXQoZmlyc3RSZWNvcmQsIGZpcnN0UmVjb3Jk
2728
+ TmFtZSk7CiAgICAgICAgIGlmIChpc1ZhbHVlKHJlbGF0aW9uc2hpcCkpIHsg
2729
+ cmVsYXRpb25zaGlwLnJlbW92ZU9iamVjdChzZWNvbmRSZWNvcmQpOyB9CiAg
2730
+ ICAgIH0pOwogICAgfQogIH0KCiAgdGhpcy5jb2FsZXNjZSgpOwp9OwoKfSko
2731
+ KTsKCgoKKGZ1bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEK
2732
+ Ki8KCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKdmFyIGdldCA9IEVtYmVyLmdl
2733
+ dCwgc2V0ID0gRW1iZXIuc2V0LAogICAgaXNOb25lID0gRW1iZXIuaXNOb25l
2734
+ OwoKLyoqCiAgQG1vZHVsZSBlbWJlci1kYXRhCiovCgpmdW5jdGlvbiBhc3lu
2735
+ Y0JlbG9uZ3NUbyh0eXBlLCBvcHRpb25zLCBtZXRhKSB7CiAgcmV0dXJuIEVt
2736
+ YmVyLmNvbXB1dGVkKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgIHZhciBk
2737
+ YXRhID0gZ2V0KHRoaXMsICdkYXRhJyksCiAgICAgICAgc3RvcmUgPSBnZXQo
2738
+ dGhpcywgJ3N0b3JlJyk7CgogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
2739
+ IDIpIHsKICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkgYWRkIGEg
2740
+ JyIgKyB0eXBlICsgIicgcmVjb3JkIHRvIHRoaXMgcmVsYXRpb25zaGlwIiwg
2741
+ IXZhbHVlIHx8IHN0b3JlLm1vZGVsRm9yKHR5cGUpLmRldGVjdEluc3RhbmNl
2742
+ KHZhbHVlKSk7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8g
2743
+ bnVsbCA6IHZhbHVlOwogICAgfQoKICAgIHJldHVybiBzdG9yZS5mZXRjaFJl
2744
+ Y29yZChkYXRhW2tleV0pOwogIH0pLnByb3BlcnR5KCdkYXRhJykubWV0YSht
2745
+ ZXRhKTsKfQoKRFMuYmVsb25nc1RvID0gZnVuY3Rpb24odHlwZSwgb3B0aW9u
2746
+ cykgewogIEVtYmVyLmFzc2VydCgiVGhlIGZpcnN0IGFyZ3VtZW50IERTLmJl
2747
+ bG9uZ3NUbyBtdXN0IGJlIGEgbW9kZWwgdHlwZSBvciBzdHJpbmcsIGxpa2Ug
2748
+ RFMuYmVsb25nc1RvKEFwcC5QZXJzb24pIiwgISF0eXBlICYmICh0eXBlb2Yg
2749
+ dHlwZSA9PT0gJ3N0cmluZycgfHwgRFMuTW9kZWwuZGV0ZWN0KHR5cGUpKSk7
2750
+ CgogIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICB2YXIgbWV0YSA9IHsg
2751
+ dHlwZTogdHlwZSwgaXNSZWxhdGlvbnNoaXA6IHRydWUsIG9wdGlvbnM6IG9w
2752
+ dGlvbnMsIGtpbmQ6ICdiZWxvbmdzVG8nIH07CgogIGlmIChvcHRpb25zLmFz
2753
+ eW5jKSB7CiAgICByZXR1cm4gYXN5bmNCZWxvbmdzVG8odHlwZSwgb3B0aW9u
2754
+ cywgbWV0YSk7CiAgfQoKICByZXR1cm4gRW1iZXIuY29tcHV0ZWQoZnVuY3Rp
2755
+ b24oa2V5LCB2YWx1ZSkgewogICAgdmFyIGRhdGEgPSBnZXQodGhpcywgJ2Rh
2756
+ dGEnKSwKICAgICAgICBzdG9yZSA9IGdldCh0aGlzLCAnc3RvcmUnKSwgYmVs
2757
+ b25nc1RvLCB0eXBlQ2xhc3M7CgogICAgaWYgKHR5cGVvZiB0eXBlID09PSAn
2758
+ c3RyaW5nJykgewogICAgICBpZiAodHlwZS5pbmRleE9mKCIuIikgPT09IC0x
2759
+ KSB7CiAgICAgICAgdHlwZUNsYXNzID0gc3RvcmUubW9kZWxGb3IodHlwZSk7
2760
+ CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZUNsYXNzID0gZ2V0KEVtYmVy
2761
+ Lmxvb2t1cCwgdHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5
2762
+ cGVDbGFzcyA9IHR5cGU7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cy5sZW5n
2763
+ dGggPT09IDIpIHsKICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkg
2764
+ YWRkIGEgJyIgKyB0eXBlICsgIicgcmVjb3JkIHRvIHRoaXMgcmVsYXRpb25z
2765
+ aGlwIiwgIXZhbHVlIHx8IHR5cGVDbGFzcy5kZXRlY3RJbnN0YW5jZSh2YWx1
2766
+ ZSkpOwogICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwg
2767
+ OiB2YWx1ZTsKICAgIH0KCiAgICBiZWxvbmdzVG8gPSBkYXRhW2tleV07Cgog
2768
+ ICAgaWYgKGlzTm9uZShiZWxvbmdzVG8pKSB7IHJldHVybiBudWxsOyB9Cgog
2769
+ ICAgaWYgKGdldChiZWxvbmdzVG8sICdpc0VtcHR5JykpIHsKICAgICAgc3Rv
2770
+ cmUuZmV0Y2hSZWNvcmQoYmVsb25nc1RvKTsKICAgIH0KCiAgICByZXR1cm4g
2771
+ YmVsb25nc1RvOwogIH0pLnByb3BlcnR5KCdkYXRhJykubWV0YShtZXRhKTsK
2772
+ fTsKCi8qCiAgVGhlc2Ugb2JzZXJ2ZXJzIG9ic2VydmUgYWxsIGBiZWxvbmdz
2773
+ VG9gIHJlbGF0aW9uc2hpcHMgb24gdGhlIHJlY29yZC4gU2VlCiAgYHJlbGF0
2774
+ aW9uc2hpcHMvZXh0YCB0byBzZWUgaG93IHRoZXNlIG9ic2VydmVycyBnZXQg
2775
+ dGhlaXIgZGVwZW5kZW5jaWVzLgoKICBAY2xhc3MgTW9kZWwKICBAbmFtZXNw
2776
+ YWNlIERTCiovCkRTLk1vZGVsLnJlb3Blbih7CgogIC8qKgogICAgQG1ldGhv
2777
+ ZCBiZWxvbmdzVG9XaWxsQ2hhbmdlCiAgICBAcHJpdmF0ZQogICAgQHN0YXRp
2778
+ YwogICAgQHBhcmFtIHJlY29yZAogICAgQHBhcmFtIGtleQogICovCiAgYmVs
2779
+ b25nc1RvV2lsbENoYW5nZTogRW1iZXIuYmVmb3JlT2JzZXJ2ZXIoZnVuY3Rp
2780
+ b24ocmVjb3JkLCBrZXkpIHsKICAgIGlmIChnZXQocmVjb3JkLCAnaXNMb2Fk
2781
+ ZWQnKSkgewogICAgICB2YXIgb2xkUGFyZW50ID0gZ2V0KHJlY29yZCwga2V5
2782
+ KSwKICAgICAgICAgIHN0b3JlID0gZ2V0KHJlY29yZCwgJ3N0b3JlJyk7Cgog
2783
+ ICAgICBpZiAob2xkUGFyZW50KXsKICAgICAgICB2YXIgY2hhbmdlID0gRFMu
2784
+ UmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZShyZWNvcmQsIG9sZFBh
2785
+ cmVudCwgc3RvcmUsIHsga2V5OiBrZXksIGtpbmQ6ICJiZWxvbmdzVG8iLCBj
2786
+ aGFuZ2VUeXBlOiAicmVtb3ZlIiB9KTsKICAgICAgICBjaGFuZ2Uuc3luYygp
2787
+ OwogICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmNba2V5XSA9IGNoYW5nZTsK
2788
+ ICAgICAgfQogICAgfQogIH0pLAoKICAvKioKICAgIEBtZXRob2QgYmVsb25n
2789
+ c1RvRGlkQ2hhbmdlCiAgICBAcHJpdmF0ZQogICAgQHN0YXRpYwogICAgQHBh
2790
+ cmFtIHJlY29yZAogICAgQHBhcmFtIGtleQogICovCiAgYmVsb25nc1RvRGlk
2791
+ Q2hhbmdlOiBFbWJlci5pbW1lZGlhdGVPYnNlcnZlcihmdW5jdGlvbihyZWNv
2792
+ cmQsIGtleSkgewogICAgaWYgKGdldChyZWNvcmQsICdpc0xvYWRlZCcpKSB7
2793
+ CiAgICAgIHZhciBuZXdQYXJlbnQgPSBnZXQocmVjb3JkLCBrZXkpOwogICAg
2794
+ ICBpZihuZXdQYXJlbnQpewogICAgICAgIHZhciBzdG9yZSA9IGdldChyZWNv
2795
+ cmQsICdzdG9yZScpLAogICAgICAgICAgICBjaGFuZ2UgPSBEUy5SZWxhdGlv
2796
+ bnNoaXBDaGFuZ2UuY3JlYXRlQ2hhbmdlKHJlY29yZCwgbmV3UGFyZW50LCBz
2797
+ dG9yZSwgeyBrZXk6IGtleSwga2luZDogImJlbG9uZ3NUbyIsIGNoYW5nZVR5
2798
+ cGU6ICJhZGQiIH0pOwoKICAgICAgICBjaGFuZ2Uuc3luYygpOwogICAgICB9
2799
+ CiAgICB9CgogICAgZGVsZXRlIHRoaXMuX2NoYW5nZXNUb1N5bmNba2V5XTsK
2800
+ ICB9KQp9KTsKCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVs
2801
+ ZSBlbWJlci1kYXRhCiovCgp2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBF
2802
+ bWJlci5zZXQsIHNldFByb3BlcnRpZXMgPSBFbWJlci5zZXRQcm9wZXJ0aWVz
2803
+ Owp2YXIgZm9yRWFjaCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5mb3JFYWNo
2804
+ OwoKZnVuY3Rpb24gYXN5bmNIYXNNYW55KHR5cGUsIG9wdGlvbnMsIG1ldGEp
2805
+ IHsKICByZXR1cm4gRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1
2806
+ ZSkgewogICAgdmFyIHJlc29sdmVyID0gRW1iZXIuUlNWUC5kZWZlcigpOwoK
2807
+ ICAgIHZhciByZWxhdGlvbnNoaXAgPSBidWlsZFJlbGF0aW9uc2hpcCh0aGlz
2808
+ LCBrZXksIG9wdGlvbnMsIGZ1bmN0aW9uKHN0b3JlLCBkYXRhKSB7CiAgICAg
2809
+ IHZhciBsaW5rID0gZGF0YS5saW5rcyAmJiBkYXRhLmxpbmtzW2tleV07Cgog
2810
+ ICAgICBpZiAobGluaykgewogICAgICAgIHJldHVybiBzdG9yZS5maW5kSGFz
2811
+ TWFueSh0aGlzLCBsaW5rLCBtZXRhLCByZXNvbHZlcik7CiAgICAgIH0gZWxz
2812
+ ZSB7CiAgICAgICAgcmV0dXJuIHN0b3JlLmZpbmRNYW55KHRoaXMsIGRhdGFb
2813
+ a2V5XSwgbWV0YS50eXBlLCByZXNvbHZlcik7CiAgICAgIH0KICAgIH0pOwoK
2814
+ ICAgIHZhciBwcm9taXNlID0gcmVzb2x2ZXIucHJvbWlzZS50aGVuKGZ1bmN0
2815
+ aW9uKCkgewogICAgICByZXR1cm4gcmVsYXRpb25zaGlwOwogICAgfSk7Cgog
2816
+ ICAgcmV0dXJuIERTLlByb21pc2VBcnJheS5jcmVhdGUoeyBwcm9taXNlOiBw
2817
+ cm9taXNlIH0pOwogIH0pLnByb3BlcnR5KCdkYXRhJykubWV0YShtZXRhKTsK
2818
+ fQoKZnVuY3Rpb24gYnVpbGRSZWxhdGlvbnNoaXAocmVjb3JkLCBrZXksIG9w
2819
+ dGlvbnMsIGNhbGxiYWNrKSB7CiAgdmFyIHJlbHMgPSByZWNvcmQuX3JlbGF0
2820
+ aW9uc2hpcHM7CgogIGlmIChyZWxzW2tleV0pIHsgcmV0dXJuIHJlbHNba2V5
2821
+ XTsgfQoKICB2YXIgZGF0YSA9IGdldChyZWNvcmQsICdkYXRhJyksCiAgICAg
2822
+ IHN0b3JlID0gZ2V0KHJlY29yZCwgJ3N0b3JlJyk7CgogIHZhciByZWxhdGlv
2823
+ bnNoaXAgPSByZWxzW2tleV0gPSBjYWxsYmFjay5jYWxsKHJlY29yZCwgc3Rv
2824
+ cmUsIGRhdGEpOwoKICByZXR1cm4gc2V0UHJvcGVydGllcyhyZWxhdGlvbnNo
2825
+ aXAsIHsKICAgIG93bmVyOiByZWNvcmQsIG5hbWU6IGtleSwgaXNQb2x5bW9y
2826
+ cGhpYzogb3B0aW9ucy5wb2x5bW9ycGhpYwogIH0pOwp9CgpmdW5jdGlvbiBo
2827
+ YXNSZWxhdGlvbnNoaXAodHlwZSwgb3B0aW9ucykgewogIG9wdGlvbnMgPSBv
2828
+ cHRpb25zIHx8IHt9OwoKICB2YXIgbWV0YSA9IHsgdHlwZTogdHlwZSwgaXNS
2829
+ ZWxhdGlvbnNoaXA6IHRydWUsIG9wdGlvbnM6IG9wdGlvbnMsIGtpbmQ6ICdo
2830
+ YXNNYW55JyB9OwoKICBpZiAob3B0aW9ucy5hc3luYykgewogICAgcmV0dXJu
2831
+ IGFzeW5jSGFzTWFueSh0eXBlLCBvcHRpb25zLCBtZXRhKTsKICB9CgogIHJl
2832
+ dHVybiBFbWJlci5jb21wdXRlZChmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAg
2833
+ ICByZXR1cm4gYnVpbGRSZWxhdGlvbnNoaXAodGhpcywga2V5LCBvcHRpb25z
2834
+ LCBmdW5jdGlvbihzdG9yZSwgZGF0YSkgewogICAgICB2YXIgcmVjb3JkcyA9
2835
+ IGRhdGFba2V5XTsKICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbG9va2VkIHVw
2836
+ IHRoZSAnIiArIGtleSArICInIHJlbGF0aW9uc2hpcCBvbiAnIiArIHRoaXMg
2837
+ KyAiJyBidXQgc29tZSBvZiB0aGUgYXNzb2NpYXRlZCByZWNvcmRzIHdlcmUg
2838
+ bm90IGxvYWRlZC4gRWl0aGVyIG1ha2Ugc3VyZSB0aGV5IGFyZSBhbGwgbG9h
2839
+ ZGVkIHRvZ2V0aGVyIHdpdGggdGhlIHBhcmVudCByZWNvcmQsIG9yIHNwZWNp
2840
+ ZnkgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGlzIGFzeW5jIChgRFMuYXR0cih7
2841
+ IGFzeW5jOiB0cnVlIH0pYCkiLCBFbWJlci5BKHJlY29yZHMpLmV2ZXJ5UHJv
2842
+ cGVydHkoJ2lzRW1wdHknLCBmYWxzZSkpOwogICAgICByZXR1cm4gc3RvcmUu
2843
+ ZmluZE1hbnkodGhpcywgZGF0YVtrZXldLCBtZXRhLnR5cGUpOwogICAgfSk7
2844
+ CiAgfSkucHJvcGVydHkoJ2RhdGEnKS5tZXRhKG1ldGEpOwp9CgpEUy5oYXNN
2845
+ YW55ID0gZnVuY3Rpb24odHlwZSwgb3B0aW9ucykgewogIEVtYmVyLmFzc2Vy
2846
+ dCgiVGhlIHR5cGUgcGFzc2VkIHRvIERTLmhhc01hbnkgbXVzdCBiZSBkZWZp
2847
+ bmVkIiwgISF0eXBlKTsKICByZXR1cm4gaGFzUmVsYXRpb25zaGlwKHR5cGUs
2848
+ IG9wdGlvbnMpOwp9OwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewp2YXIgZ2V0
2849
+ ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7CgovKioKICBAbW9kdWxl
2850
+ IGVtYmVyLWRhdGEKKi8KCi8qCiAgVGhpcyBmaWxlIGRlZmluZXMgc2V2ZXJh
2851
+ bCBleHRlbnNpb25zIHRvIHRoZSBiYXNlIGBEUy5Nb2RlbGAgY2xhc3MgdGhh
2852
+ dAogIGFkZCBzdXBwb3J0IGZvciBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXBz
2853
+ LgoqLwoKLyoqCiAgQGNsYXNzIE1vZGVsCiAgQG5hbWVzcGFjZSBEUwoqLwpE
2854
+ Uy5Nb2RlbC5yZW9wZW4oewoKICAvKioKICAgIFRoaXMgRW1iZXIuanMgaG9v
2855
+ ayBhbGxvd3MgYW4gb2JqZWN0IHRvIGJlIG5vdGlmaWVkIHdoZW4gYSBwcm9w
2856
+ ZXJ0eQogICAgaXMgZGVmaW5lZC4KCiAgICBJbiB0aGlzIGNhc2UsIHdlIHVz
2857
+ ZSBpdCB0byBiZSBub3RpZmllZCB3aGVuIGFuIEVtYmVyIERhdGEgdXNlciBk
2858
+ ZWZpbmVzIGEKICAgIGJlbG9uZ3MtdG8gcmVsYXRpb25zaGlwLiBJbiB0aGF0
2859
+ IGNhc2UsIHdlIG5lZWQgdG8gc2V0IHVwIG9ic2VydmVycyBmb3IKICAgIGVh
2860
+ Y2ggb25lLCBhbGxvd2luZyB1cyB0byB0cmFjayByZWxhdGlvbnNoaXAgY2hh
2861
+ bmdlcyBhbmQgYXV0b21hdGljYWxseQogICAgcmVmbGVjdCBjaGFuZ2VzIGlu
2862
+ IHRoZSBpbnZlcnNlIGhhcy1tYW55IGFycmF5LgoKICAgIFRoaXMgaG9vayBw
2863
+ YXNzZXMgdGhlIGNsYXNzIGJlaW5nIHNldCB1cCwgYXMgd2VsbCBhcyB0aGUg
2864
+ a2V5IGFuZCB2YWx1ZQogICAgYmVpbmcgZGVmaW5lZC4gU28sIGZvciBleGFt
2865
+ cGxlLCB3aGVuIHRoZSB1c2VyIGRvZXMgdGhpczoKCiAgICAgIERTLk1vZGVs
2866
+ LmV4dGVuZCh7CiAgICAgICAgcGFyZW50OiBEUy5iZWxvbmdzVG8oQXBwLlVz
2867
+ ZXIpCiAgICAgIH0pOwoKICAgIFRoaXMgaG9vayB3b3VsZCBiZSBjYWxsZWQg
2868
+ d2l0aCAicGFyZW50IiBhcyB0aGUga2V5IGFuZCB0aGUgY29tcHV0ZWQKICAg
2869
+ IHByb3BlcnR5IHJldHVybmVkIGJ5IGBEUy5iZWxvbmdzVG9gIGFzIHRoZSB2
2870
+ YWx1ZS4KCiAgICBAbWV0aG9kIGRpZERlZmluZVByb3BlcnR5CiAgICBAcGFy
2871
+ YW0gcHJvdG8KICAgIEBwYXJhbSBrZXkKICAgIEBwYXJhbSB2YWx1ZQogICov
2872
+ CiAgZGlkRGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKHByb3RvLCBrZXksIHZh
2873
+ bHVlKSB7CiAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgYmVpbmcgc2V0IGlz
2874
+ IGEgY29tcHV0ZWQgcHJvcGVydHkuCiAgICBpZiAodmFsdWUgaW5zdGFuY2Vv
2875
+ ZiBFbWJlci5EZXNjcmlwdG9yKSB7CgogICAgICAvLyBJZiBpdCBpcywgZ2V0
2876
+ IHRoZSBtZXRhZGF0YSBmb3IgdGhlIHJlbGF0aW9uc2hpcC4gVGhpcyBpcwog
2877
+ ICAgICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGBEUy5iZWxvbmdzVG9gIGhlbHBl
2878
+ ciB3aGVuIGl0IGlzIGNyZWF0aW5nCiAgICAgIC8vIHRoZSBjb21wdXRlZCBw
2879
+ cm9wZXJ0eS4KICAgICAgdmFyIG1ldGEgPSB2YWx1ZS5tZXRhKCk7CgogICAg
2880
+ ICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCAmJiBtZXRhLmtpbmQgPT09ICdi
2881
+ ZWxvbmdzVG8nKSB7CiAgICAgICAgRW1iZXIuYWRkT2JzZXJ2ZXIocHJvdG8s
2882
+ IGtleSwgbnVsbCwgJ2JlbG9uZ3NUb0RpZENoYW5nZScpOwogICAgICAgIEVt
2883
+ YmVyLmFkZEJlZm9yZU9ic2VydmVyKHByb3RvLCBrZXksIG51bGwsICdiZWxv
2884
+ bmdzVG9XaWxsQ2hhbmdlJyk7CiAgICAgIH0KCiAgICAgIG1ldGEucGFyZW50
2885
+ VHlwZSA9IHByb3RvLmNvbnN0cnVjdG9yOwogICAgfQogIH0KfSk7CgovKgog
2886
+ IFRoZXNlIERTLk1vZGVsIGV4dGVuc2lvbnMgYWRkIGNsYXNzIG1ldGhvZHMg
2887
+ dGhhdCBwcm92aWRlIHJlbGF0aW9uc2hpcAogIGludHJvc3BlY3Rpb24gYWJp
2888
+ bGl0aWVzIGFib3V0IHJlbGF0aW9uc2hpcHMuCgogIEEgbm90ZSBhYm91dCB0
2889
+ aGUgY29tcHV0ZWQgcHJvcGVydGllcyBjb250YWluZWQgaGVyZToKCiAgKipU
2890
+ aGVzZSBwcm9wZXJ0aWVzIGFyZSBlZmZlY3RpdmVseSBzZWFsZWQgb25jZSBj
2891
+ YWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLioqCiAgVG8gYXZvaWQgcmVwZWF0
2892
+ ZWRseSBkb2luZyBleHBlbnNpdmUgaXRlcmF0aW9uIG92ZXIgYSBtb2RlbCdz
2893
+ IGZpZWxkcywgdGhlc2UKICB2YWx1ZXMgYXJlIGNvbXB1dGVkIG9uY2UgYW5k
2894
+ IHRoZW4gY2FjaGVkIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBydW50aW1l
2895
+ IG9mCiAgeW91ciBhcHBsaWNhdGlvbi4KCiAgSWYgeW91ciBhcHBsaWNhdGlv
2896
+ biBuZWVkcyB0byBtb2RpZnkgYSBjbGFzcyBhZnRlciBpdHMgaW5pdGlhbCBk
2897
+ ZWZpbml0aW9uCiAgKGZvciBleGFtcGxlLCB1c2luZyBgcmVvcGVuKClgIHRv
2898
+ IGFkZCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMpLCBtYWtlIHN1cmUgeW91CiAg
2899
+ ZG8gaXQgYmVmb3JlIHVzaW5nIHlvdXIgbW9kZWwgd2l0aCB0aGUgc3RvcmUs
2900
+ IHdoaWNoIHVzZXMgdGhlc2UgcHJvcGVydGllcwogIGV4dGVuc2l2ZWx5Lgoq
2901
+ LwoKRFMuTW9kZWwucmVvcGVuQ2xhc3MoewogIC8qKgogICAgRm9yIGEgZ2l2
2902
+ ZW4gcmVsYXRpb25zaGlwIG5hbWUsIHJldHVybnMgdGhlIG1vZGVsIHR5cGUg
2903
+ b2YgdGhlIHJlbGF0aW9uc2hpcC4KCiAgICBGb3IgZXhhbXBsZSwgaWYgeW91
2904
+ IGRlZmluZSBhIG1vZGVsIGxpa2UgdGhpczoKCiAgICAgICAgQXBwLlBvc3Qg
2905
+ PSBEUy5Nb2RlbC5leHRlbmQoewogICAgICAgICAgY29tbWVudHM6IERTLmhh
2906
+ c01hbnkoQXBwLkNvbW1lbnQpCiAgICAgICAgfSk7CgogICAgQ2FsbGluZyBg
2907
+ QXBwLlBvc3QudHlwZUZvclJlbGF0aW9uc2hpcCgnY29tbWVudHMnKWAgd2ls
2908
+ bCByZXR1cm4gYEFwcC5Db21tZW50YC4KCiAgICBAbWV0aG9kIHR5cGVGb3JS
2909
+ ZWxhdGlvbnNoaXAKICAgIEBzdGF0aWMKICAgIEBwYXJhbSB7U3RyaW5nfSBu
2910
+ YW1lIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAKICAgIEByZXR1cm4g
2911
+ e3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0aGUgdHlwZSBvZiB0aGUgcmVsYXRp
2912
+ b25zaGlwLCBvciB1bmRlZmluZWQKICAqLwogIHR5cGVGb3JSZWxhdGlvbnNo
2913
+ aXA6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciByZWxhdGlvbnNoaXAgPSBn
2914
+ ZXQodGhpcywgJ3JlbGF0aW9uc2hpcHNCeU5hbWUnKS5nZXQobmFtZSk7CiAg
2915
+ ICByZXR1cm4gcmVsYXRpb25zaGlwICYmIHJlbGF0aW9uc2hpcC50eXBlOwog
2916
+ IH0sCgogIGludmVyc2VGb3I6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBp
2917
+ bnZlcnNlVHlwZSA9IHRoaXMudHlwZUZvclJlbGF0aW9uc2hpcChuYW1lKTsK
2918
+ CiAgICBpZiAoIWludmVyc2VUeXBlKSB7IHJldHVybiBudWxsOyB9CgogICAg
2919
+ dmFyIG9wdGlvbnMgPSB0aGlzLm1ldGFGb3JQcm9wZXJ0eShuYW1lKS5vcHRp
2920
+ b25zOwoKICAgIGlmIChvcHRpb25zLmludmVyc2UgPT09IG51bGwpIHsgcmV0
2921
+ dXJuIG51bGw7IH0KICAgIAogICAgdmFyIGludmVyc2VOYW1lLCBpbnZlcnNl
2922
+ S2luZDsKCiAgICBpZiAob3B0aW9ucy5pbnZlcnNlKSB7CiAgICAgIGludmVy
2923
+ c2VOYW1lID0gb3B0aW9ucy5pbnZlcnNlOwogICAgICBpbnZlcnNlS2luZCA9
2924
+ IEVtYmVyLmdldChpbnZlcnNlVHlwZSwgJ3JlbGF0aW9uc2hpcHNCeU5hbWUn
2925
+ KS5nZXQoaW52ZXJzZU5hbWUpLmtpbmQ7CiAgICB9IGVsc2UgewogICAgICB2
2926
+ YXIgcG9zc2libGVSZWxhdGlvbnNoaXBzID0gZmluZFBvc3NpYmxlSW52ZXJz
2927
+ ZXModGhpcywgaW52ZXJzZVR5cGUpOwoKICAgICAgaWYgKHBvc3NpYmxlUmVs
2928
+ YXRpb25zaGlwcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIG51bGw7IH0KCiAg
2929
+ ICAgIEVtYmVyLmFzc2VydCgiWW91IGRlZmluZWQgdGhlICciICsgbmFtZSAr
2930
+ ICInIHJlbGF0aW9uc2hpcCBvbiAiICsgdGhpcyArICIsIGJ1dCBtdWx0aXBs
2931
+ ZSBwb3NzaWJsZSBpbnZlcnNlIHJlbGF0aW9uc2hpcHMgb2YgdHlwZSAiICsg
2932
+ dGhpcyArICIgd2VyZSBmb3VuZCBvbiAiICsgaW52ZXJzZVR5cGUgKyAiLiIs
2933
+ IHBvc3NpYmxlUmVsYXRpb25zaGlwcy5sZW5ndGggPT09IDEpOwoKICAgICAg
2934
+ aW52ZXJzZU5hbWUgPSBwb3NzaWJsZVJlbGF0aW9uc2hpcHNbMF0ubmFtZTsK
2935
+ ICAgICAgaW52ZXJzZUtpbmQgPSBwb3NzaWJsZVJlbGF0aW9uc2hpcHNbMF0u
2936
+ a2luZDsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kUG9zc2libGVJbnZlcnNl
2937
+ cyh0eXBlLCBpbnZlcnNlVHlwZSwgcG9zc2libGVSZWxhdGlvbnNoaXBzKSB7
2938
+ CiAgICAgIHBvc3NpYmxlUmVsYXRpb25zaGlwcyA9IHBvc3NpYmxlUmVsYXRp
2939
+ b25zaGlwcyB8fCBbXTsKCiAgICAgIHZhciByZWxhdGlvbnNoaXBNYXAgPSBn
2940
+ ZXQoaW52ZXJzZVR5cGUsICdyZWxhdGlvbnNoaXBzJyk7CiAgICAgIGlmICgh
2941
+ cmVsYXRpb25zaGlwTWFwKSB7IHJldHVybjsgfQoKICAgICAgdmFyIHJlbGF0
2942
+ aW9uc2hpcHMgPSByZWxhdGlvbnNoaXBNYXAuZ2V0KHR5cGUpOwogICAgICBp
2943
+ ZiAocmVsYXRpb25zaGlwcykgewogICAgICAgIHBvc3NpYmxlUmVsYXRpb25z
2944
+ aGlwcy5wdXNoLmFwcGx5KHBvc3NpYmxlUmVsYXRpb25zaGlwcywgcmVsYXRp
2945
+ b25zaGlwTWFwLmdldCh0eXBlKSk7CiAgICAgIH0KCiAgICAgIGlmICh0eXBl
2946
+ LnN1cGVyY2xhc3MpIHsKICAgICAgICBmaW5kUG9zc2libGVJbnZlcnNlcyh0
2947
+ eXBlLnN1cGVyY2xhc3MsIGludmVyc2VUeXBlLCBwb3NzaWJsZVJlbGF0aW9u
2948
+ c2hpcHMpOwogICAgICB9CgogICAgICByZXR1cm4gcG9zc2libGVSZWxhdGlv
2949
+ bnNoaXBzOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHR5cGU6IGludmVy
2950
+ c2VUeXBlLAogICAgICBuYW1lOiBpbnZlcnNlTmFtZSwKICAgICAga2luZDog
2951
+ aW52ZXJzZUtpbmQKICAgIH07CiAgfSwKCiAgLyoqCiAgICBUaGUgbW9kZWwn
2952
+ cyByZWxhdGlvbnNoaXBzIGFzIGEgbWFwLCBrZXllZCBvbiB0aGUgdHlwZSBv
2953
+ ZiB0aGUKICAgIHJlbGF0aW9uc2hpcC4gVGhlIHZhbHVlIG9mIGVhY2ggZW50
2954
+ cnkgaXMgYW4gYXJyYXkgY29udGFpbmluZyBhIGRlc2NyaXB0b3IKICAgIGZv
2955
+ ciBlYWNoIHJlbGF0aW9uc2hpcCB3aXRoIHRoYXQgdHlwZSwgZGVzY3JpYmlu
2956
+ ZyB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwCiAgICBhcyB3ZWxsIGFz
2957
+ IHRoZSB0eXBlLgoKICAgIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93
2958
+ aW5nIG1vZGVsIGRlZmluaXRpb246CgogICAgICAgIEFwcC5CbG9nID0gRFMu
2959
+ TW9kZWwuZXh0ZW5kKHsKICAgICAgICAgIHVzZXJzOiBEUy5oYXNNYW55KEFw
2960
+ cC5Vc2VyKSwKICAgICAgICAgIG93bmVyOiBEUy5iZWxvbmdzVG8oQXBwLlVz
2961
+ ZXIpLAogICAgICAgICAgcG9zdHM6IERTLmhhc01hbnkoQXBwLlBvc3QpCiAg
2962
+ ICAgICAgfSk7CgogICAgVGhpcyBjb21wdXRlZCBwcm9wZXJ0eSB3b3VsZCBy
2963
+ ZXR1cm4gYSBtYXAgZGVzY3JpYmluZyB0aGVzZQogICAgcmVsYXRpb25zaGlw
2964
+ cywgbGlrZSB0aGlzOgoKICAgICAgICB2YXIgcmVsYXRpb25zaGlwcyA9IEVt
2965
+ YmVyLmdldChBcHAuQmxvZywgJ3JlbGF0aW9uc2hpcHMnKTsKICAgICAgICBy
2966
+ ZWxhdGlvbnNoaXBzLmdldChBcHAuVXNlcik7CiAgICAgICAgLy89PiBbIHsg
2967
+ bmFtZTogJ3VzZXJzJywga2luZDogJ2hhc01hbnknIH0sCiAgICAgICAgLy8g
2968
+ ICAgIHsgbmFtZTogJ293bmVyJywga2luZDogJ2JlbG9uZ3NUbycgfSBdCiAg
2969
+ ICAgICAgcmVsYXRpb25zaGlwcy5nZXQoQXBwLlBvc3QpOwogICAgICAgIC8v
2970
+ PT4gWyB7IG5hbWU6ICdwb3N0cycsIGtpbmQ6ICdoYXNNYW55JyB9IF0KCiAg
2971
+ ICBAcHJvcGVydHkgcmVsYXRpb25zaGlwcwogICAgQHN0YXRpYwogICAgQHR5
2972
+ cGUgRW1iZXIuTWFwCiAgICBAcmVhZE9ubHkKICAqLwogIHJlbGF0aW9uc2hp
2973
+ cHM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewogICAgdmFyIG1hcCA9
2974
+ IG5ldyBFbWJlci5NYXBXaXRoRGVmYXVsdCh7CiAgICAgIGRlZmF1bHRWYWx1
2975
+ ZTogZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfQogICAgfSk7CgogICAgLy8g
2976
+ TG9vcCB0aHJvdWdoIGVhY2ggY29tcHV0ZWQgcHJvcGVydHkgb24gdGhlIGNs
2977
+ YXNzCiAgICB0aGlzLmVhY2hDb21wdXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5h
2978
+ bWUsIG1ldGEpIHsKCiAgICAgIC8vIElmIHRoZSBjb21wdXRlZCBwcm9wZXJ0
2979
+ eSBpcyBhIHJlbGF0aW9uc2hpcCwgYWRkCiAgICAgIC8vIGl0IHRvIHRoZSBt
2980
+ YXAuCiAgICAgIGlmIChtZXRhLmlzUmVsYXRpb25zaGlwKSB7CiAgICAgICAg
2981
+ aWYgKHR5cGVvZiBtZXRhLnR5cGUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAg
2982
+ ICBtZXRhLnR5cGUgPSBFbWJlci5nZXQoRW1iZXIubG9va3VwLCBtZXRhLnR5
2983
+ cGUpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlbGF0aW9uc2hpcHNGb3JU
2984
+ eXBlID0gbWFwLmdldChtZXRhLnR5cGUpOwoKICAgICAgICByZWxhdGlvbnNo
2985
+ aXBzRm9yVHlwZS5wdXNoKHsgbmFtZTogbmFtZSwga2luZDogbWV0YS5raW5k
2986
+ IH0pOwogICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gbWFwOwogIH0pLAoK
2987
+ ICAvKioKICAgIEEgaGFzaCBjb250YWluaW5nIGxpc3RzIG9mIHRoZSBtb2Rl
2988
+ bCdzIHJlbGF0aW9uc2hpcHMsIGdyb3VwZWQKICAgIGJ5IHRoZSByZWxhdGlv
2989
+ bnNoaXAga2luZC4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgbW9kZWwgd2l0aCB0
2990
+ aGlzCiAgICBkZWZpbml0aW9uOgoKICAgICAgICBBcHAuQmxvZyA9IERTLk1v
2991
+ ZGVsLmV4dGVuZCh7CiAgICAgICAgICB1c2VyczogRFMuaGFzTWFueShBcHAu
2992
+ VXNlciksCiAgICAgICAgICBvd25lcjogRFMuYmVsb25nc1RvKEFwcC5Vc2Vy
2993
+ KSwKCiAgICAgICAgICBwb3N0czogRFMuaGFzTWFueShBcHAuUG9zdCkKICAg
2994
+ ICAgICB9KTsKCiAgICBUaGlzIHByb3BlcnR5IHdvdWxkIGNvbnRhaW4gdGhl
2995
+ IGZvbGxvd2luZzoKCiAgICAgICB2YXIgcmVsYXRpb25zaGlwTmFtZXMgPSBF
2996
+ bWJlci5nZXQoQXBwLkJsb2csICdyZWxhdGlvbnNoaXBOYW1lcycpOwogICAg
2997
+ ICAgcmVsYXRpb25zaGlwTmFtZXMuaGFzTWFueTsKICAgICAgIC8vPT4gWyd1
2998
+ c2VycycsICdwb3N0cyddCiAgICAgICByZWxhdGlvbnNoaXBOYW1lcy5iZWxv
2999
+ bmdzVG87CiAgICAgICAvLz0+IFsnb3duZXInXQoKICAgIEBwcm9wZXJ0eSBy
3000
+ ZWxhdGlvbnNoaXBOYW1lcwogICAgQHN0YXRpYwogICAgQHR5cGUgT2JqZWN0
3001
+ CiAgICBAcmVhZE9ubHkKICAqLwogIHJlbGF0aW9uc2hpcE5hbWVzOiBFbWJl
3002
+ ci5jb21wdXRlZChmdW5jdGlvbigpIHsKICAgIHZhciBuYW1lcyA9IHsgaGFz
3003
+ TWFueTogW10sIGJlbG9uZ3NUbzogW10gfTsKCiAgICB0aGlzLmVhY2hDb21w
3004
+ dXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKICAgICAgaWYg
3005
+ KG1ldGEuaXNSZWxhdGlvbnNoaXApIHsKICAgICAgICBuYW1lc1ttZXRhLmtp
3006
+ bmRdLnB1c2gobmFtZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBu
3007
+ YW1lczsKICB9KSwKCiAgLyoqCiAgICBBbiBhcnJheSBvZiB0eXBlcyBkaXJl
3008
+ Y3RseSByZWxhdGVkIHRvIGEgbW9kZWwuIEVhY2ggdHlwZSB3aWxsIGJlCiAg
3009
+ ICBpbmNsdWRlZCBvbmNlLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2Yg
3010
+ cmVsYXRpb25zaGlwcyBpdCBoYXMgd2l0aAogICAgdGhlIG1vZGVsLgoKICAg
3011
+ IEZvciBleGFtcGxlLCBnaXZlbiBhIG1vZGVsIHdpdGggdGhpcyBkZWZpbml0
3012
+ aW9uOgoKICAgICAgICBBcHAuQmxvZyA9IERTLk1vZGVsLmV4dGVuZCh7CiAg
3013
+ ICAgICAgICB1c2VyczogRFMuaGFzTWFueShBcHAuVXNlciksCiAgICAgICAg
3014
+ ICBvd25lcjogRFMuYmVsb25nc1RvKEFwcC5Vc2VyKSwKICAgICAgICAgIHBv
3015
+ c3RzOiBEUy5oYXNNYW55KEFwcC5Qb3N0KQogICAgICAgIH0pOwoKICAgIFRo
3016
+ aXMgcHJvcGVydHkgd291bGQgY29udGFpbiB0aGUgZm9sbG93aW5nOgoKICAg
3017
+ ICAgIHZhciByZWxhdGVkVHlwZXMgPSBFbWJlci5nZXQoQXBwLkJsb2csICdy
3018
+ ZWxhdGVkVHlwZXMnKTsKICAgICAgIC8vPT4gWyBBcHAuVXNlciwgQXBwLlBv
3019
+ c3QgXQoKICAgIEBwcm9wZXJ0eSByZWxhdGVkVHlwZXMKICAgIEBzdGF0aWMK
3020
+ ICAgIEB0eXBlIEVtYmVyLkFycmF5CiAgICBAcmVhZE9ubHkKICAqLwogIHJl
3021
+ bGF0ZWRUeXBlczogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7CiAgICB2
3022
+ YXIgdHlwZSwKICAgICAgICB0eXBlcyA9IEVtYmVyLkEoKTsKCiAgICAvLyBM
3023
+ b29wIHRocm91Z2ggZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBvbiB0aGUgY2xh
3024
+ c3MsCiAgICAvLyBhbmQgY3JlYXRlIGFuIGFycmF5IG9mIHRoZSB1bmlxdWUg
3025
+ dHlwZXMgaW52b2x2ZWQKICAgIC8vIGluIHJlbGF0aW9uc2hpcHMKICAgIHRo
3026
+ aXMuZWFjaENvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24obmFtZSwgbWV0YSkg
3027
+ ewogICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewogICAgICAgIHR5
3028
+ cGUgPSBtZXRhLnR5cGU7CgogICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0g
3029
+ J3N0cmluZycpIHsKICAgICAgICAgIHR5cGUgPSBnZXQodGhpcywgdHlwZSwg
3030
+ ZmFsc2UpIHx8IGdldChFbWJlci5sb29rdXAsIHR5cGUpOwogICAgICAgIH0K
3031
+ CiAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEgaGFzTWFu
3032
+ eSAoIiArIG1ldGEudHlwZSArICIpIG9uICIgKyBtZXRhLnBhcmVudFR5cGUg
3033
+ KyAiIGJ1dCAiICsgbWV0YS50eXBlICsgIiB3YXMgbm90IGZvdW5kLiIsICB0
3034
+ eXBlKTsKCiAgICAgICAgaWYgKCF0eXBlcy5jb250YWlucyh0eXBlKSkgewog
3035
+ ICAgICAgICAgRW1iZXIuYXNzZXJ0KCJUcnlpbmcgdG8gc2lkZWxvYWQgIiAr
3036
+ IG5hbWUgKyAiIG9uICIgKyB0aGlzLnRvU3RyaW5nKCkgKyAiIGJ1dCB0aGUg
3037
+ dHlwZSBkb2Vzbid0IGV4aXN0LiIsICEhdHlwZSk7CiAgICAgICAgICB0eXBl
3038
+ cy5wdXNoKHR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAg
3039
+ cmV0dXJuIHR5cGVzOwogIH0pLAoKICAvKioKICAgIEEgbWFwIHdob3NlIGtl
3040
+ eXMgYXJlIHRoZSByZWxhdGlvbnNoaXBzIG9mIGEgbW9kZWwgYW5kIHdob3Nl
3041
+ IHZhbHVlcyBhcmUKICAgIHJlbGF0aW9uc2hpcCBkZXNjcmlwdG9ycy4KCiAg
3042
+ ICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBtb2RlbCB3aXRoIHRoaXMKICAgIGRl
3043
+ ZmluaXRpb246CgogICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwuZXh0ZW5k
3044
+ KHsKICAgICAgICAgIHVzZXJzOiBEUy5oYXNNYW55KEFwcC5Vc2VyKSwKICAg
3045
+ ICAgICAgIG93bmVyOiBEUy5iZWxvbmdzVG8oQXBwLlVzZXIpLAoKICAgICAg
3046
+ ICAgIHBvc3RzOiBEUy5oYXNNYW55KEFwcC5Qb3N0KQogICAgICAgIH0pOwoK
3047
+ ICAgIFRoaXMgcHJvcGVydHkgd291bGQgY29udGFpbiB0aGUgZm9sbG93aW5n
3048
+ OgoKICAgICAgIHZhciByZWxhdGlvbnNoaXBzQnlOYW1lID0gRW1iZXIuZ2V0
3049
+ KEFwcC5CbG9nLCAncmVsYXRpb25zaGlwc0J5TmFtZScpOwogICAgICAgcmVs
3050
+ YXRpb25zaGlwc0J5TmFtZS5nZXQoJ3VzZXJzJyk7CiAgICAgICAvLz0+IHsg
3051
+ a2V5OiAndXNlcnMnLCBraW5kOiAnaGFzTWFueScsIHR5cGU6IEFwcC5Vc2Vy
3052
+ IH0KICAgICAgIHJlbGF0aW9uc2hpcHNCeU5hbWUuZ2V0KCdvd25lcicpOwog
3053
+ ICAgICAgLy89PiB7IGtleTogJ293bmVyJywga2luZDogJ2JlbG9uZ3NUbycs
3054
+ IHR5cGU6IEFwcC5Vc2VyIH0KCiAgICBAcHJvcGVydHkgcmVsYXRpb25zaGlw
3055
+ c0J5TmFtZQogICAgQHN0YXRpYwogICAgQHR5cGUgRW1iZXIuTWFwCiAgICBA
3056
+ cmVhZE9ubHkKICAqLwogIHJlbGF0aW9uc2hpcHNCeU5hbWU6IEVtYmVyLmNv
3057
+ bXB1dGVkKGZ1bmN0aW9uKCkgewogICAgdmFyIG1hcCA9IEVtYmVyLk1hcC5j
3058
+ cmVhdGUoKSwgdHlwZTsKCiAgICB0aGlzLmVhY2hDb21wdXRlZFByb3BlcnR5
3059
+ KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKICAgICAgaWYgKG1ldGEuaXNSZWxh
3060
+ dGlvbnNoaXApIHsKICAgICAgICBtZXRhLmtleSA9IG5hbWU7CiAgICAgICAg
3061
+ dHlwZSA9IG1ldGEudHlwZTsKCiAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09
3062
+ PSAnc3RyaW5nJykgewogICAgICAgICAgbWV0YS50eXBlID0gdGhpcy5zdG9y
3063
+ ZS5tb2RlbEZvcih0eXBlKTsKICAgICAgICB9CgogICAgICAgIG1hcC5zZXQo
3064
+ bmFtZSwgbWV0YSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBtYXA7
3065
+ CiAgfSksCgogIC8qKgogICAgQSBtYXAgd2hvc2Uga2V5cyBhcmUgdGhlIGZp
3066
+ ZWxkcyBvZiB0aGUgbW9kZWwgYW5kIHdob3NlIHZhbHVlcyBhcmUgc3RyaW5n
3067
+ cwogICAgZGVzY3JpYmluZyB0aGUga2luZCBvZiB0aGUgZmllbGQuIEEgbW9k
3068
+ ZWwncyBmaWVsZHMgYXJlIHRoZSB1bmlvbiBvZiBhbGwgb2YgaXRzCiAgICBh
3069
+ dHRyaWJ1dGVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgIEZvciBleGFtcGxl
3070
+ OgoKICAgICAgICBBcHAuQmxvZyA9IERTLk1vZGVsLmV4dGVuZCh7CiAgICAg
3071
+ ICAgICB1c2VyczogRFMuaGFzTWFueShBcHAuVXNlciksCiAgICAgICAgICBv
3072
+ d25lcjogRFMuYmVsb25nc1RvKEFwcC5Vc2VyKSwKCiAgICAgICAgICBwb3N0
3073
+ czogRFMuaGFzTWFueShBcHAuUG9zdCksCgogICAgICAgICAgdGl0bGU6IERT
3074
+ LmF0dHIoJ3N0cmluZycpCiAgICAgICAgfSk7CgogICAgICAgIHZhciBmaWVs
3075
+ ZHMgPSBFbWJlci5nZXQoQXBwLkJsb2csICdmaWVsZHMnKTsKICAgICAgICBm
3076
+ aWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCwga2luZCkgewogICAgICAg
3077
+ ICAgY29uc29sZS5sb2coZmllbGQsIGtpbmQpOwogICAgICAgIH0pOwoKICAg
3078
+ ICAgICAvLyBwcmludHM6CiAgICAgICAgLy8gdXNlcnMsIGhhc01hbnkKICAg
3079
+ ICAgICAvLyBvd25lciwgYmVsb25nc1RvCiAgICAgICAgLy8gcG9zdHMsIGhh
3080
+ c01hbnkKICAgICAgICAvLyB0aXRsZSwgYXR0cmlidXRlCgogICAgQHByb3Bl
3081
+ cnR5IGZpZWxkcwogICAgQHN0YXRpYwogICAgQHR5cGUgRW1iZXIuTWFwCiAg
3082
+ ICBAcmVhZE9ubHkKICAqLwogIGZpZWxkczogRW1iZXIuY29tcHV0ZWQoZnVu
3083
+ Y3Rpb24oKSB7CiAgICB2YXIgbWFwID0gRW1iZXIuTWFwLmNyZWF0ZSgpOwoK
3084
+ ICAgIHRoaXMuZWFjaENvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24obmFtZSwg
3085
+ bWV0YSkgewogICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewogICAg
3086
+ ICAgIG1hcC5zZXQobmFtZSwgbWV0YS5raW5kKTsKICAgICAgfSBlbHNlIGlm
3087
+ IChtZXRhLmlzQXR0cmlidXRlKSB7CiAgICAgICAgbWFwLnNldChuYW1lLCAn
3088
+ YXR0cmlidXRlJyk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBtYXA7
3089
+ CiAgfSksCgogIC8qKgogICAgR2l2ZW4gYSBjYWxsYmFjaywgaXRlcmF0ZXMg
3090
+ b3ZlciBlYWNoIG9mIHRoZSByZWxhdGlvbnNoaXBzIGluIHRoZSBtb2RlbCwK
3091
+ ICAgIGludm9raW5nIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBuYW1lIG9mIGVh
3092
+ Y2ggcmVsYXRpb25zaGlwIGFuZCBpdHMgcmVsYXRpb25zaGlwCiAgICBkZXNj
3093
+ cmlwdG9yLgoKICAgIEBtZXRob2QgZWFjaFJlbGF0aW9uc2hpcAogICAgQHN0
3094
+ YXRpYwogICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgdGhlIGNhbGxi
3095
+ YWNrIHRvIGludm9rZQogICAgQHBhcmFtIHthbnl9IGJpbmRpbmcgdGhlIHZh
3096
+ bHVlIHRvIHdoaWNoIHRoZSBjYWxsYmFjaydzIGB0aGlzYCBzaG91bGQgYmUg
3097
+ Ym91bmQKICAqLwogIGVhY2hSZWxhdGlvbnNoaXA6IGZ1bmN0aW9uKGNhbGxi
3098
+ YWNrLCBiaW5kaW5nKSB7CiAgICBnZXQodGhpcywgJ3JlbGF0aW9uc2hpcHNC
3099
+ eU5hbWUnKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUsIHJlbGF0aW9uc2hpcCkg
3100
+ ewogICAgICBjYWxsYmFjay5jYWxsKGJpbmRpbmcsIG5hbWUsIHJlbGF0aW9u
3101
+ c2hpcCk7CiAgICB9KTsKICB9LAoKICAvKioKICAgIEdpdmVuIGEgY2FsbGJh
3102
+ Y2ssIGl0ZXJhdGVzIG92ZXIgZWFjaCBvZiB0aGUgdHlwZXMgcmVsYXRlZCB0
3103
+ byBhIG1vZGVsLAogICAgaW52b2tpbmcgdGhlIGNhbGxiYWNrIHdpdGggdGhl
3104
+ IHJlbGF0ZWQgdHlwZSdzIGNsYXNzLiBFYWNoIHR5cGUgd2lsbCBiZQogICAg
3105
+ cmV0dXJuZWQganVzdCBvbmNlLCByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGRp
3106
+ ZmZlcmVudCByZWxhdGlvbnNoaXBzIGl0IGhhcwogICAgd2l0aCBhIG1vZGVs
3107
+ LgoKICAgIEBtZXRob2QgZWFjaFJlbGF0ZWRUeXBlCiAgICBAc3RhdGljCiAg
3108
+ ICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8g
3109
+ aW52b2tlCiAgICBAcGFyYW0ge2FueX0gYmluZGluZyB0aGUgdmFsdWUgdG8g
3110
+ d2hpY2ggdGhlIGNhbGxiYWNrJ3MgYHRoaXNgIHNob3VsZCBiZSBib3VuZAog
3111
+ ICovCiAgZWFjaFJlbGF0ZWRUeXBlOiBmdW5jdGlvbihjYWxsYmFjaywgYmlu
3112
+ ZGluZykgewogICAgZ2V0KHRoaXMsICdyZWxhdGVkVHlwZXMnKS5mb3JFYWNo
3113
+ KGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5n
3114
+ LCB0eXBlKTsKICAgIH0pOwogIH0KfSk7CgpEUy5Nb2RlbC5yZW9wZW4oewog
3115
+ IC8qKgogICAgR2l2ZW4gYSBjYWxsYmFjaywgaXRlcmF0ZXMgb3ZlciBlYWNo
3116
+ IG9mIHRoZSByZWxhdGlvbnNoaXBzIGluIHRoZSBtb2RlbCwKICAgIGludm9r
3117
+ aW5nIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBuYW1lIG9mIGVhY2ggcmVsYXRp
3118
+ b25zaGlwIGFuZCBpdHMgcmVsYXRpb25zaGlwCiAgICBkZXNjcmlwdG9yLgoK
3119
+ ICAgIEBtZXRob2QgZWFjaFJlbGF0aW9uc2hpcAogICAgQHBhcmFtIHtGdW5j
3120
+ dGlvbn0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGludm9rZQogICAgQHBh
3121
+ cmFtIHthbnl9IGJpbmRpbmcgdGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBjYWxs
3122
+ YmFjaydzIGB0aGlzYCBzaG91bGQgYmUgYm91bmQKICAqLwogIGVhY2hSZWxh
3123
+ dGlvbnNoaXA6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7CiAgICB0
3124
+ aGlzLmNvbnN0cnVjdG9yLmVhY2hSZWxhdGlvbnNoaXAoY2FsbGJhY2ssIGJp
3125
+ bmRpbmcpOwogIH0KfSk7Cgp9KSgpOwoKCgooZnVuY3Rpb24oKSB7Ci8qKgog
3126
+ IEBtb2R1bGUgZW1iZXItZGF0YQoqLwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkg
3127
+ ewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCnZhciBnZXQgPSBFbWJl
3128
+ ci5nZXQsIHNldCA9IEVtYmVyLnNldDsKdmFyIG9uY2UgPSBFbWJlci5ydW4u
3129
+ b25jZTsKdmFyIGZvckVhY2ggPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMuZm9y
3130
+ RWFjaDsKCi8qKgogIEBjbGFzcyBSZWNvcmRBcnJheU1hbmFnZXIKICBAbmFt
3131
+ ZXNwYWNlIERTCiAgQHByaXZhdGUKICBAZXh0ZW5kcyBFbWJlci5PYmplY3QK
3132
+ Ki8KRFMuUmVjb3JkQXJyYXlNYW5hZ2VyID0gRW1iZXIuT2JqZWN0LmV4dGVu
3133
+ ZCh7CiAgaW5pdDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmZpbHRlcmVkUmVj
3134
+ b3JkQXJyYXlzID0gRW1iZXIuTWFwV2l0aERlZmF1bHQuY3JlYXRlKHsKICAg
3135
+ ICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbigpIHsgcmV0dXJuIFtdOyB9CiAg
3136
+ ICB9KTsKCiAgICB0aGlzLmNoYW5nZWRSZWNvcmRzID0gW107CiAgfSwKCiAg
3137
+ cmVjb3JkRGlkQ2hhbmdlOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgIHRoaXMu
3138
+ Y2hhbmdlZFJlY29yZHMucHVzaChyZWNvcmQpOwogICAgb25jZSh0aGlzLCB0
3139
+ aGlzLnVwZGF0ZVJlY29yZEFycmF5cyk7CiAgfSwKCiAgcmVjb3JkQXJyYXlz
3140
+ Rm9yUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKICAgIHJlY29yZC5fcmVj
3141
+ b3JkQXJyYXlzID0gcmVjb3JkLl9yZWNvcmRBcnJheXMgfHwgRW1iZXIuT3Jk
3142
+ ZXJlZFNldC5jcmVhdGUoKTsKICAgIHJldHVybiByZWNvcmQuX3JlY29yZEFy
3143
+ cmF5czsKICB9LAoKICAvKioKICAgIFRoaXMgbWV0aG9kIGlzIGludm9rZWQg
3144
+ d2hlbmV2ZXIgZGF0YSBpcyBsb2FkZWQgaW50byB0aGUgc3RvcmUKICAgIGJ5
3145
+ IHRoZSBhZGFwdGVyIG9yIHVwZGF0ZWQgYnkgdGhlIGFkYXB0ZXIsIG9yIHdo
3146
+ ZW4gYW4gYXR0cmlidXRlCiAgICBjaGFuZ2VzIG9uIGEgcmVjb3JkLgoKICAg
3147
+ IEl0IHVwZGF0ZXMgYWxsIGZpbHRlcnMgdGhhdCBhIHJlY29yZCBiZWxvbmdz
3148
+ IHRvLgoKICAgIFRvIGF2b2lkIHRocmFzaGluZywgaXQgb25seSBydW5zIG9u
3149
+ Y2UgcGVyIHJ1biBsb29wIHBlciByZWNvcmQuCgogICAgQG1ldGhvZCB1cGRh
3150
+ dGVSZWNvcmRBcnJheXMKICAgIEBwYXJhbSB7Q2xhc3N9IHR5cGUKICAgIEBw
3151
+ YXJhbSB7TnVtYmVyfFN0cmluZ30gY2xpZW50SWQKICAqLwogIHVwZGF0ZVJl
3152
+ Y29yZEFycmF5czogZnVuY3Rpb24oKSB7CiAgICBmb3JFYWNoKHRoaXMuY2hh
3153
+ bmdlZFJlY29yZHMsIGZ1bmN0aW9uKHJlY29yZCkgewogICAgICB2YXIgdHlw
3154
+ ZSA9IHJlY29yZC5jb25zdHJ1Y3RvciwKICAgICAgICAgIHJlY29yZEFycmF5
3155
+ cyA9IHRoaXMuZmlsdGVyZWRSZWNvcmRBcnJheXMuZ2V0KHR5cGUpLAogICAg
3156
+ ICAgICAgZmlsdGVyOwoKICAgICAgZm9yRWFjaChyZWNvcmRBcnJheXMsIGZ1
3157
+ bmN0aW9uKGFycmF5KSB7CiAgICAgICAgZmlsdGVyID0gZ2V0KGFycmF5LCAn
3158
+ ZmlsdGVyRnVuY3Rpb24nKTsKICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZEFy
3159
+ cmF5KGFycmF5LCBmaWx0ZXIsIHR5cGUsIHJlY29yZCk7CiAgICAgIH0sIHRo
3160
+ aXMpOwoKICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCBtYW55QXJyYXlzIGNv
3161
+ bnRhaW5pbmcgYW4gdW5sb2FkZWQgY29weSBvZiB0aGlzCiAgICAgIC8vIGNs
3162
+ aWVudElkIGFuZCBub3RpZnkgdGhlbSB0aGF0IHRoZSByZWNvcmQgd2FzIGxv
3163
+ YWRlZC4KICAgICAgdmFyIG1hbnlBcnJheXMgPSByZWNvcmQuX2xvYWRpbmdS
3164
+ ZWNvcmRBcnJheXM7CgogICAgICBpZiAobWFueUFycmF5cykgewogICAgICAg
3165
+ IGZvciAodmFyIGk9MCwgbD1tYW55QXJyYXlzLmxlbmd0aDsgaTxsOyBpKysp
3166
+ IHsKICAgICAgICAgIG1hbnlBcnJheXNbaV0ubG9hZGVkUmVjb3JkKCk7CiAg
3167
+ ICAgICAgfQoKICAgICAgICByZWNvcmQuX2xvYWRpbmdSZWNvcmRBcnJheXMg
3168
+ PSBbXTsKICAgICAgfQogICAgfSwgdGhpcyk7CgogICAgdGhpcy5jaGFuZ2Vk
3169
+ UmVjb3JkcyA9IFtdOwogIH0sCgogIC8qKgogICAgVXBkYXRlIGFuIGluZGl2
3170
+ aWR1YWwgZmlsdGVyLgoKICAgIEBtZXRob2QgdXBkYXRlUmVjb3JkQXJyYXkK
3171
+ ICAgIEBwYXJhbSB7RFMuRmlsdGVyZWRSZWNvcmRBcnJheX0gYXJyYXkKICAg
3172
+ IEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlcgogICAgQHBhcmFtIHtDbGFzc30g
3173
+ dHlwZQogICAgQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBjbGllbnRJZAogICov
3174
+ CiAgdXBkYXRlUmVjb3JkQXJyYXk6IGZ1bmN0aW9uKGFycmF5LCBmaWx0ZXIs
3175
+ IHR5cGUsIHJlY29yZCkgewogICAgdmFyIHNob3VsZEJlSW5BcnJheTsKCiAg
3176
+ ICBpZiAoIWZpbHRlcikgewogICAgICBzaG91bGRCZUluQXJyYXkgPSB0cnVl
3177
+ OwogICAgfSBlbHNlIHsKICAgICAgc2hvdWxkQmVJbkFycmF5ID0gZmlsdGVy
3178
+ KHJlY29yZCk7CiAgICB9CgogICAgdmFyIHJlY29yZEFycmF5cyA9IHRoaXMu
3179
+ cmVjb3JkQXJyYXlzRm9yUmVjb3JkKHJlY29yZCk7CgogICAgaWYgKHNob3Vs
3180
+ ZEJlSW5BcnJheSkgewogICAgICByZWNvcmRBcnJheXMuYWRkKGFycmF5KTsK
3181
+ ICAgICAgYXJyYXkuYWRkUmVjb3JkKHJlY29yZCk7CiAgICB9IGVsc2UgaWYg
3182
+ KCFzaG91bGRCZUluQXJyYXkpIHsKICAgICAgcmVjb3JkQXJyYXlzLnJlbW92
3183
+ ZShhcnJheSk7CiAgICAgIGFycmF5LnJlbW92ZVJlY29yZChyZWNvcmQpOwog
3184
+ ICAgfQogIH0sCgogIC8qKgogICAgV2hlbiBhIHJlY29yZCBpcyBkZWxldGVk
3185
+ LCBpdCBpcyByZW1vdmVkIGZyb20gYWxsIGl0cwogICAgcmVjb3JkIGFycmF5
3186
+ cy4KCiAgICBAbWV0aG9kIHJlbW92ZQogICAgQHBhcmFtIHtEUy5Nb2RlbH0g
3187
+ cmVjb3JkCiAgKi8KICByZW1vdmU6IGZ1bmN0aW9uKHJlY29yZCkgewogICAg
3188
+ dmFyIHJlY29yZEFycmF5cyA9IHJlY29yZC5fcmVjb3JkQXJyYXlzOwoKICAg
3189
+ IGlmICghcmVjb3JkQXJyYXlzKSB7IHJldHVybjsgfQoKICAgIGZvckVhY2go
3190
+ cmVjb3JkQXJyYXlzLCBmdW5jdGlvbihhcnJheSkgewogICAgICBhcnJheS5y
3191
+ ZW1vdmVSZWNvcmQocmVjb3JkKTsKICAgIH0pOwogIH0sCgogIC8qKgogICAg
3192
+ VGhpcyBtZXRob2QgaXMgaW52b2tlZCBpZiB0aGUgYGZpbHRlckZ1bmN0aW9u
3193
+ YCBwcm9wZXJ0eSBpcwogICAgY2hhbmdlZCBvbiBhIGBEUy5GaWx0ZXJlZFJl
3194
+ Y29yZEFycmF5YC4KCiAgICBJdCBlc3NlbnRpYWxseSByZS1ydW5zIHRoZSBm
3195
+ aWx0ZXIgZnJvbSBzY3JhdGNoLiBUaGlzIHNhbWUKICAgIG1ldGhvZCBpcyBp
3196
+ bnZva2VkIHdoZW4gdGhlIGZpbHRlciBpcyBjcmVhdGVkIGluIHRoIGZpcnN0
3197
+ IHBsYWNlLgoKICAgIEBtZXRob2QgdXBkYXRlRmlsdGVyCiAgICBAcGFyYW0g
3198
+ YXJyYXkKICAgIEBwYXJhbSB0eXBlCiAgICBAcGFyYW0gZmlsdGVyCiAgKi8K
3199
+ ICB1cGRhdGVGaWx0ZXI6IGZ1bmN0aW9uKGFycmF5LCB0eXBlLCBmaWx0ZXIp
3200
+ IHsKICAgIHZhciB0eXBlTWFwID0gdGhpcy5zdG9yZS50eXBlTWFwRm9yKHR5
3201
+ cGUpLAogICAgICAgIHJlY29yZHMgPSB0eXBlTWFwLnJlY29yZHMsIHJlY29y
3202
+ ZDsKCiAgICBmb3IgKHZhciBpPTAsIGw9cmVjb3Jkcy5sZW5ndGg7IGk8bDsg
3203
+ aSsrKSB7CiAgICAgIHJlY29yZCA9IHJlY29yZHNbaV07CgogICAgICBpZiAo
3204
+ IWdldChyZWNvcmQsICdpc0RlbGV0ZWQnKSAmJiAhZ2V0KHJlY29yZCwgJ2lz
3205
+ RW1wdHknKSkgewogICAgICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXkoYXJy
3206
+ YXksIGZpbHRlciwgdHlwZSwgcmVjb3JkKTsKICAgICAgfQogICAgfQogIH0s
3207
+ CgogIC8qKgogICAgQ3JlYXRlIGEgYERTLk1hbnlBcnJheWAgZm9yIGEgdHlw
3208
+ ZSBhbmQgbGlzdCBvZiByZWNvcmQgcmVmZXJlbmNlcywgYW5kIGluZGV4CiAg
3209
+ ICB0aGUgYE1hbnlBcnJheWAgdW5kZXIgZWFjaCByZWZlcmVuY2UuIFRoaXMg
3210
+ YWxsb3dzIHVzIHRvIGVmZmljaWVudGx5IHJlbW92ZQogICAgcmVjb3JkcyBm
3211
+ cm9tIGBNYW55QXJyYXlgcyB3aGVuIHRoZXkgYXJlIGRlbGV0ZWQuCgogICAg
3212
+ QG1ldGhvZCBjcmVhdGVNYW55QXJyYXkKICAgIEBwYXJhbSB7Q2xhc3N9IHR5
3213
+ cGUKICAgIEBwYXJhbSB7QXJyYXl9IHJlZmVyZW5jZXMKICAgIEByZXR1cm4g
3214
+ e0RTLk1hbnlBcnJheX0KICAqLwogIGNyZWF0ZU1hbnlBcnJheTogZnVuY3Rp
3215
+ b24odHlwZSwgcmVjb3JkcykgewogICAgdmFyIG1hbnlBcnJheSA9IERTLk1h
3216
+ bnlBcnJheS5jcmVhdGUoewogICAgICB0eXBlOiB0eXBlLAogICAgICBjb250
3217
+ ZW50OiByZWNvcmRzLAogICAgICBzdG9yZTogdGhpcy5zdG9yZQogICAgfSk7
3218
+ CgogICAgZm9yRWFjaChyZWNvcmRzLCBmdW5jdGlvbihyZWNvcmQpIHsKICAg
3219
+ ICAgdmFyIGFycmF5cyA9IHRoaXMucmVjb3JkQXJyYXlzRm9yUmVjb3JkKHJl
3220
+ Y29yZCk7CiAgICAgIGFycmF5cy5hZGQobWFueUFycmF5KTsKICAgIH0sIHRo
3221
+ aXMpOwoKICAgIHJldHVybiBtYW55QXJyYXk7CiAgfSwKCiAgLyoqCiAgICBS
3222
+ ZWdpc3RlciBhIFJlY29yZEFycmF5IGZvciBhIGdpdmVuIHR5cGUgdG8gYmUg
3223
+ YmFja2VkIGJ5CiAgICBhIGZpbHRlciBmdW5jdGlvbi4gVGhpcyB3aWxsIGNh
3224
+ dXNlIHRoZSBhcnJheSB0byB1cGRhdGUKICAgIGF1dG9tYXRpY2FsbHkgd2hl
3225
+ biByZWNvcmRzIG9mIHRoYXQgdHlwZSBjaGFuZ2UgYXR0cmlidXRlCiAgICB2
3226
+ YWx1ZXMgb3Igc3RhdGVzLgoKICAgIEBtZXRob2QgcmVnaXN0ZXJGaWx0ZXJl
3227
+ ZFJlY29yZEFycmF5CiAgICBAcGFyYW0ge0RTLlJlY29yZEFycmF5fSBhcnJh
3228
+ eQogICAgQHBhcmFtIHtDbGFzc30gdHlwZQogICAgQHBhcmFtIHtGdW5jdGlv
3229
+ bn0gZmlsdGVyCiAgKi8KICByZWdpc3RlckZpbHRlcmVkUmVjb3JkQXJyYXk6
3230
+ IGZ1bmN0aW9uKGFycmF5LCB0eXBlLCBmaWx0ZXIpIHsKICAgIHZhciByZWNv
3231
+ cmRBcnJheXMgPSB0aGlzLmZpbHRlcmVkUmVjb3JkQXJyYXlzLmdldCh0eXBl
3232
+ KTsKICAgIHJlY29yZEFycmF5cy5wdXNoKGFycmF5KTsKCiAgICB0aGlzLnVw
3233
+ ZGF0ZUZpbHRlcihhcnJheSwgdHlwZSwgZmlsdGVyKTsKICB9LAoKICAvLyBJ
3234
+ bnRlcm5hbGx5LCB3ZSBtYWludGFpbiBhIG1hcCBvZiBhbGwgdW5sb2FkZWQg
3235
+ SURzIHJlcXVlc3RlZCBieQogIC8vIGEgTWFueUFycmF5LiBBcyB0aGUgYWRh
3236
+ cHRlciBsb2FkcyBkYXRhIGludG8gdGhlIHN0b3JlLCB0aGUKICAvLyBzdG9y
3237
+ ZSBub3RpZmllcyBhbnkgaW50ZXJlc3RlZCBNYW55QXJyYXlzLiBXaGVuIHRo
3238
+ ZSBNYW55QXJyYXkncwogIC8vIHRvdGFsIG51bWJlciBvZiBsb2FkaW5nIHJl
3239
+ Y29yZHMgZHJvcHMgdG8gemVybywgaXQgYmVjb21lcwogIC8vIGBpc0xvYWRl
3240
+ ZGAgYW5kIGZpcmVzIGEgYGRpZExvYWRgIGV2ZW50LgogIHJlZ2lzdGVyV2Fp
3241
+ dGluZ1JlY29yZEFycmF5OiBmdW5jdGlvbihyZWNvcmQsIGFycmF5KSB7CiAg
3242
+ ICB2YXIgbG9hZGluZ1JlY29yZEFycmF5cyA9IHJlY29yZC5fbG9hZGluZ1Jl
3243
+ Y29yZEFycmF5cyB8fCBbXTsKICAgIGxvYWRpbmdSZWNvcmRBcnJheXMucHVz
3244
+ aChhcnJheSk7CiAgICByZWNvcmQuX2xvYWRpbmdSZWNvcmRBcnJheXMgPSBs
3245
+ b2FkaW5nUmVjb3JkQXJyYXlzOwogIH0KfSk7Cgp9KSgpOwoKCgooZnVuY3Rp
3246
+ b24oKSB7Ci8qKgogIEBtb2R1bGUgZW1iZXItZGF0YQoqLwoKdmFyIGdldCA9
3247
+ IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0LCBtZXJnZSA9IEVtYmVyLm1l
3248
+ cmdlOwp2YXIgZm9yRWFjaCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5mb3JF
3249
+ YWNoOwp2YXIgcmVzb2x2ZSA9IEVtYmVyLlJTVlAucmVzb2x2ZTsKCnZhciBl
3250
+ cnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5l
3251
+ TnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2sn
3252
+ XTsKCkRTLkludmFsaWRFcnJvciA9IGZ1bmN0aW9uKGVycm9ycykgewogIHZh
3253
+ ciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlz
3254
+ LCAiVGhlIGJhY2tlbmQgcmVqZWN0ZWQgdGhlIGNvbW1pdCBiZWNhdXNlIGl0
3255
+ IHdhcyBpbnZhbGlkOiAiICsgRW1iZXIuaW5zcGVjdChlcnJvcnMpKTsKICB0
3256
+ aGlzLmVycm9ycyA9IGVycm9yczsKCiAgZm9yICh2YXIgaT0wLCBsPWVycm9y
3257
+ UHJvcHMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgdGhpc1tlcnJvclByb3Bz
3258
+ W2ldXSA9IHRtcFtlcnJvclByb3BzW2ldXTsKICB9Cn07CkRTLkludmFsaWRF
3259
+ cnJvci5wcm90b3R5cGUgPSBFbWJlci5jcmVhdGUoRXJyb3IucHJvdG90eXBl
3260
+ KTsKCmZ1bmN0aW9uIGlzVGhlbmFibGUob2JqZWN0KSB7CiAgcmV0dXJuIG9i
3261
+ amVjdCAmJiB0eXBlb2Ygb2JqZWN0LnRoZW4gPT09ICdmdW5jdGlvbic7Cn0K
3262
+ Ci8vIFNpbXBsZSBkaXNwYXRjaGVyIHRvIHN1cHBvcnQgb3ZlcnJpZGluZyB0
3263
+ aGUgYWxpYXNlZAovLyBtZXRob2QgaW4gc3ViY2xhc3Nlcy4KZnVuY3Rpb24g
3264
+ YWxpYXNNZXRob2QobWV0aG9kTmFtZSkgewogIHJldHVybiBmdW5jdGlvbigp
3265
+ IHsKICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIGFy
3266
+ Z3VtZW50cyk7CiAgfTsKfQoKLyoqCiAgQW4gYWRhcHRlciBpcyBhbiBvYmpl
3267
+ Y3QgdGhhdCByZWNlaXZlcyByZXF1ZXN0cyBmcm9tIGEgc3RvcmUgYW5kCiAg
3268
+ dHJhbnNsYXRlcyB0aGVtIGludG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiB0
3269
+ byB0YWtlIGFnYWluc3QgeW91cgogIHBlcnNpc3RlbmNlIGxheWVyLiBUaGUg
3270
+ cGVyc2lzdGVuY2UgbGF5ZXIgaXMgdXN1YWxseSBhbiBIVFRQIEFQSSwgYnV0
3271
+ IG1heQogIGJlIGFueXRoaW5nLCBzdWNoIGFzIHRoZSBicm93c2VyJ3MgbG9j
3272
+ YWwgc3RvcmFnZS4KCiAgIyMjIENyZWF0aW5nIGFuIEFkYXB0ZXIKCiAgRmly
3273
+ c3QsIGNyZWF0ZSBhIG5ldyBzdWJjbGFzcyBvZiBgRFMuQWRhcHRlcmA6Cgog
3274
+ ICAgICBBcHAuTXlBZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQoewogICAg
3275
+ ICAgIC8vIC4uLnlvdXIgY29kZSBoZXJlCiAgICAgIH0pOwoKICBUbyB0ZWxs
3276
+ IHlvdXIgc3RvcmUgd2hpY2ggYWRhcHRlciB0byB1c2UsIHNldCBpdHMgYGFk
3277
+ YXB0ZXJgIHByb3BlcnR5OgoKICAgICAgQXBwLnN0b3JlID0gRFMuU3RvcmUu
3278
+ Y3JlYXRlKHsKICAgICAgICBhZGFwdGVyOiBBcHAuTXlBZGFwdGVyLmNyZWF0
3279
+ ZSgpCiAgICAgIH0pOwoKICBgRFMuQWRhcHRlcmAgaXMgYW4gYWJzdHJhY3Qg
3280
+ YmFzZSBjbGFzcyB0aGF0IHlvdSBzaG91bGQgb3ZlcnJpZGUgaW4geW91cgog
3281
+ IGFwcGxpY2F0aW9uIHRvIGN1c3RvbWl6ZSBpdCBmb3IgeW91ciBiYWNrZW5k
3282
+ LiBUaGUgbWluaW11bSBzZXQgb2YgbWV0aG9kcwogIHRoYXQgeW91IHNob3Vs
3283
+ ZCBpbXBsZW1lbnQgaXM6CgogICAgKiBgZmluZCgpYAogICAgKiBgY3JlYXRl
3284
+ UmVjb3JkKClgCiAgICAqIGB1cGRhdGVSZWNvcmQoKWAKICAgICogYGRlbGV0
3285
+ ZVJlY29yZCgpYAoKICBUbyBpbXByb3ZlIHRoZSBuZXR3b3JrIHBlcmZvcm1h
3286
+ bmNlIG9mIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gb3B0aW1pemUKICB5
3287
+ b3VyIGFkYXB0ZXIgYnkgb3ZlcnJpZGluZyB0aGVzZSBsb3dlci1sZXZlbCBt
3288
+ ZXRob2RzOgoKICAgICogYGZpbmRNYW55KClgCiAgICAqIGBjcmVhdGVSZWNv
3289
+ cmRzKClgCiAgICAqIGB1cGRhdGVSZWNvcmRzKClgCiAgICAqIGBkZWxldGVS
3290
+ ZWNvcmRzKClgCiAgICAqIGBjb21taXQoKWAKCiAgRm9yIGFuIGV4YW1wbGUg
3291
+ aW1wbGVtZW50YXRpb24sIHNlZSBgRFMuUmVzdEFkYXB0ZXJgLCB0aGUKICBp
3292
+ bmNsdWRlZCBSRVNUIGFkYXB0ZXIuCgogIEBjbGFzcyBBZGFwdGVyCiAgQG5h
3293
+ bWVzcGFjZSBEUwogIEBleHRlbmRzIEVtYmVyLk9iamVjdAogIEB1c2VzIERT
3294
+ Ll9NYXBwYWJsZQoqLwoKRFMuQWRhcHRlciA9IEVtYmVyLk9iamVjdC5leHRl
3295
+ bmQoRFMuX01hcHBhYmxlLCB7CgogIC8qKgogICAgVGhlIGBmaW5kKClgIG1l
3296
+ dGhvZCBpcyBpbnZva2VkIHdoZW4gdGhlIHN0b3JlIGlzIGFza2VkIGZvciBh
3297
+ IHJlY29yZCB0aGF0CiAgICBoYXMgbm90IHByZXZpb3VzbHkgYmVlbiBsb2Fk
3298
+ ZWQuIEluIHJlc3BvbnNlIHRvIGBmaW5kKClgIGJlaW5nIGNhbGxlZCwgeW91
3299
+ CiAgICBzaG91bGQgcXVlcnkgeW91ciBwZXJzaXN0ZW5jZSBsYXllciBmb3Ig
3300
+ YSByZWNvcmQgd2l0aCB0aGUgZ2l2ZW4gSUQuIE9uY2UKICAgIGZvdW5kLCB5
3301
+ b3UgY2FuIGFzeW5jaHJvbm91c2x5IGNhbGwgdGhlIHN0b3JlJ3MgYGxvYWQo
3302
+ KWAgbWV0aG9kIHRvIGxvYWQKICAgIHRoZSByZWNvcmQuCgogICAgSGVyZSBp
3303
+ cyBhbiBleGFtcGxlIGBmaW5kYCBpbXBsZW1lbnRhdGlvbjoKCiAgICAgICAg
3304
+ ZmluZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIGlkKSB7CiAgICAgICAgICB2
3305
+ YXIgdXJsID0gdHlwZS51cmw7CiAgICAgICAgICB1cmwgPSB1cmwuZm10KGlk
3306
+ KTsKCiAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih1cmwsIGZ1bmN0aW9uKGRh
3307
+ dGEpIHsKICAgICAgICAgICAgICAvLyBkYXRhIGlzIGEgaGFzaCBvZiBrZXkv
3308
+ dmFsdWUgcGFpcnMuIElmIHlvdXIgc2VydmVyIHJldHVybnMgYQogICAgICAg
3309
+ ICAgICAgIC8vIHJvb3QsIHNpbXBseSBkbyBzb21ldGhpbmcgbGlrZToKICAg
3310
+ ICAgICAgICAgICAvLyBzdG9yZS5sb2FkKHR5cGUsIGlkLCBkYXRhLnBlcnNv
3311
+ bikKICAgICAgICAgICAgICBzdG9yZS5sb2FkKHR5cGUsIGlkLCBkYXRhKTsK
3312
+ ICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICBAbWV0aG9kIGZpbmQKICAq
3313
+ LwogIGZpbmQ6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKSwKCiAgLyoqCiAg
3314
+ ICBPcHRpb25hbAoKICAgIEBtZXRob2QgZmluZEFsbAogICAgQHBhcmFtICBz
3315
+ dG9yZQogICAgQHBhcmFtICB0eXBlCiAgICBAcGFyYW0gIHNpbmNlCiAgKi8K
3316
+ ICBmaW5kQWxsOiBudWxsLAoKICAvKioKICAgIE9wdGlvbmFsCgogICAgQG1l
3317
+ dGhvZCBmaW5kUXVlcnkKICAgIEBwYXJhbSAgc3RvcmUKICAgIEBwYXJhbSAg
3318
+ dHlwZQogICAgQHBhcmFtICBxdWVyeQogICAgQHBhcmFtICByZWNvcmRBcnJh
3319
+ eQogICovCiAgZmluZFF1ZXJ5OiBudWxsLAoKICAvKioKICAgIElmIHRoZSBn
3320
+ bG9iYWxseSB1bmlxdWUgSURzIGZvciB5b3VyIHJlY29yZHMgc2hvdWxkIGJl
3321
+ IGdlbmVyYXRlZCBvbiB0aGUgY2xpZW50LAogICAgaW1wbGVtZW50IHRoZSBg
3322
+ Z2VuZXJhdGVJZEZvclJlY29yZCgpYCBtZXRob2QuIFRoaXMgbWV0aG9kIHdp
3323
+ bGwgYmUgaW52b2tlZAogICAgZWFjaCB0aW1lIHlvdSBjcmVhdGUgYSBuZXcg
3324
+ cmVjb3JkLCBhbmQgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gaXQgd2lsbCBi
3325
+ ZQogICAgYXNzaWduZWQgdG8gdGhlIHJlY29yZCdzIGBwcmltYXJ5S2V5YC4K
3326
+ CiAgICBNb3N0IHRyYWRpdGlvbmFsIFJFU1QtbGlrZSBIVFRQIEFQSXMgd2ls
3327
+ bCBub3QgdXNlIHRoaXMgbWV0aG9kLiBJbnN0ZWFkLCB0aGUgSUQKICAgIG9m
3328
+ IHRoZSByZWNvcmQgd2lsbCBiZSBzZXQgYnkgdGhlIHNlcnZlciwgYW5kIHlv
3329
+ dXIgYWRhcHRlciB3aWxsIHVwZGF0ZSB0aGUgc3RvcmUKICAgIHdpdGggdGhl
3330
+ IG5ldyBJRCB3aGVuIGl0IGNhbGxzIGBkaWRDcmVhdGVSZWNvcmQoKWAuIE9u
3331
+ bHkgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGlmCiAgICB5b3UgaW50ZW5kIHRv
3332
+ IGdlbmVyYXRlIHJlY29yZCBJRHMgb24gdGhlIGNsaWVudC1zaWRlLgoKICAg
3333
+ IFRoZSBgZ2VuZXJhdGVJZEZvclJlY29yZCgpYCBtZXRob2Qgd2lsbCBiZSBp
3334
+ bnZva2VkIHdpdGggdGhlIHJlcXVlc3Rpbmcgc3RvcmUgYXMKICAgIHRoZSBm
3335
+ aXJzdCBwYXJhbWV0ZXIgYW5kIHRoZSBuZXdseSBjcmVhdGVkIHJlY29yZCBh
3336
+ cyB0aGUgc2Vjb25kIHBhcmFtZXRlcjoKCiAgICAgICAgZ2VuZXJhdGVJZEZv
3337
+ clJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHJlY29yZCkgewogICAgICAgICAg
3338
+ dmFyIHV1aWQgPSBBcHAuZ2VuZXJhdGVVVUlEV2l0aFN0YXRpc3RpY2FsbHlM
3339
+ b3dPZGRzT2ZDb2xsaXNpb24oKTsKICAgICAgICAgIHJldHVybiB1dWlkOwog
3340
+ ICAgICAgIH0KCiAgICBAbWV0aG9kIGdlbmVyYXRlSWRGb3JSZWNvcmQKICAg
3341
+ IEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCiAgICBAcGFyYW0ge0RTLk1vZGVs
3342
+ fSByZWNvcmQKICAqLwogIGdlbmVyYXRlSWRGb3JSZWNvcmQ6IG51bGwsCgog
3343
+ IC8qKgogICAgUHJveGllcyB0byB0aGUgc2VyaWFsaXplcidzIGBzZXJpYWxp
3344
+ emVgIG1ldGhvZC4KCiAgICBAbWV0aG9kIHNlcmlhbGl6ZQogICAgQHBhcmFt
3345
+ IHtEUy5Nb2RlbH0gcmVjb3JkCiAgICBAcGFyYW0ge09iamVjdH0gICBvcHRp
3346
+ b25zCiAgKi8KICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9u
3347
+ cykgewogICAgcmV0dXJuIGdldChyZWNvcmQsICdzdG9yZScpLnNlcmlhbGl6
3348
+ ZXJGb3IocmVjb3JkLmNvbnN0cnVjdG9yLnR5cGVLZXkpLnNlcmlhbGl6ZShy
3349
+ ZWNvcmQsIG9wdGlvbnMpOwogIH0sCgogIC8qKgogICAgSW1wbGVtZW50IHRo
3350
+ aXMgbWV0aG9kIGluIGEgc3ViY2xhc3MgdG8gaGFuZGxlIHRoZSBjcmVhdGlv
3351
+ biBvZgogICAgbmV3IHJlY29yZHMuCgogICAgU2VyaWFsaXplcyB0aGUgcmVj
3352
+ b3JkIGFuZCBzZW5kIGl0IHRvIHRoZSBzZXJ2ZXIuCgogICAgVGhpcyBpbXBs
3353
+ ZW1lbnRhdGlvbiBzaG91bGQgY2FsbCB0aGUgYWRhcHRlcidzIGBkaWRDcmVh
3354
+ dGVSZWNvcmRgCiAgICBtZXRob2Qgb24gc3VjY2VzcyBvciBgZGlkRXJyb3Jg
3355
+ IG1ldGhvZCBvbiBmYWlsdXJlLgoKICAgIEBtZXRob2QgY3JlYXRlUmVjb3Jk
3356
+ CiAgICBAcHJvcGVydHkge0RTLlN0b3JlfSBzdG9yZQogICAgQHByb3BlcnR5
3357
+ IHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZSAgIHRoZSBEUy5Nb2RlbCBj
3358
+ bGFzcyBvZiB0aGUgcmVjb3JkCiAgICBAcHJvcGVydHkge0RTLk1vZGVsfSBy
3359
+ ZWNvcmQKICAqLwogIGNyZWF0ZVJlY29yZDogRW1iZXIucmVxdWlyZWQoRnVu
3360
+ Y3Rpb24pLAoKICAvKioKICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBh
3361
+ IHN1YmNsYXNzIHRvIGhhbmRsZSB0aGUgdXBkYXRpbmcgb2YKICAgIGEgcmVj
3362
+ b3JkLgoKICAgIFNlcmlhbGl6ZXMgdGhlIHJlY29yZCB1cGRhdGUgYW5kIHNl
3363
+ bmQgaXQgdG8gdGhlIHNlcnZlci4KCiAgICBAbWV0aG9kIHVwZGF0ZVJlY29y
3364
+ ZAogICAgQHByb3BlcnR5IHtEUy5TdG9yZX0gc3RvcmUKICAgIEBwcm9wZXJ0
3365
+ eSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUgICB0aGUgRFMuTW9kZWwg
3366
+ Y2xhc3Mgb2YgdGhlIHJlY29yZAogICAgQHByb3BlcnR5IHtEUy5Nb2RlbH0g
3367
+ cmVjb3JkCiAgKi8KICB1cGRhdGVSZWNvcmQ6IEVtYmVyLnJlcXVpcmVkKEZ1
3368
+ bmN0aW9uKSwKCiAgLyoqCiAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4g
3369
+ YSBzdWJjbGFzcyB0byBoYW5kbGUgdGhlIGRlbGV0aW9uIG9mCiAgICBhIHJl
3370
+ Y29yZC4KCiAgICBTZW5kcyBhIGRlbGV0ZSByZXF1ZXN0IGZvciB0aGUgcmVj
3371
+ b3JkIHRvIHRoZSBzZXJ2ZXIuCgogICAgQG1ldGhvZCBkZWxldGVSZWNvcmQK
3372
+ ICAgIEBwcm9wZXJ0eSB7RFMuU3RvcmV9IHN0b3JlCiAgICBAcHJvcGVydHkg
3373
+ e3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlICAgdGhlIERTLk1vZGVsIGNs
3374
+ YXNzIG9mIHRoZSByZWNvcmQKICAgIEBwcm9wZXJ0eSB7RFMuTW9kZWx9IHJl
3375
+ Y29yZAogICovCiAgZGVsZXRlUmVjb3JkOiBFbWJlci5yZXF1aXJlZChGdW5j
3376
+ dGlvbiksCgogIC8qKgogICAgRmluZCBtdWx0aXBsZSByZWNvcmRzIGF0IG9u
3377
+ Y2UuCgogICAgQnkgZGVmYXVsdCwgaXQgbG9vcHMgb3ZlciB0aGUgcHJvdmlk
3378
+ ZWQgaWRzIGFuZCBjYWxscyBgZmluZGAgb24gZWFjaC4KICAgIE1heSBiZSBv
3379
+ dmVyd3JpdHRlbiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWR1Y2Ug
3380
+ dGhlIG51bWJlciBvZgogICAgc2VydmVyIHJlcXVlc3RzLgoKICAgIEBtZXRo
3381
+ b2QgZmluZE1hbnkKICAgIEBwcm9wZXJ0eSB7RFMuU3RvcmV9IHN0b3JlCiAg
3382
+ ICBAcHJvcGVydHkge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlICAgdGhl
3383
+ IERTLk1vZGVsIGNsYXNzIG9mIHRoZSByZWNvcmRzCiAgICBAcHJvcGVydHkg
3384
+ e0FycmF5fSAgICBpZHMKICAqLwogIGZpbmRNYW55OiBmdW5jdGlvbihzdG9y
3385
+ ZSwgdHlwZSwgaWRzKSB7CiAgICB2YXIgcHJvbWlzZXMgPSBpZHMubWFwKGZ1
3386
+ bmN0aW9uKGlkKSB7CiAgICAgIHJldHVybiB0aGlzLmZpbmQoc3RvcmUsIHR5
3387
+ cGUsIGlkKTsKICAgIH0sIHRoaXMpOwoKICAgIHJldHVybiBFbWJlci5SU1ZQ
3388
+ LmFsbChwcm9taXNlcyk7CiAgfQp9KTsKCn0pKCk7CgoKCihmdW5jdGlvbigp
3389
+ IHsKLyoqCiAgQG1vZHVsZSBlbWJlci1kYXRhCiovCgp2YXIgZ2V0ID0gRW1i
3390
+ ZXIuZ2V0LCBmbXQgPSBFbWJlci5TdHJpbmcuZm10LAogICAgaW5kZXhPZiA9
3391
+ IEVtYmVyLkVudW1lcmFibGVVdGlscy5pbmRleE9mOwoKdmFyIGNvdW50ZXIg
3392
+ PSAwOwoKLyoqCiAgYERTLkZpeHR1cmVBZGFwdGVyYCBpcyBhbiBhZGFwdGVy
3393
+ IHRoYXQgbG9hZHMgcmVjb3JkcyBmcm9tIG1lbW9yeS4KICBJdHMgcHJpbWFy
3394
+ aWx5IHVzZWQgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nLiBZb3UgY2Fu
3395
+ IGFsc28gdXNlCiAgYERTLkZpeHR1cmVBZGFwdGVyYCB3aGlsZSB3b3JraW5n
3396
+ IG9uIHRoZSBBUEkgYnV0IGFyZSBub3QgcmVhZHkgdG8KICBpbnRlZ3JhdGUg
3397
+ eWV0LiBJdCBpcyBhIGZ1bGx5IGZ1bmN0aW9uaW5nIGFkYXB0ZXIuIEFsbCBD
3398
+ UlVEIG1ldGhvZHMKICBhcmUgaW1wbGVtZW50ZWQuIFlvdSBjYW4gYWxzbyBp
3399
+ bXBsZW1lbnQgcXVlcnkgbG9naWMgdGhhdCBhIHJlbW90ZQogIHN5c3RlbSB3
3400
+ b3VsZCBkby4gSXRzIHBvc3NpYmxlIHRvIGRvIGRldmVsb3AgeW91ciBlbnRp
3401
+ cmUgYXBwbGljYXRpb24KICB3aXRoIGBEUy5GaXh0dXJlQWRhcHRlcmAuCgog
3402
+ IEBjbGFzcyBGaXh0dXJlQWRhcHRlcgogIEBuYW1lc3BhY2UgRFMKICBAZXh0
3403
+ ZW5kcyBEUy5BZGFwdGVyCiovCkRTLkZpeHR1cmVBZGFwdGVyID0gRFMuQWRh
3404
+ cHRlci5leHRlbmQoewogIC8vIGJ5IGRlZmF1bHQsIGZpeHR1cmVzIGFyZSBh
3405
+ bHJlYWR5IGluIG5vcm1hbGl6ZWQgZm9ybQogIHNlcmlhbGl6ZXI6IG51bGws
3406
+ CgogIHNpbXVsYXRlUmVtb3RlUmVzcG9uc2U6IHRydWUsCgogIGxhdGVuY3k6
3407
+ IDUwLAoKICAvKioKICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBvcmRl
3408
+ ciB0byBwcm92aWRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZQoKICAg
3409
+ IEBtZXRob2QgZml4dHVyZXNGb3JUeXBlCiAgICBAcGFyYW0gIHR5cGUKICAq
3410
+ LwogIGZpeHR1cmVzRm9yVHlwZTogZnVuY3Rpb24odHlwZSkgewogICAgaWYg
3411
+ KHR5cGUuRklYVFVSRVMpIHsKICAgICAgdmFyIGZpeHR1cmVzID0gRW1iZXIu
3412
+ QSh0eXBlLkZJWFRVUkVTKTsKICAgICAgcmV0dXJuIGZpeHR1cmVzLm1hcChm
3413
+ dW5jdGlvbihmaXh0dXJlKXsKICAgICAgICB2YXIgZml4dHVyZUlkVHlwZSA9
3414
+ IHR5cGVvZiBmaXh0dXJlLmlkOwogICAgICAgIGlmKGZpeHR1cmVJZFR5cGUg
3415
+ IT09ICJudW1iZXIiICYmIGZpeHR1cmVJZFR5cGUgIT09ICJzdHJpbmciKXsK
3416
+ ICAgICAgICAgIHRocm93IG5ldyBFcnJvcihmbXQoJ3RoZSBpZCBwcm9wZXJ0
3417
+ eSBtdXN0IGJlIGRlZmluZWQgYXMgYSBudW1iZXIgb3Igc3RyaW5nIGZvciBm
3418
+ aXh0dXJlICVAJywgW2ZpeHR1cmVdKSk7CiAgICAgICAgfQogICAgICAgIGZp
3419
+ eHR1cmUuaWQgPSBmaXh0dXJlLmlkICsgJyc7CiAgICAgICAgcmV0dXJuIGZp
3420
+ eHR1cmU7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfSwK
3421
+ CiAgLyoqCiAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8g
3422
+ cXVlcnkgZml4dHVyZXMgZGF0YQoKICAgIEBtZXRob2QgcXVlcnlGaXh0dXJl
3423
+ cwogICAgQHBhcmFtICBmaXh0dXJlCiAgICBAcGFyYW0gIHF1ZXJ5CiAgICBA
3424
+ cGFyYW0gIHR5cGUKICAqLwogIHF1ZXJ5Rml4dHVyZXM6IGZ1bmN0aW9uKGZp
3425
+ eHR1cmVzLCBxdWVyeSwgdHlwZSkgewogICAgRW1iZXIuYXNzZXJ0KCdOb3Qg
3426
+ aW1wbGVtZW50ZWQ6IFlvdSBtdXN0IG92ZXJyaWRlIHRoZSBEUy5GaXh0dXJl
3427
+ QWRhcHRlcjo6cXVlcnlGaXh0dXJlcyBtZXRob2QgdG8gc3VwcG9ydCBxdWVy
3428
+ eWluZyB0aGUgZml4dHVyZSBzdG9yZS4nKTsKICB9LAoKICAvKioKICAgIEBt
3429
+ ZXRob2QgdXBkYXRlRml4dHVyZXMKICAgIEBwYXJhbSAgdHlwZQogICAgQHBh
3430
+ cmFtICBmaXh0dXJlCiAgKi8KICB1cGRhdGVGaXh0dXJlczogZnVuY3Rpb24o
3431
+ dHlwZSwgZml4dHVyZSkgewogICAgaWYoIXR5cGUuRklYVFVSRVMpIHsKICAg
3432
+ ICAgdHlwZS5GSVhUVVJFUyA9IFtdOwogICAgfQoKICAgIHZhciBmaXh0dXJl
3433
+ cyA9IHR5cGUuRklYVFVSRVM7CgogICAgdGhpcy5kZWxldGVMb2FkZWRGaXh0
3434
+ dXJlKHR5cGUsIGZpeHR1cmUpOwoKICAgIGZpeHR1cmVzLnB1c2goZml4dHVy
3435
+ ZSk7CiAgfSwKCiAgLyoqCiAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4g
3436
+ b3JkZXIgdG8gcHJvdmlkZSBwcm92aWRlIGpzb24gZm9yIENSVUQgbWV0aG9k
3437
+ cwoKICAgIEBtZXRob2QgbW9ja0pTT04KICAgIEBwYXJhbSAgdHlwZQogICAg
3438
+ QHBhcmFtICByZWNvcmQKICAqLwogIG1vY2tKU09OOiBmdW5jdGlvbihzdG9y
3439
+ ZSwgdHlwZSwgcmVjb3JkKSB7CiAgICByZXR1cm4gc3RvcmUuc2VyaWFsaXpl
3440
+ ckZvcih0eXBlKS5zZXJpYWxpemUocmVjb3JkLCB7IGluY2x1ZGVJZDogdHJ1
3441
+ ZSB9KTsKICB9LAoKICAvKioKICAgIEBtZXRob2QgZ2VuZXJhdGVJZEZvclJl
3442
+ Y29yZAogICAgQHBhcmFtICBzdG9yZQogICAgQHBhcmFtICByZWNvcmQKICAq
3443
+ LwogIGdlbmVyYXRlSWRGb3JSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlKSB7CiAg
3444
+ ICByZXR1cm4gY291bnRlcisrOwogIH0sCgogIC8qKgogICAgQG1ldGhvZCBm
3445
+ aW5kCiAgICBAcGFyYW0gIHN0b3JlCiAgICBAcGFyYW0gIHR5cGUKICAgIEBw
3446
+ YXJhbSAgaWQKICAqLwogIGZpbmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBp
3447
+ ZCkgewogICAgdmFyIGZpeHR1cmVzID0gdGhpcy5maXh0dXJlc0ZvclR5cGUo
3448
+ dHlwZSksCiAgICAgICAgZml4dHVyZTsKCiAgICBFbWJlci53YXJuKCJVbmFi
3449
+ bGUgdG8gZmluZCBmaXh0dXJlcyBmb3IgbW9kZWwgdHlwZSAiICsgdHlwZS50
3450
+ b1N0cmluZygpLCBmaXh0dXJlcyk7CgogICAgaWYgKGZpeHR1cmVzKSB7CiAg
3451
+ ICAgIGZpeHR1cmUgPSBFbWJlci5BKGZpeHR1cmVzKS5maW5kUHJvcGVydHko
3452
+ J2lkJywgaWQpOwogICAgfQoKICAgIGlmIChmaXh0dXJlKSB7CiAgICAgIHJl
3453
+ dHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKICAg
3454
+ ICAgICByZXR1cm4gZml4dHVyZTsKICAgICAgfSwgdGhpcyk7CiAgICB9CiAg
3455
+ fSwKCiAgLyoqCiAgICBAbWV0aG9kIGZpbmRNYW55CiAgICBAcGFyYW0gIHN0
3456
+ b3JlCiAgICBAcGFyYW0gIHR5cGUKICAgIEBwYXJhbSAgaWRzCiAgKi8KICBm
3457
+ aW5kTWFueTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIGlkcykgewogICAgdmFy
3458
+ IGZpeHR1cmVzID0gdGhpcy5maXh0dXJlc0ZvclR5cGUodHlwZSk7CgogICAg
3459
+ RW1iZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCBmaXh0dXJlcyBmb3IgbW9k
3460
+ ZWwgdHlwZSAiK3R5cGUudG9TdHJpbmcoKSwgISFmaXh0dXJlcyk7CgogICAg
3461
+ aWYgKGZpeHR1cmVzKSB7CiAgICAgIGZpeHR1cmVzID0gZml4dHVyZXMuZmls
3462
+ dGVyKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaW5kZXhPZihp
3463
+ ZHMsIGl0ZW0uaWQpICE9PSAtMTsKICAgICAgfSk7CiAgICB9CgogICAgaWYg
3464
+ KGZpeHR1cmVzKSB7CiAgICAgIHJldHVybiB0aGlzLnNpbXVsYXRlUmVtb3Rl
3465
+ Q2FsbChmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZml4dHVyZXM7CiAg
3466
+ ICAgIH0sIHRoaXMpOwogICAgfQogIH0sCgogIC8qKgogICAgQG1ldGhvZCBm
3467
+ aW5kQWxsCiAgICBAcGFyYW0gIHN0b3JlCiAgICBAcGFyYW0gIHR5cGUKICAq
3468
+ LwogIGZpbmRBbGw6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlKSB7CiAgICB2YXIg
3469
+ Zml4dHVyZXMgPSB0aGlzLmZpeHR1cmVzRm9yVHlwZSh0eXBlKTsKCiAgICBF
3470
+ bWJlci5hc3NlcnQoIlVuYWJsZSB0byBmaW5kIGZpeHR1cmVzIGZvciBtb2Rl
3471
+ bCB0eXBlICIrdHlwZS50b1N0cmluZygpLCAhIWZpeHR1cmVzKTsKCiAgICBy
3472
+ ZXR1cm4gdGhpcy5zaW11bGF0ZVJlbW90ZUNhbGwoZnVuY3Rpb24oKSB7CiAg
3473
+ ICAgIHJldHVybiBmaXh0dXJlczsKICAgIH0sIHRoaXMpOwogIH0sCgogIC8q
3474
+ KgogICAgQG1ldGhvZCBmaW5kUXVlcnkKICAgIEBwYXJhbSAgc3RvcmUKICAg
3475
+ IEBwYXJhbSAgdHlwZQogICAgQHBhcmFtICBxdWVyeQogICAgQHBhcmFtICBh
3476
+ cnJheQogICovCiAgZmluZFF1ZXJ5OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwg
3477
+ cXVlcnksIGFycmF5KSB7CiAgICB2YXIgZml4dHVyZXMgPSB0aGlzLmZpeHR1
3478
+ cmVzRm9yVHlwZSh0eXBlKTsKCiAgICBFbWJlci5hc3NlcnQoIlVuYWJsZSB0
3479
+ byBmaW5kIGZpeHR1cmVzIGZvciBtb2RlbCB0eXBlICIrdHlwZS50b1N0cmlu
3480
+ ZygpLCAhIWZpeHR1cmVzKTsKCiAgICBmaXh0dXJlcyA9IHRoaXMucXVlcnlG
3481
+ aXh0dXJlcyhmaXh0dXJlcywgcXVlcnksIHR5cGUpOwoKICAgIGlmIChmaXh0
3482
+ dXJlcykgewogICAgICByZXR1cm4gdGhpcy5zaW11bGF0ZVJlbW90ZUNhbGwo
3483
+ ZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGZpeHR1cmVzOwogICAgICB9
3484
+ LCB0aGlzKTsKICAgIH0KICB9LAoKICAvKioKICAgIEBtZXRob2QgY3JlYXRl
3485
+ UmVjb3JkCiAgICBAcGFyYW0gIHN0b3JlCiAgICBAcGFyYW0gIHR5cGUKICAg
3486
+ IEBwYXJhbSAgcmVjb3JkCiAgKi8KICBjcmVhdGVSZWNvcmQ6IGZ1bmN0aW9u
3487
+ KHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKICAgIHZhciBmaXh0dXJlID0gdGhp
3488
+ cy5tb2NrSlNPTihzdG9yZSwgdHlwZSwgcmVjb3JkKTsKCiAgICB0aGlzLnVw
3489
+ ZGF0ZUZpeHR1cmVzKHR5cGUsIGZpeHR1cmUpOwoKICAgIHJldHVybiB0aGlz
3490
+ LnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJu
3491
+ IGZpeHR1cmU7CiAgICB9LCB0aGlzKTsKICB9LAoKICAvKioKICAgIEBtZXRo
3492
+ b2QgdXBkYXRlUmVjb3JkCiAgICBAcGFyYW0gIHN0b3JlCiAgICBAcGFyYW0g
3493
+ IHR5cGUKICAgIEBwYXJhbSAgcmVjb3JkCiAgKi8KICB1cGRhdGVSZWNvcmQ6
3494
+ IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKICAgIHZhciBmaXh0
3495
+ dXJlID0gdGhpcy5tb2NrSlNPTihzdG9yZSwgdHlwZSwgcmVjb3JkKTsKCiAg
3496
+ ICB0aGlzLnVwZGF0ZUZpeHR1cmVzKHR5cGUsIGZpeHR1cmUpOwoKICAgIHJl
3497
+ dHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKICAg
3498
+ ICAgcmV0dXJuIGZpeHR1cmU7CiAgICB9LCB0aGlzKTsKICB9LAoKICAvKioK
3499
+ ICAgIEBtZXRob2QgZGVsZXRlUmVjb3JkCiAgICBAcGFyYW0gIHN0b3JlCiAg
3500
+ ICBAcGFyYW0gIHR5cGUKICAgIEBwYXJhbSAgcmVjb3JkCiAgKi8KICBkZWxl
3501
+ dGVSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKICAg
3502
+ IHZhciBmaXh0dXJlID0gdGhpcy5tb2NrSlNPTihzdG9yZSwgdHlwZSwgcmVj
3503
+ b3JkKTsKCiAgICB0aGlzLmRlbGV0ZUxvYWRlZEZpeHR1cmUodHlwZSwgZml4
3504
+ dHVyZSk7CgogICAgcmV0dXJuIHRoaXMuc2ltdWxhdGVSZW1vdGVDYWxsKGZ1
3505
+ bmN0aW9uKCkgewogICAgICAvLyBubyBwYXlsb2FkIGluIGEgZGVsZXRpb24K
3506
+ ICAgICAgcmV0dXJuIG51bGw7CiAgICB9KTsKICB9LAoKICAvKgogICAgQG1l
3507
+ dGhvZCBkZWxldGVMb2FkZWRGaXh0dXJlCiAgICBAcHJpdmF0ZQogICAgQHBh
3508
+ cmFtIHR5cGUKICAgIEBwYXJhbSByZWNvcmQKICAqLwogIGRlbGV0ZUxvYWRl
3509
+ ZEZpeHR1cmU6IGZ1bmN0aW9uKHR5cGUsIHJlY29yZCkgewogICAgdmFyIGV4
3510
+ aXN0aW5nRml4dHVyZSA9IHRoaXMuZmluZEV4aXN0aW5nRml4dHVyZSh0eXBl
3511
+ LCByZWNvcmQpOwoKICAgIGlmKGV4aXN0aW5nRml4dHVyZSkgewogICAgICB2
3512
+ YXIgaW5kZXggPSBpbmRleE9mKHR5cGUuRklYVFVSRVMsIGV4aXN0aW5nRml4
3513
+ dHVyZSk7CiAgICAgIHR5cGUuRklYVFVSRVMuc3BsaWNlKGluZGV4LCAxKTsK
3514
+ ICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfSwKCiAgLyoKICAgIEBtZXRo
3515
+ b2QgZmluZEV4aXN0aW5nRml4dHVyZQogICAgQHByaXZhdGUKICAgIEBwYXJh
3516
+ bSB0eXBlCiAgICBAcGFyYW0gcmVjb3JkCiAgKi8KICBmaW5kRXhpc3RpbmdG
3517
+ aXh0dXJlOiBmdW5jdGlvbih0eXBlLCByZWNvcmQpIHsKICAgIHZhciBmaXh0
3518
+ dXJlcyA9IHRoaXMuZml4dHVyZXNGb3JUeXBlKHR5cGUpOwogICAgdmFyIGlk
3519
+ ID0gZ2V0KHJlY29yZCwgJ2lkJyk7CgogICAgcmV0dXJuIHRoaXMuZmluZEZp
3520
+ eHR1cmVCeUlkKGZpeHR1cmVzLCBpZCk7CiAgfSwKCiAgLyoKICAgIEBtZXRo
3521
+ b2QgZmluZEZpeHR1cmVCeUlkCiAgICBAcHJpdmF0ZQogICAgQHBhcmFtIHR5
3522
+ cGUKICAgIEBwYXJhbSByZWNvcmQKICAqLwogIGZpbmRGaXh0dXJlQnlJZDog
3523
+ ZnVuY3Rpb24oZml4dHVyZXMsIGlkKSB7CiAgICByZXR1cm4gRW1iZXIuQShm
3524
+ aXh0dXJlcykuZmluZChmdW5jdGlvbihyKSB7CiAgICAgIGlmKCcnK2dldChy
3525
+ LCAnaWQnKSA9PT0gJycraWQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
3526
+ ICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAg
3527
+ IH0pOwogIH0sCgogIC8qCiAgICBAbWV0aG9kIHNpbXVsYXRlUmVtb3RlQ2Fs
3528
+ bAogICAgQHByaXZhdGUKICAgIEBwYXJhbSBjYWxsYmFjawogICAgQHBhcmFt
3529
+ IGNvbnRleHQKICAqLwogIHNpbXVsYXRlUmVtb3RlQ2FsbDogZnVuY3Rpb24o
3530
+ Y2FsbGJhY2ssIGNvbnRleHQpIHsKICAgIHZhciBhZGFwdGVyID0gdGhpczsK
3531
+ CiAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihy
3532
+ ZXNvbHZlKSB7CiAgICAgIGlmIChnZXQoYWRhcHRlciwgJ3NpbXVsYXRlUmVt
3533
+ b3RlUmVzcG9uc2UnKSkgewogICAgICAgIC8vIFNjaGVkdWxlIHdpdGggc2V0
3534
+ VGltZW91dAogICAgICAgIEVtYmVyLnJ1bi5sYXRlcihmdW5jdGlvbigpIHsK
3535
+ ICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2suY2FsbChjb250ZXh0KSk7CiAg
3536
+ ICAgICAgfSwgZ2V0KGFkYXB0ZXIsICdsYXRlbmN5JykpOwogICAgICB9IGVs
3537
+ c2UgewogICAgICAgIC8vIEFzeW5jaHJvbm91cywgYnV0IGF0IHRoZSBvZiB0
3538
+ aGUgcnVubG9vcCB3aXRoIHplcm8gbGF0ZW5jeQogICAgICAgIEVtYmVyLnJ1
3539
+ bi5vbmNlKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmVzb2x2ZShjYWxsYmFj
3540
+ ay5jYWxsKGNvbnRleHQpKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7
3541
+ CiAgfQp9KTsKCn0pKCk7CgoKCihmdW5jdGlvbigpIHsKLyoqCiAgQG1vZHVs
3542
+ ZSBlbWJlci1kYXRhCiovCgp2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBF
3543
+ bWJlci5zZXQ7CgpEUy5yZWplY3Rpb25IYW5kbGVyID0gZnVuY3Rpb24ocmVh
3544
+ c29uKSB7CiAgRW1iZXIuTG9nZ2VyLmFzc2VydChbcmVhc29uLCByZWFzb24u
3545
+ bWVzc2FnZSwgcmVhc29uLnN0YWNrXSk7CgogIHRocm93IHJlYXNvbjsKfTsK
3546
+ CmZ1bmN0aW9uIGNvZXJjZUlkKGlkKSB7CiAgcmV0dXJuIGlkID09IG51bGwg
3547
+ PyBudWxsIDogaWQrJyc7Cn0KCkRTLlJFU1RTZXJpYWxpemVyID0gRFMuSlNP
3548
+ TlNlcmlhbGl6ZXIuZXh0ZW5kKHsKICAvKioKICAgIE5vcm1hbGl6ZXMgYSBw
3549
+ YXJ0IG9mIHRoZSBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkKICAgIHRoZSBz
3550
+ ZXJ2ZXIuIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG11bmdl
3551
+ IHRoZSBoYXNoCiAgICBhbmQgY2FsbCBzdXBlciBpZiB5b3UgaGF2ZSBnZW5l
3552
+ cmljIG5vcm1hbGl6YXRpb24gdG8gZG8uCgogICAgSXQgdGFrZXMgdGhlIHR5
3553
+ cGUgb2YgdGhlIHJlY29yZCB0aGF0IGlzIGJlaW5nIG5vcm1hbGl6ZWQKICAg
3554
+ IChhcyBhIERTLk1vZGVsIGNsYXNzKSwgdGhlIHByb3BlcnR5IHdoZXJlIHRo
3555
+ ZSBoYXNoIHdhcwogICAgb3JpZ2luYWxseSBmb3VuZCwgYW5kIHRoZSBoYXNo
3556
+ IHRvIG5vcm1hbGl6ZS4KCiAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUg
3557
+ YSBwYXlsb2FkIHRoYXQgbG9va3MgbGlrZSB0aGlzOgoKICAgIGBgYGpzCiAg
3558
+ ICB7CiAgICAgICJwb3N0IjogewogICAgICAgICJpZCI6IDEsCiAgICAgICAg
3559
+ InRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAogICAgICAgICJjb21tZW50
3560
+ cyI6IFsgMSwgMiBdCiAgICAgIH0sCiAgICAgICJjb21tZW50cyI6IFt7CiAg
3561
+ ICAgICAgImlkIjogMSwKICAgICAgICAiYm9keSI6ICJGSVJTVCIKICAgICAg
3562
+ fSwgewogICAgICAgICJpZCI6IDIsCiAgICAgICAgImJvZHkiOiAiUmFpbHMg
3563
+ aXMgdW5hZ2kiCiAgICAgIH1dCiAgICB9CiAgICBgYGAKCiAgICBUaGUgYG5v
3564
+ cm1hbGl6ZWAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHRocmVlIHRpbWVzOgoK
3565
+ ICAgICogV2l0aCBgQXBwLlBvc3RgLCBgInBvc3RzImAgYW5kIGB7IGlkOiAx
3566
+ LCB0aXRsZTogIlJhaWxzIGlzIG9tYWthc2UiLCAuLi4gfWAKICAgICogV2l0
3567
+ aCBgQXBwLkNvbW1lbnRgLCBgImNvbW1lbnRzImAgYW5kIGB7IGlkOiAxLCBi
3568
+ b2R5OiAiRklSU1QiIH1gCiAgICAqIFdpdGggYEFwcC5Db21tZW50YCwgYCJj
3569
+ b21tZW50cyJgIGFuZCBgeyBpZDogMiwgYm9keTogIlJhaWxzIGlzIHVuYWdp
3570
+ IiB9YAoKICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kLCBmb3IgZXhhbXBs
3571
+ ZSwgdG8gbm9ybWFsaXplIHVuZGVyc2NvcmVkIGtleXMgdG8gY2FtZWxpemVk
3572
+ CiAgICBvciBvdGhlciBnZW5lcmFsLXB1cnBvc2Ugbm9ybWFsaXphdGlvbnMu
3573
+ CgogICAgSWYgeW91IHdhbnQgdG8gZG8gbm9ybWFsaXphdGlvbnMgc3BlY2lm
3574
+ aWMgdG8gc29tZSBwYXJ0IG9mIHRoZSBwYXlsb2FkLCB5b3UKICAgIGNhbiBz
3575
+ cGVjaWZ5IHRob3NlIHVuZGVyIGBub3JtYWxpemVIYXNoYC4KCiAgICBGb3Ig
3576
+ ZXhhbXBsZSwgaWYgdGhlIGBJRHNgIHVuZGVyIGAiY29tbWVudHMiYCBhcmUg
3577
+ cHJvdmlkZWQgYXMgYF9pZGAgaW5zdGVhZCBvZgogICAgYGlkYCwgeW91IGNh
3578
+ biBzcGVjaWZ5IGhvdyB0byBub3JtYWxpemUganVzdCB0aGUgY29tbWVudHM6
3579
+ CgogICAgYGBganMKICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RT
3580
+ ZXJpYWxpemVyLmV4dGVuZCh7CiAgICAgIG5vcm1hbGl6ZUhhc2g6IHsKICAg
3581
+ ICAgICBjb21tZW50czogZnVuY3Rpb24oaGFzaCkgewogICAgICAgICAgaGFz
3582
+ aC5pZCA9IGhhc2guX2lkOwogICAgICAgICAgZGVsZXRlIGhhc2guX2lkOwog
3583
+ ICAgICAgICAgcmV0dXJuIGhhc2g7CiAgICAgICAgfQogICAgICB9CiAgICB9
3584
+ KTsKICAgIGBgYAoKICAgIFRoZSBrZXkgdW5kZXIgYG5vcm1hbGl6ZUhhc2hg
3585
+ IGlzIGp1c3QgdGhlIG9yaWdpbmFsIGtleSB0aGF0IHdhcyBpbiB0aGUgb3Jp
3586
+ Z2luYWwKICAgIHBheWxvYWQuCgogICAgQG1ldGhvZCBub3JtYWxpemUKICAg
3587
+ IEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKICAgIEBwYXJh
3588
+ bSB7U3RyaW5nfSBwcm9wCiAgICBAcGFyYW0ge09iamVjdH0gaGFzaAogICAg
3589
+ QHJldHVybnMgT2JqZWN0CiAgKi8KICBub3JtYWxpemU6IGZ1bmN0aW9uKHR5
3590
+ cGUsIHByb3AsIGhhc2gpIHsKICAgIHRoaXMubm9ybWFsaXplSWQoaGFzaCk7
3591
+ CiAgICB0aGlzLm5vcm1hbGl6ZUF0dHJpYnV0ZXMoaGFzaCk7CgogICAgaWYg
3592
+ KHRoaXMubm9ybWFsaXplSGFzaCAmJiB0aGlzLm5vcm1hbGl6ZUhhc2hbcHJv
3593
+ cF0pIHsKICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplSGFzaFtwcm9wXSho
3594
+ YXNoKTsKICAgIH0KCiAgICByZXR1cm4gaGFzaDsKICB9LAoKICAvKioKICAg
3595
+ IEBtZXRob2Qgbm9ybWFsaXplSWQKICAgIEBwcml2YXRlCiAgKi8KICBub3Jt
3596
+ YWxpemVJZDogZnVuY3Rpb24oaGFzaCkgewogICAgdmFyIHByaW1hcnlLZXkg
3597
+ PSBnZXQodGhpcywgJ3ByaW1hcnlLZXknKTsKCiAgICBpZiAocHJpbWFyeUtl
3598
+ eSA9PT0gJ2lkJykgeyByZXR1cm47IH0KCiAgICBoYXNoLmlkID0gaGFzaFtw
3599
+ cmltYXJ5S2V5XTsKICAgIGRlbGV0ZSBoYXNoW3ByaW1hcnlLZXldOwogIH0s
3600
+ CgogIC8qKgogICAgQG1ldGhvZCBub3JtYWxpemVBdHRyaWJ1dGVzCiAgICBA
3601
+ cHJpdmF0ZQogICovCiAgbm9ybWFsaXplQXR0cmlidXRlczogZnVuY3Rpb24o
3602
+ aGFzaCkgewogICAgdmFyIGF0dHJzID0gZ2V0KHRoaXMsICdhdHRycycpOwoK
3603
+ ICAgIGlmICghYXR0cnMpIHsgcmV0dXJuOyB9CgogICAgZm9yICh2YXIga2V5
3604
+ IGluIGF0dHJzKSB7CiAgICAgIHZhciBwYXlsb2FkS2V5ID0gYXR0cnNba2V5
3605
+ XTsKCiAgICAgIGhhc2hba2V5XSA9IGhhc2hbcGF5bG9hZEtleV07CiAgICAg
3606
+ IGRlbGV0ZSBoYXNoW3BheWxvYWRLZXldOwogICAgfQogIH0sCgogIC8qKgog
3607
+ ICAgQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciBoYXMgcmV0dXJuZWQgYSBwYXls
3608
+ b2FkIHJlcHJlc2VudGluZwogICAgYSBzaW5nbGUgcmVjb3JkLCBzdWNoIGFz
3609
+ IGluIHJlc3BvbnNlIHRvIGEgYGZpbmRgIG9yIGBzYXZlYC4KCiAgICBJdCBp
3610
+ cyB5b3VyIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHRoZSBzZXJ2ZXIncyBy
3611
+ ZXNwb25zZSBpbnRvIHRoZSBub3JtYWxpemVkCiAgICBmb3JtIGV4cGVjdGVk
3612
+ IGJ5IEVtYmVyIERhdGEuCgogICAgSWYgeW91IHdhbnQsIHlvdSBjYW4ganVz
3613
+ dCByZXN0cnVjdHVyZSB0aGUgdG9wLWxldmVsIG9mIHlvdXIgcGF5bG9hZCwg
3614
+ YW5kCiAgICBkbyBtb3JlIGZpbmUtZ3JhaW5lZCBub3JtYWxpemF0aW9uIGlu
3615
+ IHRoZSBgbm9ybWFsaXplYCBtZXRob2QuCgogICAgRm9yIGV4YW1wbGUsIGlm
3616
+ IHlvdSBoYXZlIGEgcGF5bG9hZCBsaWtlIHRoaXMgaW4gcmVzcG9uc2UgdG8g
3617
+ YSByZXF1ZXN0IGZvcgogICAgcG9zdCAxOgoKICAgIGBgYGpzCiAgICB7CiAg
3618
+ ICAgICJpZCI6IDEsCiAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNl
3619
+ IiwKCiAgICAgICJfZW1iZWRkZWQiOiB7CiAgICAgICAgImNvbW1lbnQiOiBb
3620
+ ewogICAgICAgICAgIl9pZCI6IDEsCiAgICAgICAgICAiY29tbWVudF90aXRs
3621
+ ZSI6ICJGSVJTVCIKICAgICAgICB9LCB7CiAgICAgICAgICAiX2lkIjogMiwK
3622
+ ICAgICAgICAgICJjb21tZW50X3RpdGxlIjogIlJhaWxzIGlzIHVuYWdpIgog
3623
+ ICAgICAgIH1dCiAgICAgIH0KICAgIH0KICAgIGBgYAoKICAgIFlvdSBjb3Vs
3624
+ ZCBpbXBsZW1lbnQgYSBzZXJpYWxpemVyIHRoYXQgbG9va3MgbGlrZSB0aGlz
3625
+ IHRvIGdldCB5b3VyIHBheWxvYWQKICAgIGludG8gc2hhcGU6CgogICAgYGBg
3626
+ anMKICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVy
3627
+ LmV4dGVuZCh7CiAgICAgIC8vIEZpcnN0LCByZXN0cnVjdHVyZSB0aGUgdG9w
3628
+ LWxldmVsIHNvIGl0J3Mgb3JnYW5pemVkIGJ5IHR5cGUKICAgICAgZXh0cmFj
3629
+ dFNpbmdsZTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHBheWxvYWQsIGlkLCBy
3630
+ ZXF1ZXN0VHlwZSkgewogICAgICAgIHZhciBjb21tZW50cyA9IHBheWxvYWQu
3631
+ X2VtYmVkZGVkLmNvbW1lbnQ7CiAgICAgICAgZGVsZXRlIHBheWxvYWQuX2Vt
3632
+ YmVkZGVkOwoKICAgICAgICBwYXlsb2FkID0geyBjb21tZW50czogY29tbWVu
3633
+ dHMsIHBvc3Q6IHBheWxvYWQgfTsKICAgICAgICByZXR1cm4gdGhpcy5fc3Vw
3634
+ ZXIoc3RvcmUsIHR5cGUsIHBheWxvYWQsIGlkLCByZXF1ZXN0VHlwZSk7CiAg
3635
+ ICAgIH0sCgogICAgICBub3JtYWxpemVIYXNoOiB7CiAgICAgICAgLy8gTmV4
3636
+ dCwgbm9ybWFsaXplIGluZGl2aWR1YWwgY29tbWVudHMsIHdoaWNoIChhZnRl
3637
+ ciBgZXh0cmFjdGApCiAgICAgICAgLy8gYXJlIG5vdyBsb2NhdGVkIHVuZGVy
3638
+ IGBjb21tZW50c2AKICAgICAgICBjb21tZW50czogZnVuY3Rpb24oaGFzaCkg
3639
+ ewogICAgICAgICAgaGFzaC5pZCA9IGhhc2guX2lkOwogICAgICAgICAgaGFz
3640
+ aC50aXRsZSA9IGhhc2guY29tbWVudF90aXRsZTsKICAgICAgICAgIGRlbGV0
3641
+ ZSBoYXNoLl9pZDsKICAgICAgICAgIGRlbGV0ZSBoYXNoLmNvbW1lbnRfdGl0
3642
+ bGU7CiAgICAgICAgICByZXR1cm4gaGFzaDsKICAgICAgICB9CiAgICAgIH0K
3643
+ ICAgIH0pCiAgICBgYGAKCiAgICBXaGVuIHlvdSBjYWxsIHN1cGVyIGZyb20g
3644
+ eW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgYGV4dHJhY3RTaW5nbGVgLCB0
3645
+ aGUKICAgIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIHdpbGwgZmluZCB0aGUg
3646
+ cHJpbWFyeSByZWNvcmQgaW4geW91ciBub3JtYWxpemVkCiAgICBwYXlsb2Fk
3647
+ IGFuZCBwdXNoIHRoZSByZW1haW5pbmcgcmVjb3JkcyBpbnRvIHRoZSBzdG9y
3648
+ ZS4KCiAgICBUaGUgcHJpbWFyeSByZWNvcmQgaXMgdGhlIHNpbmdsZSBoYXNo
3649
+ IGZvdW5kIHVuZGVyIGBwb3N0YCBvciB0aGUgZmlyc3QKICAgIGVsZW1lbnQg
3650
+ b2YgdGhlIGBwb3N0c2AgYXJyYXkuCgogICAgVGhlIHByaW1hcnkgcmVjb3Jk
3651
+ IGhhcyBzcGVjaWFsIG1lYW5pbmcgd2hlbiB0aGUgcmVjb3JkIGlzIGJlaW5n
3652
+ IGNyZWF0ZWQKICAgIGZvciB0aGUgZmlyc3QgdGltZSBvciB1cGRhdGVkIChg
3653
+ Y3JlYXRlUmVjb3JkYCBvciBgdXBkYXRlUmVjb3JkYCkuIEluCiAgICBwYXJ0
3654
+ aWN1bGFyLCBpdCB3aWxsIHVwZGF0ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUg
3655
+ cmVjb3JkIHRoYXQgd2FzIHNhdmVkLgoKICAgIEBwYXJhbSB7RFMuU3RvcmV9
3656
+ IHN0b3JlCiAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
3657
+ CiAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAogICAgQHBhcmFtIHtTdHJp
3658
+ bmd9IGlkCiAgICBAcGFyYW0geydmaW5kJ3wnY3JlYXRlUmVjb3JkJ3wndXBk
3659
+ YXRlUmVjb3JkJ3wnZGVsZXRlUmVjb3JkJ30gcmVxdWVzdFR5cGUKICAgIEBy
3660
+ ZXR1cm5zIE9iamVjdCB0aGUgcHJpbWFyeSByZXNwb25zZSB0byB0aGUgb3Jp
3661
+ Z2luYWwgcmVxdWVzdAogICovCiAgZXh0cmFjdFNpbmdsZTogZnVuY3Rpb24o
3662
+ c3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2FkLCByZWNvcmRJZCwgcmVxdWVz
3663
+ dFR5cGUpIHsKICAgIHZhciBwcmltYXJ5VHlwZU5hbWUgPSBwcmltYXJ5VHlw
3664
+ ZS50eXBlS2V5LAogICAgICAgIHByaW1hcnlSZWNvcmQ7CgogICAgZm9yICh2
3665
+ YXIgcHJvcCBpbiBwYXlsb2FkKSB7CiAgICAgIC8vIGxlZ2FjeSBzdXBwb3J0
3666
+ IGZvciBzaW5ndWxhciBuYW1lcwogICAgICBpZiAocHJvcCA9PT0gcHJpbWFy
3667
+ eVR5cGVOYW1lKSB7CiAgICAgICAgcHJpbWFyeVJlY29yZCA9IHRoaXMubm9y
3668
+ bWFsaXplKHByaW1hcnlUeXBlLCBwcm9wLCBwYXlsb2FkW3Byb3BdKTsKICAg
3669
+ ICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgdmFyIHR5cGVOYW1lID0g
3670
+ dGhpcy5zaW5ndWxhcml6ZShwcm9wKSwKICAgICAgICAgIHR5cGUgPSBzdG9y
3671
+ ZS5tb2RlbEZvcih0eXBlTmFtZSk7CgogICAgICAvKmpzaGludCBsb29wZnVu
3672
+ Yzp0cnVlKi8KICAgICAgcGF5bG9hZFtwcm9wXS5mb3JFYWNoKGZ1bmN0aW9u
3673
+ KGhhc2gpIHsKICAgICAgICBoYXNoID0gdGhpcy5ub3JtYWxpemUodHlwZSwg
3674
+ cHJvcCwgaGFzaCk7CgogICAgICAgIHZhciBpc0ZpcnN0Q3JlYXRlZFJlY29y
3675
+ ZCA9IHR5cGVOYW1lID09PSBwcmltYXJ5VHlwZU5hbWUgJiYgIXJlY29yZElk
3676
+ ICYmICFwcmltYXJ5UmVjb3JkLAogICAgICAgICAgICBpc1VwZGF0ZWRSZWNv
3677
+ cmQgPSB0eXBlTmFtZSA9PT0gcHJpbWFyeVR5cGVOYW1lICYmIGNvZXJjZUlk
3678
+ KGhhc2guaWQpID09PSByZWNvcmRJZDsKCiAgICAgICAgLy8gZmluZCB0aGUg
3679
+ cHJpbWFyeSByZWNvcmQuCiAgICAgICAgLy8KICAgICAgICAvLyBJdCdzIGVp
3680
+ dGhlcjoKICAgICAgICAvLyAqIHRoZSByZWNvcmQgd2l0aCB0aGUgc2FtZSBJ
3681
+ RCBhcyB0aGUgb3JpZ2luYWwgcmVxdWVzdAogICAgICAgIC8vICogaW4gdGhl
3682
+ IGNhc2Ugb2YgYSBuZXdseSBjcmVhdGVkIHJlY29yZCB0aGF0IGRpZG4ndCBo
3683
+ YXZlIGFuIElELCB0aGUgZmlyc3QKICAgICAgICAvLyAgIHJlY29yZCBpbiB0
3684
+ aGUgQXJyYXkKICAgICAgICBpZiAoaXNGaXJzdENyZWF0ZWRSZWNvcmQgfHwg
3685
+ aXNVcGRhdGVkUmVjb3JkKSB7CiAgICAgICAgICBwcmltYXJ5UmVjb3JkID0g
3686
+ aGFzaDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RvcmUucHVzaCh0
3687
+ eXBlTmFtZSwgaGFzaCk7CiAgICAgICAgfQogICAgICB9LCB0aGlzKTsKICAg
3688
+ IH0KCiAgICByZXR1cm4gcHJpbWFyeVJlY29yZDsKICB9LAoKICAvKioKICAg
3689
+ IENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgaGFzIHJldHVybmVkIGEgcGF5bG9h
3690
+ ZCByZXByZXNlbnRpbmcKICAgIG11bHRpcGxlIHJlY29yZHMsIHN1Y2ggYXMg
3691
+ aW4gcmVzcG9uc2UgdG8gYSBgZmluZEFsbGAgb3IgYGZpbmRRdWVyeWAuCgog
3692
+ ICAgSXQgaXMgeW91ciBvcHBvcnR1bml0eSB0byBjbGVhbiB1cCB0aGUgc2Vy
3693
+ dmVyJ3MgcmVzcG9uc2UgaW50byB0aGUgbm9ybWFsaXplZAogICAgZm9ybSBl
3694
+ eHBlY3RlZCBieSBFbWJlciBEYXRhLgoKICAgIElmIHlvdSB3YW50LCB5b3Ug
3695
+ Y2FuIGp1c3QgcmVzdHJ1Y3R1cmUgdGhlIHRvcC1sZXZlbCBvZiB5b3VyIHBh
3696
+ eWxvYWQsIGFuZAogICAgZG8gbW9yZSBmaW5lLWdyYWluZWQgbm9ybWFsaXph
3697
+ dGlvbiBpbiB0aGUgYG5vcm1hbGl6ZWAgbWV0aG9kLgoKICAgIEZvciBleGFt
3698
+ cGxlLCBpZiB5b3UgaGF2ZSBhIHBheWxvYWQgbGlrZSB0aGlzIGluIHJlc3Bv
3699
+ bnNlIHRvIGEgcmVxdWVzdCBmb3IKICAgIGFsbCBwb3N0czoKCiAgICBgYGBq
3700
+ cwogICAgewogICAgICAiX2VtYmVkZGVkIjogewogICAgICAgICJwb3N0Ijog
3701
+ W3sKICAgICAgICAgICJpZCI6IDEsCiAgICAgICAgICAidGl0bGUiOiAiUmFp
3702
+ bHMgaXMgb21ha2FzZSIKICAgICAgICB9LCB7CiAgICAgICAgICAiaWQiOiAy
3703
+ LAogICAgICAgICAgInRpdGxlIjogIlRoZSBQYXJsZXkgTGV0dGVyIgogICAg
3704
+ ICAgIH1dLAogICAgICAgICJjb21tZW50IjogW3sKICAgICAgICAgICJfaWQi
3705
+ OiAxLAogICAgICAgICAgImNvbW1lbnRfdGl0bGUiOiAiUmFpbHMgaXMgdW5h
3706
+ Z2kiCiAgICAgICAgICAicG9zdF9pZCI6IDEKICAgICAgICB9LCB7CiAgICAg
3707
+ ICAgICAiX2lkIjogMiwKICAgICAgICAgICJjb21tZW50X3RpdGxlIjogIkRv
3708
+ bid0IHRyZWFkIG9uIG1lIiwKICAgICAgICAgICJwb3N0X2lkIjogMgogICAg
3709
+ ICAgIH1dCiAgICAgIH0KICAgIH0KICAgIGBgYAoKICAgIFlvdSBjb3VsZCBp
3710
+ bXBsZW1lbnQgYSBzZXJpYWxpemVyIHRoYXQgbG9va3MgbGlrZSB0aGlzIHRv
3711
+ IGdldCB5b3VyIHBheWxvYWQKICAgIGludG8gc2hhcGU6CgogICAgYGBganMK
3712
+ ICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4
3713
+ dGVuZCh7CiAgICAgIC8vIEZpcnN0LCByZXN0cnVjdHVyZSB0aGUgdG9wLWxl
3714
+ dmVsIHNvIGl0J3Mgb3JnYW5pemVkIGJ5IHR5cGUKICAgICAgLy8gYW5kIHRo
3715
+ ZSBjb21tZW50cyBhcmUgbGlzdGVkIHVuZGVyIGEgcG9zdCdzIGBjb21tZW50
3716
+ c2Aga2V5LgogICAgICBleHRyYWN0QXJyYXk6IGZ1bmN0aW9uKHN0b3JlLCB0
3717
+ eXBlLCBwYXlsb2FkLCBpZCwgcmVxdWVzdFR5cGUpIHsKICAgICAgICB2YXIg
3718
+ cG9zdHMgPSBwYXlsb2FkLl9lbWJlZGRlZC5wb3N0OwogICAgICAgIHZhciBj
3719
+ b21tZW50cyA9IFtdOwogICAgICAgIHZhciBwb3N0Q2FjaGUgPSB7fTsKCiAg
3720
+ ICAgICAgcG9zdHMuZm9yRWFjaChmdW5jdGlvbihwb3N0KSB7CiAgICAgICAg
3721
+ ICBwb3N0LmNvbW1lbnRzID0gW107CiAgICAgICAgICBwb3N0Q2FjaGVbcG9z
3722
+ dC5pZF0gPSBwb3N0OwogICAgICAgIH0pOwoKICAgICAgICBwYXlsb2FkLl9l
3723
+ bWJlZGRlZC5jb21tZW50LmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkgewog
3724
+ ICAgICAgICAgY29tbWVudHMucHVzaChjb21tZW50KTsKICAgICAgICAgIHBv
3725
+ c3RDYWNoZVtjb21tZW50LnBvc3RfaWRdLmNvbW1lbnRzLnB1c2goY29tbWVu
3726
+ dCk7CiAgICAgICAgICBkZWxldGUgY29tbWVudC5wb3N0X2lkOwogICAgICAg
3727
+ IH0KCiAgICAgICAgcGF5bG9hZCA9IHsgY29tbWVudHM6IGNvbW1lbnRzLCBw
3728
+ b3N0czogcGF5bG9hZCB9OwoKICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIo
3729
+ c3RvcmUsIHR5cGUsIHBheWxvYWQsIGlkLCByZXF1ZXN0VHlwZSk7CiAgICAg
3730
+ IH0sCgogICAgICBub3JtYWxpemVIYXNoOiB7CiAgICAgICAgLy8gTmV4dCwg
3731
+ bm9ybWFsaXplIGluZGl2aWR1YWwgY29tbWVudHMsIHdoaWNoIChhZnRlciBg
3732
+ ZXh0cmFjdGApCiAgICAgICAgLy8gYXJlIG5vdyBsb2NhdGVkIHVuZGVyIGBj
3733
+ b21tZW50c2AKICAgICAgICBjb21tZW50czogZnVuY3Rpb24oaGFzaCkgewog
3734
+ ICAgICAgICAgaGFzaC5pZCA9IGhhc2guX2lkOwogICAgICAgICAgaGFzaC50
3735
+ aXRsZSA9IGhhc2guY29tbWVudF90aXRsZTsKICAgICAgICAgIGRlbGV0ZSBo
3736
+ YXNoLl9pZDsKICAgICAgICAgIGRlbGV0ZSBoYXNoLmNvbW1lbnRfdGl0bGU7
3737
+ CiAgICAgICAgICByZXR1cm4gaGFzaDsKICAgICAgICB9CiAgICAgIH0KICAg
3738
+ IH0pCiAgICBgYGAKCiAgICBXaGVuIHlvdSBjYWxsIHN1cGVyIGZyb20geW91
3739
+ ciBvd24gaW1wbGVtZW50YXRpb24gb2YgYGV4dHJhY3RBcnJheWAsIHRoZQog
3740
+ ICAgYnVpbHQtaW4gaW1wbGVtZW50YXRpb24gd2lsbCBmaW5kIHRoZSBwcmlt
3741
+ YXJ5IGFycmF5IGluIHlvdXIgbm9ybWFsaXplZAogICAgcGF5bG9hZCBhbmQg
3742
+ cHVzaCB0aGUgcmVtYWluaW5nIHJlY29yZHMgaW50byB0aGUgc3RvcmUuCgog
3743
+ ICAgVGhlIHByaW1hcnkgYXJyYXkgaXMgdGhlIGFycmF5IGZvdW5kIHVuZGVy
3744
+ IGBwb3N0c2AuCgogICAgVGhlIHByaW1hcnkgcmVjb3JkIGhhcyBzcGVjaWFs
3745
+ IG1lYW5pbmcgd2hlbiByZXNwb25kaW5nIHRvIGBmaW5kUXVlcnlgCiAgICBv
3746
+ ciBgZmluZEhhc01hbnlgLiBJbiBwYXJ0aWN1bGFyLCB0aGUgcHJpbWFyeSBh
3747
+ cnJheSB3aWxsIGJlY29tZSB0aGUKICAgIGxpc3Qgb2YgcmVjb3JkcyBpbiB0
3748
+ aGUgcmVjb3JkIGFycmF5IHRoYXQga2lja2VkIG9mZiB0aGUgcmVxdWVzdC4K
3749
+ CiAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQogICAgQHBhcmFtIHtzdWJj
3750
+ bGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQogICAgQHBhcmFtIHtPYmplY3R9IHBh
3751
+ eWxvYWQKICAgIEBwYXJhbSB7J2ZpbmRBbGwnfCdmaW5kTWFueSd8J2ZpbmRI
3752
+ YXNNYW55J3wnZmluZFF1ZXJ5J30gcmVxdWVzdFR5cGUKICAgIEByZXR1cm5z
3753
+ IHtBcnJheTxPYmplY3Q+fSBUaGUgcHJpbWFyeSBhcnJheSB0aGF0IHdhcyBy
3754
+ ZXR1cm5lZCBpbiByZXNwb25zZQogICAgICB0byB0aGUgb3JpZ2luYWwgcXVl
3755
+ cnkuCiAgKi8KICBleHRyYWN0QXJyYXk6IGZ1bmN0aW9uKHN0b3JlLCBwcmlt
3756
+ YXJ5VHlwZSwgcGF5bG9hZCkgewogICAgdmFyIHByaW1hcnlUeXBlTmFtZSA9
3757
+ IHByaW1hcnlUeXBlLnR5cGVLZXksCiAgICAgICAgcHJpbWFyeUFycmF5OwoK
3758
+ ICAgIGZvciAodmFyIHByb3AgaW4gcGF5bG9hZCkgewogICAgICB2YXIgdHlw
3759
+ ZU5hbWUgPSB0aGlzLnNpbmd1bGFyaXplKHByb3ApLAogICAgICAgICAgdHlw
3760
+ ZSA9IHN0b3JlLm1vZGVsRm9yKHR5cGVOYW1lKSwKICAgICAgICAgIGlzUHJp
3761
+ bWFyeSA9IHR5cGVOYW1lID09PSBwcmltYXJ5VHlwZU5hbWU7CgogICAgICAv
3762
+ KmpzaGludCBsb29wZnVuYzp0cnVlKi8KICAgICAgdmFyIG5vcm1hbGl6ZWRB
3763
+ cnJheSA9IHBheWxvYWRbcHJvcF0ubWFwKGZ1bmN0aW9uKGhhc2gpIHsKICAg
3764
+ ICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUodHlwZSwgcHJvcCwgaGFzaCk7
3765
+ CiAgICAgIH0sIHRoaXMpOwoKICAgICAgaWYgKGlzUHJpbWFyeSkgewogICAg
3766
+ ICAgIHByaW1hcnlBcnJheSA9IG5vcm1hbGl6ZWRBcnJheTsKICAgICAgfSBl
3767
+ bHNlIHsKICAgICAgICBzdG9yZS5wdXNoTWFueSh0eXBlTmFtZSwgbm9ybWFs
3768
+ aXplZEFycmF5KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcmltYXJ5
3769
+ QXJyYXk7CiAgfSwKCiAgLyoqCiAgICBAcHJpdmF0ZQogICAgQG1ldGhvZCBw
3770
+ bHVyYWxpemUKICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKICAqLwogIHBsdXJh
3771
+ bGl6ZTogZnVuY3Rpb24oa2V5KSB7CiAgICByZXR1cm4gRW1iZXIuU3RyaW5n
3772
+ LnBsdXJhbGl6ZShrZXkpOwogIH0sCgogIC8qKgogICAgQHByaXZhdGUKICAg
3773
+ IEBtZXRob2Qgc2luZ3VsYXJpemUKICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkK
3774
+ ICAqLwogIHNpbmd1bGFyaXplOiBmdW5jdGlvbihrZXkpIHsKICAgIHJldHVy
3775
+ biBFbWJlci5TdHJpbmcuc2luZ3VsYXJpemUoa2V5KTsKICB9LAoKICAvLyBT
3776
+ RVJJQUxJWkUKCiAgLyoqCiAgICBDYWxsZWQgd2hlbiBhIHJlY29yZCBpcyBz
3777
+ YXZlZCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZQogICAgcmVjb3JkIGludG8g
3778
+ SlNPTi4KCiAgICBCeSBkZWZhdWx0LCBpdCBjcmVhdGVzIGEgSlNPTiBvYmpl
3779
+ Y3Qgd2l0aCBhIGtleSBmb3IKICAgIGVhY2ggYXR0cmlidXRlIGFuZCBiZWxv
3780
+ bmdzVG8gcmVsYXRpb25zaGlwLgoKICAgIEZvciBleGFtcGxlLCBjb25zaWRl
3781
+ ciB0aGlzIG1vZGVsOgoKICAgIGBgYGpzCiAgICBBcHAuQ29tbWVudCA9IERT
3782
+ Lk1vZGVsLmV4dGVuZCh7CiAgICAgIHRpdGxlOiBEUy5hdHRyKCksCiAgICAg
3783
+ IGJvZHk6IERTLmF0dHIoKSwKCiAgICAgIGF1dGhvcjogRFMuYmVsb25nc1Rv
3784
+ KCd1c2VyJykKICAgIH0pOwogICAgYGBgCgogICAgVGhlIGRlZmF1bHQgc2Vy
3785
+ aWFsaXphdGlvbiB3b3VsZCBjcmVhdGUgYSBKU09OIG9iamVjdCBsaWtlOgoK
3786
+ ICAgIGBgYGpzCiAgICB7CiAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyB1bmFn
3787
+ aSIsCiAgICAgICJib2R5IjogIlJhaWxzPyBPbWFrYXNlPyBPX08iLAogICAg
3788
+ ICAiYXV0aG9yIjogMTIKICAgIH0KICAgIGBgYAoKICAgIEJ5IGRlZmF1bHQs
3789
+ IGF0dHJpYnV0ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzLCB1bmxlc3MK
3790
+ ICAgIHlvdSBzcGVjaWZpZWQgYW4gYXR0cmlidXRlIHR5cGUgKGBEUy5hdHRy
3791
+ KCdkYXRlJylgKS4gSWYKICAgIHlvdSBzcGVjaWZ5IGEgdHJhbnNmb3JtLCB0
3792
+ aGUgSmF2YVNjcmlwdCB2YWx1ZSB3aWxsIGJlCiAgICBzZXJpYWxpemVkIHdo
3793
+ ZW4gaW5zZXJ0ZWQgaW50byB0aGUgSlNPTiBoYXNoLgoKICAgIEJ5IGRlZmF1
3794
+ bHQsIGJlbG9uZ3MtdG8gcmVsYXRpb25zaGlwcyBhcmUgY29udmVydGVkIGlu
3795
+ dG8KICAgIElEcyB3aGVuIGluc2VydGVkIGludG8gdGhlIEpTT04gaGFzaC4K
3796
+ CiAgICAjIyBJRHMKCiAgICBgc2VyaWFsaXplYCB0YWtlcyBhbiBvcHRpb25z
3797
+ IGhhc2ggd2l0aCBhIHNpbmdsZSBvcHRpb246CiAgICBgaW5jbHVkZUlkYC4g
3798
+ SWYgdGhpcyBvcHRpb24gaXMgYHRydWVgLCBgc2VyaWFsaXplYCB3aWxsLAog
3799
+ ICAgYnkgZGVmYXVsdCBpbmNsdWRlIHRoZSBJRCBpbiB0aGUgSlNPTiBvYmpl
3800
+ Y3QgaXQgYnVpbGRzLgoKICAgIFRoZSBhZGFwdGVyIHBhc3NlcyBpbiBgaW5j
3801
+ bHVkZUlkOiB0cnVlYCB3aGVuIHNlcmlhbGl6aW5nCiAgICBhIHJlY29yZCBm
3802
+ b3IgYGNyZWF0ZVJlY29yZGAsIGJ1dCBub3QgZm9yIGB1cGRhdGVSZWNvcmRg
3803
+ LgoKICAgICMjIEN1c3RvbWl6YXRpb24KCiAgICBZb3VyIHNlcnZlciBtYXkg
3804
+ ZXhwZWN0IGEgZGlmZmVyZW50IEpTT04gZm9ybWF0IHRoYW4gdGhlCiAgICBi
3805
+ dWlsdC1pbiBzZXJpYWxpemF0aW9uIGZvcm1hdC4KCiAgICBJbiB0aGF0IGNh
3806
+ c2UsIHlvdSBjYW4gaW1wbGVtZW50IGBzZXJpYWxpemVgIHlvdXJzZWxmIGFu
3807
+ ZAogICAgcmV0dXJuIGEgSlNPTiBoYXNoIG9mIHlvdXIgY2hvb3NpbmcuCgog
3808
+ ICAgYGBganMKICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJp
3809
+ YWxpemVyLmV4dGVuZCh7CiAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24ocG9z
3810
+ dCwgb3B0aW9ucykgewogICAgICAgIHZhciBqc29uID0gewogICAgICAgICAg
3811
+ UE9TVF9UVEw6IHBvc3QuZ2V0KCd0aXRsZScpLAogICAgICAgICAgUE9TVF9C
3812
+ RFk6IHBvc3QuZ2V0KCdib2R5JyksCiAgICAgICAgICBQT1NUX0NNUzogcG9z
3813
+ dC5nZXQoJ2NvbW1lbnRzJykubWFwUHJvcGVydHkoJ2lkJykKICAgICAgICB9
3814
+ CgogICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJZCkgewogICAgICAgICAg
3815
+ anNvbi5QT1NUX0lEXyA9IHBvc3QuZ2V0KCdpZCcpOwogICAgICAgIH0KCiAg
3816
+ ICAgICAgcmV0dXJuIGpzb247CiAgICAgIH0KICAgIH0pOwogICAgYGBgCgog
3817
+ ICAgIyMgQ3VzdG9taXppbmcgYW4gQXBwLVdpZGUgU2VyaWFsaXplcgoKICAg
3818
+ IElmIHlvdSB3YW50IHRvIGRlZmluZSBhIHNlcmlhbGl6ZXIgZm9yIHlvdXIg
3819
+ ZW50aXJlCiAgICBhcHBsaWNhdGlvbiwgeW91J2xsIHByb2JhYmx5IHdhbnQg
3820
+ dG8gdXNlIGBlYWNoQXR0cmlidXRlYAogICAgYW5kIGBlYWNoUmVsYXRpb25z
3821
+ aGlwYCBvbiB0aGUgcmVjb3JkLgoKICAgIGBgYGpzCiAgICBBcHAuQXBwbGlj
3822
+ YXRpb25TZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsK
3823
+ ICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbihyZWNvcmQsIG9wdGlvbnMpIHsK
3824
+ ICAgICAgICB2YXIganNvbiA9IHt9OwoKICAgICAgICByZWNvcmQuZWFjaEF0
3825
+ dHJpYnV0ZShmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICBqc29uW3NlcnZl
3826
+ ckF0dHJpYnV0ZU5hbWUobmFtZSldID0gcmVjb3JkLmdldChuYW1lKTsKICAg
3827
+ ICAgICB9KQoKICAgICAgICByZWNvcmQuZWFjaFJlbGF0aW9uc2hpcChmdW5j
3828
+ dGlvbihuYW1lLCByZWxhdGlvbnNoaXApIHsKICAgICAgICAgIGlmIChyZWxh
3829
+ dGlvbnNoaXAua2luZCA9PT0gJ2hhc01hbnknKSB7CiAgICAgICAgICAgIGpz
3830
+ b25bc2VydmVySGFzTWFueU5hbWUobmFtZSldID0gcmVjb3JkLmdldChuYW1l
3831
+ KS5tYXBCeSgnaWQnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAg
3832
+ ICAgaWYgKG9wdGlvbnMuaW5jbHVkZUlkKSB7CiAgICAgICAgICBqc29uLklE
3833
+ XyA9IHJlY29yZC5nZXQoJ2lkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1
3834
+ cm4ganNvbjsKICAgICAgfQogICAgfSk7CgogICAgZnVuY3Rpb24gc2VydmVy
3835
+ QXR0cmlidXRlTmFtZShhdHRyaWJ1dGUpIHsKICAgICAgcmV0dXJuIGF0dHJp
3836
+ YnV0ZS51bmRlcnNjb3JlKCkudG9VcHBlckNhc2UoKTsKICAgIH0KCiAgICBm
3837
+ dW5jdGlvbiBzZXJ2ZXJIYXNNYW55TmFtZShuYW1lKSB7CiAgICAgIHJldHVy
3838
+ biBzZXJ2ZXJBdHRyaWJ1dGVOYW1lKG5hbWUuc2luZ3VsYXJpemUoKSkgKyAi
3839
+ X0lEUyI7CiAgICB9CiAgICBgYGAKCiAgICBUaGlzIHNlcmlhbGl6ZXIgd2ls
3840
+ bCBnZW5lcmF0ZSBKU09OIHRoYXQgbG9va3MgbGlrZSB0aGlzOgoKICAgIGBg
3841
+ YGpzCiAgICB7CiAgICAgICJUSVRMRSI6ICJSYWlscyBpcyBvbWFrYXNlIiwK
3842
+ ICAgICAgIkJPRFkiOiAiWWVwLiBPbWFrYXNlLiIsCiAgICAgICJDT01NRU5U
3843
+ X0lEUyI6IFsgMSwgMiwgMyBdCiAgICB9CiAgICBgYGAKCiAgICAjIyBUd2Vh
3844
+ a2luZyB0aGUgRGVmYXVsdCBKU09OCgogICAgSWYgeW91IGp1c3Qgd2FudCB0
3845
+ byBkbyBzb21lIHNtYWxsIHR3ZWFrcyBvbiB0aGUgZGVmYXVsdCBKU09OLAog
3846
+ ICAgeW91IGNhbiBjYWxsIHN1cGVyIGZpcnN0IGFuZCBtYWtlIHRoZSB0d2Vh
3847
+ a3Mgb24gdGhlIHJldHVybmVkCiAgICBKU09OLgoKICAgIGBgYGpzCiAgICBB
3848
+ cHAuUG9zdFNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQo
3849
+ ewogICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9ucykg
3850
+ ewogICAgICAgIHZhciBqc29uID0gdGhpcy5fc3VwZXIocmVjb3JkLCBvcHRp
3851
+ b25zKTsKCiAgICAgICAganNvbi5zdWJqZWN0ID0ganNvbi50aXRsZTsKICAg
3852
+ ICAgICBkZWxldGUganNvbi50aXRsZTsKCiAgICAgICAgcmV0dXJuIGpzb247
3853
+ CiAgICAgIH0KICAgIH0pOwogICAgYGBgCiAgKi8KICBzZXJpYWxpemU6IGZ1
3854
+ bmN0aW9uKHJlY29yZCwgb3B0aW9ucykgewogICAgcmV0dXJuIHRoaXMuX3N1
3855
+ cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfQp9KTsKCi8qKgogIFRo
3856
+ ZSBSRVNUIGFkYXB0ZXIgYWxsb3dzIHlvdXIgc3RvcmUgdG8gY29tbXVuaWNh
3857
+ dGUgd2l0aCBhbiBIVFRQIHNlcnZlciBieQogIHRyYW5zbWl0dGluZyBKU09O
3858
+ IHZpYSBYSFIuIE1vc3QgRW1iZXIuanMgYXBwcyB0aGF0IGNvbnN1bWUgYSBK
3859
+ U09OIEFQSQogIHNob3VsZCB1c2UgdGhlIFJFU1QgYWRhcHRlci4KCiAgVGhp
3860
+ cyBhZGFwdGVyIGlzIGRlc2lnbmVkIGFyb3VuZCB0aGUgaWRlYSB0aGF0IHRo
3861
+ ZSBKU09OIGV4Y2hhbmdlZCB3aXRoCiAgdGhlIHNlcnZlciBzaG91bGQgYmUg
3862
+ Y29udmVudGlvbmFsLgoKICAjIyBKU09OIFN0cnVjdHVyZQoKICBUaGUgUkVT
3863
+ VCBhZGFwdGVyIGV4cGVjdHMgdGhlIEpTT04gcmV0dXJuZWQgZnJvbSB5b3Vy
3864
+ IHNlcnZlciB0byBmb2xsb3cKICB0aGVzZSBjb252ZW50aW9ucy4KCiAgIyMj
3865
+ IE9iamVjdCBSb290CgogIFRoZSBKU09OIHBheWxvYWQgc2hvdWxkIGJlIGFu
3866
+ IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSByZWNvcmQgaW5zaWRlIGEKICBy
3867
+ b290IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgaW4gcmVzcG9uc2UgdG8gYSBg
3868
+ R0VUYCByZXF1ZXN0IGZvcgogIGAvcG9zdHMvMWAsIHRoZSBKU09OIHNob3Vs
3869
+ ZCBsb29rIGxpa2UgdGhpczoKCiAgYGBganMKICB7CiAgICAicG9zdCI6IHsK
3870
+ ICAgICAgdGl0bGU6ICJJJ20gUnVubmluZyB0byBSZWZvcm0gdGhlIFczQydz
3871
+ IFRhZyIsCiAgICAgIGF1dGhvcjogIlllaHVkYSBLYXR6IgogICAgfQogIH0K
3872
+ ICBgYGAKCiAgIyMjIENvbnZlbnRpb25hbCBOYW1lcwoKICBBdHRyaWJ1dGUg
3873
+ bmFtZXMgaW4geW91ciBKU09OIHBheWxvYWQgc2hvdWxkIGJlIHRoZSB1bmRl
3874
+ cnNjb3JlZCB2ZXJzaW9ucyBvZgogIHRoZSBhdHRyaWJ1dGVzIGluIHlvdXIg
3875
+ RW1iZXIuanMgbW9kZWxzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUg
3876
+ YSBgUGVyc29uYCBtb2RlbDoKCiAgYGBganMKICBBcHAuUGVyc29uID0gRFMu
3877
+ TW9kZWwuZXh0ZW5kKHsKICAgIGZpcnN0TmFtZTogRFMuYXR0cignc3RyaW5n
3878
+ JyksCiAgICBsYXN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCiAgICBvY2N1
3879
+ cGF0aW9uOiBEUy5hdHRyKCdzdHJpbmcnKQogIH0pOwogIGBgYAoKICBUaGUg
3880
+ SlNPTiByZXR1cm5lZCBzaG91bGQgbG9vayBsaWtlIHRoaXM6CgogIGBgYGpz
3881
+ CiAgewogICAgInBlcnNvbiI6IHsKICAgICAgImZpcnN0X25hbWUiOiAiQmFy
3882
+ YWNrIiwKICAgICAgImxhc3RfbmFtZSI6ICJPYmFtYSIsCiAgICAgICJvY2N1
3883
+ cGF0aW9uIjogIlByZXNpZGVudCIKICAgIH0KICB9CiAgYGBgCgogICMjIEN1
3884
+ c3RvbWl6YXRpb24KCiAgIyMjIEVuZHBvaW50IHBhdGggY3VzdG9taXphdGlv
3885
+ bgoKICBFbmRwb2ludCBwYXRocyBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIGBu
3886
+ YW1lc3BhY2VgIGJ5IHNldHRpbmcgdGhlIG5hbWVzcGFjZQogIHByb3BlcnR5
3887
+ IG9uIHRoZSBhZGFwdGVyOgoKICBgYGBqcwogIERTLlJFU1RBZGFwdGVyLnJl
3888
+ b3Blbih7CiAgICBuYW1lc3BhY2U6ICdhcGkvMScKICB9KTsKICBgYGAKICBS
3889
+ ZXF1ZXN0cyBmb3IgYEFwcC5QZXJzb25gIHdvdWxkIG5vdyB0YXJnZXQgYC9h
3890
+ cGkvMS9wZW9wbGUvMWAuCgogICMjIyBIb3N0IGN1c3RvbWl6YXRpb24KCiAg
3891
+ QW4gYWRhcHRlciBjYW4gdGFyZ2V0IG90aGVyIGhvc3RzIGJ5IHNldHRpbmcg
3892
+ dGhlIGB1cmxgIHByb3BlcnR5LgoKICBgYGBqcwogIERTLlJFU1RBZGFwdGVy
3893
+ LnJlb3Blbih7CiAgICB1cmw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScK
3894
+ ICB9KTsKICBgYGAKCiAgIyMjIEhlYWRlcnMgY3VzdG9taXphdGlvbgoKICBT
3895
+ b21lIEFQSXMgcmVxdWlyZSBIVFRQIGhlYWRlcnMsIGVnIHRvIHByb3ZpZGUg
3896
+ YW4gQVBJIGtleS4gQW4gYXJyYXkgb2YKICBoZWFkZXJzIGNhbiBiZSBhZGRl
3897
+ ZCB0byB0aGUgYWRhcHRlciB3aGljaCBhcmUgcGFzc2VkIHdpdGggZXZlcnkg
3898
+ cmVxdWVzdDoKCiAgYGBganMKICBEUy5SRVNUQWRhcHRlci5yZW9wZW4oewog
3899
+ ICAgaGVhZGVyczogewogICAgICAiQVBJX0tFWSI6ICJzZWNyZXQga2V5IiwK
3900
+ ICAgICAgIkFOT1RIRVJfSEVBREVSIjogImFzZHNhZGEiCiAgICB9CiAgfSk7
3901
+ CiAgYGBgCgogIEBjbGFzcyBSRVNUQWRhcHRlcgogIEBjb25zdHJ1Y3Rvcgog
3902
+ IEBuYW1lc3BhY2UgRFMKICBAZXh0ZW5kcyBEUy5BZGFwdGVyCiovCkRTLlJF
3903
+ U1RBZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQoewogIGRlZmF1bHRTZXJp
3904
+ YWxpemVyOiAnX3Jlc3QnLAoKICAvKioKICAgIENhbGxlZCBieSB0aGUgc3Rv
3905
+ cmUgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIEpTT04gZm9yIGEgZ2l2ZW4KICAg
3906
+ IHR5cGUgYW5kIElELgoKICAgIEl0IG1ha2VzIGFuIEFqYXggcmVxdWVzdCB0
3907
+ byBhIFVSTCBjb21wdXRlZCBieSBgYnVpbGRVUkxgLCBhbmQgcmV0dXJucyBh
3908
+ CiAgICBwcm9taXNlIGZvciB0aGUgcmVzdWx0aW5nIHBheWxvYWQuCgogICAg
3909
+ QG1ldGhvZCBmaW5kCiAgICBAc2VlIFJFU1RBZGFwdGVyL2J1aWxkVVJMCiAg
3910
+ ICBAc2VlIFJFU1RBZGFwdGVyL2FqYXgKICAgIEBwYXJhbSB7RFMuU3RvcmV9
3911
+ IHN0b3JlCiAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
3912
+ CiAgICBAcGFyYW0ge1N0cmluZ30gaWQKICAgIEByZXR1cm5zIFByb21pc2UK
3913
+ ICAqLwogIGZpbmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZCkgewogICAg
3914
+ cmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUsIGlkKSwgJ0dF
3915
+ VCcpOwogIH0sCgogIC8qKgogICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSBpbiBv
3916
+ cmRlciB0byBmZXRjaCBhIEpTT04gYXJyYXkgZm9yIGFsbAogICAgb2YgdGhl
3917
+ IHJlY29yZHMgZm9yIGEgZ2l2ZW4gdHlwZS4KCiAgICBJdCBtYWtlcyBhbiBB
3918
+ amF4IHJlcXVlc3QgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYCwg
3919
+ YW5kIHJldHVybnMgYQogICAgcHJvbWlzZSBmb3IgdGhlIHJlc3VsdGluZyBw
3920
+ YXlsb2FkLgoKICAgIEBtZXRob2QgZmluZEFsbAogICAgQHNlZSBSRVNUQWRh
3921
+ cHRlci9idWlsZFVSTAogICAgQHNlZSBSRVNUQWRhcHRlci9hamF4CiAgICBA
3922
+ cGFyYW0ge0RTLlN0b3JlfSBzdG9yZQogICAgQHBhcmFtIHtzdWJjbGFzcyBv
3923
+ ZiBEUy5Nb2RlbH0gdHlwZQogICAgQHJldHVybnMgUHJvbWlzZQogICovCiAg
3924
+ ZmluZEFsbDogZnVuY3Rpb24oc3RvcmUsIHR5cGUpIHsKICAgIHJldHVybiB0
3925
+ aGlzLmFqYXgodGhpcy5idWlsZFVSTCh0eXBlKSwgJ0dFVCcpOwogIH0sCgog
3926
+ IC8qKgogICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSBpbiBvcmRlciB0byBmZXRj
3927
+ aCBhIEpTT04gYXJyYXkgZm9yCiAgICB0aGUgcmVjb3JkcyB0aGF0IG1hdGNo
3928
+ IGEgcGFydGljdWxhciBxdWVyeS4KCiAgICBUaGUgcXVlcnkgaXMgYSBzaW1w
3929
+ bGUgSmF2YVNjcmlwdCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBkaXJl
3930
+ Y3RseQogICAgdG8gdGhlIHNlcnZlciBhcyBwYXJhbWV0ZXJzLgoKICAgIEl0
3931
+ IG1ha2VzIGFuIEFqYXggcmVxdWVzdCB0byBhIFVSTCBjb21wdXRlZCBieSBg
3932
+ YnVpbGRVUkxgLCBhbmQgcmV0dXJucyBhCiAgICBwcm9taXNlIGZvciB0aGUg
3933
+ cmVzdWx0aW5nIHBheWxvYWQuCgogICAgQG1ldGhvZCBmaW5kUXVlcnkKICAg
3934
+ IEBzZWUgUkVTVEFkYXB0ZXIvYnVpbGRVUkwKICAgIEBzZWUgUkVTVEFkYXB0
3935
+ ZXIvYWpheAogICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKICAgIEBwYXJh
3936
+ bSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKICAgIEBwYXJhbSB7T2Jq
3937
+ ZWN0fSBxdWVyeQogICAgQHJldHVybnMgUHJvbWlzZQogICovCiAgZmluZFF1
3938
+ ZXJ5OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcXVlcnkpIHsKICAgIHJldHVy
3939
+ biB0aGlzLmFqYXgodGhpcy5idWlsZFVSTCh0eXBlKSwgJ0dFVCcsIHF1ZXJ5
3940
+ KTsKICB9LAoKICAvKioKICAgIENhbGxlZCBieSB0aGUgc3RvcmUgaW4gb3Jk
3941
+ ZXIgdG8gZmV0Y2ggYSBKU09OIGFycmF5IGZvcgogICAgdGhlIHVubG9hZGVk
3942
+ IHJlY29yZHMgaW4gYSBoYXMtbWFueSByZWxhdGlvbnNoaXAgdGhhdCB3ZXJl
3943
+ IG9yaWdpbmFsbHkKICAgIHNwZWNpZmllZCBhcyBJRHMuCgogICAgRm9yIGV4
3944
+ YW1wbGUsIGlmIHRoZSBvcmlnaW5hbCBwYXlsb2FkIGxvb2tzIGxpa2U6Cgog
3945
+ ICAgYGBganMKICAgIHsKICAgICAgImlkIjogMSwKICAgICAgInRpdGxlIjog
3946
+ IlJhaWxzIGlzIG9tYWthc2UiLAogICAgICAiY29tbWVudHMiOiBbIDEsIDIs
3947
+ IDMgXQogICAgfQogICAgYGBgCgogICAgVGhlIElEcyB3aWxsIGJlIHBhc3Nl
3948
+ ZCBhcyBhIFVSTC1lbmNvZGVkIEFycmF5IG9mIElEcywgaW4gdGhpcyBmb3Jt
3949
+ OgoKICAgIGBgYAogICAgaWRzW109MSZpZHNbXT0yJmlkc1tdPTMKICAgIGBg
3950
+ YAoKICAgIE1hbnkgc2VydmVycywgc3VjaCBhcyBSYWlscyBhbmQgUEhQLCB3
3951
+ aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0aGlzCiAgICBpbnRvIGFuIEFy
3952
+ cmF5IGZvciB5b3Ugb24gdGhlIHNlcnZlci1zaWRlLiBJZiB5b3Ugd2FudCB0
3953
+ byBlbmNvZGUgdGhlCiAgICBJRHMsIGRpZmZlcmVudGx5LCBqdXN0IG92ZXJy
3954
+ aWRlIHRoaXMgKG9uZS1saW5lKSBtZXRob2QuCgogICAgSXQgbWFrZXMgYW4g
3955
+ QWpheCByZXF1ZXN0IHRvIGEgVVJMIGNvbXB1dGVkIGJ5IGBidWlsZFVSTGAs
3956
+ IGFuZCByZXR1cm5zIGEKICAgIHByb21pc2UgZm9yIHRoZSByZXN1bHRpbmcg
3957
+ cGF5bG9hZC4KCiAgICBAbWV0aG9kIGZpbmRNYW55CiAgICBAc2VlIFJFU1RB
3958
+ ZGFwdGVyL2J1aWxkVVJMCiAgICBAc2VlIFJFU1RBZGFwdGVyL2FqYXgKICAg
3959
+ IEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCiAgICBAcGFyYW0ge3N1YmNsYXNz
3960
+ IG9mIERTLk1vZGVsfSB0eXBlCiAgICBAcGFyYW0ge0FycmF5PFN0cmluZz59
3961
+ IGlkcwogICAgQHJldHVybnMgUHJvbWlzZQogICovCiAgZmluZE1hbnk6IGZ1
3962
+ bmN0aW9uKHN0b3JlLCB0eXBlLCBpZHMpIHsKICAgIHJldHVybiB0aGlzLmFq
3963
+ YXgodGhpcy5idWlsZFVSTCh0eXBlKSwgJ0dFVCcsIHsgaWRzOiBpZHMgfSk7
3964
+ CiAgfSwKCiAgLyoqCiAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIGluIG9yZGVy
3965
+ IHRvIGZldGNoIGEgSlNPTiBhcnJheSBmb3IKICAgIHRoZSB1bmxvYWRlZCBy
3966
+ ZWNvcmRzIGluIGEgaGFzLW1hbnkgcmVsYXRpb25zaGlwIHRoYXQgd2VyZSBv
3967
+ cmlnaW5hbGx5CiAgICBzcGVjaWZpZWQgYXMgYSBVUkwgKGluc2lkZSBvZiBg
3968
+ bGlua3NgKS4KCiAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBvcmlnaW5hbCBw
3969
+ YXlsb2FkIGxvb2tzIGxpa2UgdGhpczoKCiAgICBgYGBqcwogICAgewogICAg
3970
+ ICAicG9zdCI6IHsKICAgICAgICAiaWQiOiAxLAogICAgICAgICJ0aXRsZSI6
3971
+ ICJSYWlscyBpcyBvbWFrYXNlIiwKICAgICAgICAibGlua3MiOiB7ICJjb21t
3972
+ ZW50cyI6ICIvcG9zdHMvMS9jb21tZW50cyIgfQogICAgICB9CiAgICB9CiAg
3973
+ ICBgYGAKCiAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo
3974
+ ZSBwYXJlbnQgcmVjb3JkIGFuZCBgL3Bvc3RzLzEvY29tbWVudHNgLgoKICAg
3975
+ IEl0IHdpbGwgbWFrZSBhbiBBamF4IHJlcXVlc3QgdG8gdGhlIG9yaWdpbmFs
3976
+ bHkgc3BlY2lmaWVkIFVSTC4KCiAgICBAbWV0aG9kIGZpbmRIYXNNYW55CiAg
3977
+ ICBAc2VlIFJFU1RBZGFwdGVyL2J1aWxkVVJMCiAgICBAc2VlIFJFU1RBZGFw
3978
+ dGVyL2FqYXgKICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCiAgICBAcGFy
3979
+ YW0ge0RTLk1vZGVsfSByZWNvcmQKICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwK
3980
+ ICAgIEByZXR1cm5zIFByb21pc2UKICAqLwogIGZpbmRIYXNNYW55OiBmdW5j
3981
+ dGlvbihzdG9yZSwgcmVjb3JkLCB1cmwpIHsKICAgIHJldHVybiB0aGlzLmFq
3982
+ YXgodXJsLCAnR0VUJyk7CiAgfSwKCiAgLyoqCiAgICBDYWxsZWQgYnkgdGhl
3983
+ IHN0b3JlIHdoZW4gYSBuZXdseSBjcmVhdGVkIHJlY29yZCBpcwogICAgYHNh
3984
+ dmVgZC4KCiAgICBJdCBzZXJpYWxpemVzIHRoZSByZWNvcmQsIGFuZCBgUE9T
3985
+ VGBzIGl0IHRvIGEgVVJMIGdlbmVyYXRlZCBieSBgYnVpbGRVUkxgLgoKICAg
3986
+ IFNlZSBgc2VyaWFsaXplYCBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGN1
3987
+ c3RvbWl6ZSB0aGUgc2VyaWFsaXplZCBmb3JtCiAgICBvZiBhIHJlY29yZC4K
3988
+ CiAgICBAbWV0aG9kIGNyZWF0ZVJlY29yZAogICAgQHNlZSBSRVNUQWRhcHRl
3989
+ ci9idWlsZFVSTAogICAgQHNlZSBSRVNUQWRhcHRlci9hamF4CiAgICBAc2Vl
3990
+ IFJFU1RBZGFwdGVyL3NlcmlhbGl6ZQogICAgQHBhcmFtIHtEUy5TdG9yZX0g
3991
+ c3RvcmUKICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUK
3992
+ ICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAogICAgQHJldHVybnMgUHJv
3993
+ bWlzZQogICovCiAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlw
3994
+ ZSwgcmVjb3JkKSB7CiAgICB2YXIgZGF0YSA9IHt9OwogICAgZGF0YVt0eXBl
3995
+ LnR5cGVLZXldID0gdGhpcy5zZXJpYWxpemVyRm9yKHR5cGUudHlwZUtleSku
3996
+ c2VyaWFsaXplKHJlY29yZCwgeyBpbmNsdWRlSWQ6IHRydWUgfSk7CgogICAg
3997
+ cmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUpLCAiUE9TVCIs
3998
+ IHsgZGF0YTogZGF0YSB9KTsKICB9LAoKICAvKioKICAgIENhbGxlZCBieSB0
3999
+ aGUgc3RvcmUgd2hlbiBhbiBleGlzdGluZyByZWNvcmQgaXMgYHNhdmVgZC4K
4000
+ CiAgICBJdCBzZXJpYWxpemVzIHRoZSByZWNvcmQsIGFuZCBgUE9TVGBzIGl0
4001
+ IHRvIGEgVVJMIGdlbmVyYXRlZCBieSBgYnVpbGRVUkxgLgoKICAgIFNlZSBg
4002
+ c2VyaWFsaXplYCBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGN1c3RvbWl6
4003
+ ZSB0aGUgc2VyaWFsaXplZCBmb3JtCiAgICBvZiBhIHJlY29yZC4KCiAgICBA
4004
+ bWV0aG9kIHVwZGF0ZVJlY29yZAogICAgQHNlZSBSRVNUQWRhcHRlci9idWls
4005
+ ZFVSTAogICAgQHNlZSBSRVNUQWRhcHRlci9hamF4CiAgICBAc2VlIFJFU1RB
4006
+ ZGFwdGVyL3NlcmlhbGl6ZQogICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUK
4007
+ ICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKICAgIEBw
4008
+ YXJhbSB7RFMuTW9kZWx9IHJlY29yZAogICAgQHJldHVybnMgUHJvbWlzZQog
4009
+ ICovCiAgdXBkYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVj
4010
+ b3JkKSB7CiAgICB2YXIgZGF0YSA9IHt9OwogICAgZGF0YVt0eXBlLnR5cGVL
4011
+ ZXldID0gdGhpcy5zZXJpYWxpemVyRm9yKHR5cGUudHlwZUtleSkuc2VyaWFs
4012
+ aXplKHJlY29yZCk7CgogICAgdmFyIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7
4013
+ CgogICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUsIGlk
4014
+ KSwgIlBVVCIsIHsgZGF0YTogZGF0YSB9KTsKICB9LAoKICAvKioKICAgIENh
4015
+ bGxlZCBieSB0aGUgc3RvcmUgd2hlbiBhbiBkZWxldGVkIHJlY29yZCBpcyBg
4016
+ c2F2ZWBkLgoKICAgIEl0IHNlcmlhbGl6ZXMgdGhlIHJlY29yZCwgYW5kIGBQ
4017
+ T1NUYHMgaXQgdG8gYSBVUkwgZ2VuZXJhdGVkIGJ5IGBidWlsZFVSTGAuCgog
4018
+ ICAgQG1ldGhvZCBkZWxldGVSZWNvcmQKICAgIEBzZWUgUkVTVEFkYXB0ZXIv
4019
+ YnVpbGRVUkwKICAgIEBzZWUgUkVTVEFkYXB0ZXIvYWpheAogICAgQHNlZSBS
4020
+ RVNUQWRhcHRlci9zZXJpYWxpemUKICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0
4021
+ b3JlCiAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCiAg
4022
+ ICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKICAgIEByZXR1cm5zIFByb21p
4023
+ c2UKICAqLwogIGRlbGV0ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUs
4024
+ IHJlY29yZCkgewogICAgdmFyIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7Cgog
4025
+ ICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUsIGlkKSwg
4026
+ IkRFTEVURSIpOwogIH0sCgogIC8qKgogICAgQnVpbGRzIGEgVVJMIGZvciBh
4027
+ IGdpdmVuIHR5cGUgYW5kIG9wdGlvbmFsIElELgoKICAgIEJ5IGRlZmF1bHQs
4028
+ IGl0IHBsdXJhbGl6ZXMgdGhlIHR5cGUncyBuYW1lIChmb3IgZXhhbXBsZSwK
4029
+ ICAgICdwb3N0JyBiZWNvbWVzICdwb3N0cycgYW5kICdwZXJzb24nIGJlY29t
4030
+ ZXMgJ3Blb3BsZScpLgoKICAgIElmIGFuIElEIGlzIHNwZWNpZmllZCwgaXQg
4031
+ YWRkcyB0aGUgSUQgdG8gdGhlIHBsdXJhbCBmb3JtCiAgICBvZiB0aGUgdHlw
4032
+ ZSwgc2VwYXJhdGVkIGJ5IGEgYC9gLgoKICAgIEBtZXRob2QgYnVpbGRVUkwK
4033
+ ICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKICAgIEBw
4034
+ YXJhbSB7U3RyaW5nfSBpZAogICAgQHJldHVybnMgU3RyaW5nCiAgKi8KICBi
4035
+ dWlsZFVSTDogZnVuY3Rpb24odHlwZSwgaWQpIHsKICAgIHZhciB1cmwgPSAi
4036
+ LyIgKyBFbWJlci5TdHJpbmcucGx1cmFsaXplKHR5cGUudHlwZUtleSk7CiAg
4037
+ ICBpZiAoaWQpIHsgdXJsICs9ICIvIiArIGlkOyB9CgogICAgcmV0dXJuIHVy
4038
+ bDsKICB9LAoKICBzZXJpYWxpemVyRm9yOiBmdW5jdGlvbih0eXBlKSB7CiAg
4039
+ ICAvLyBUaGlzIGxvZ2ljIGhhcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBE
4040
+ Uy5TdG9yZSNzZXJpYWxpemVyRm9yCiAgICByZXR1cm4gdGhpcy5jb250YWlu
4041
+ ZXIubG9va3VwKCdzZXJpYWxpemVyOicgKyB0eXBlKSB8fAogICAgICAgICAg
4042
+ IHRoaXMuY29udGFpbmVyLmxvb2t1cCgnc2VyaWFsaXplcjphcHBsaWNhdGlv
4043
+ bicpIHx8CiAgICAgICAgICAgdGhpcy5jb250YWluZXIubG9va3VwKCdzZXJp
4044
+ YWxpemVyOl9yZXN0Jyk7CiAgfSwKCgogIC8qKgogICAgVGFrZXMgYSBVUkws
4045
+ IGFuIEhUVFAgbWV0aG9kIGFuZCBhIGhhc2ggb2YgZGF0YSwgYW5kIG1ha2Vz
4046
+ IGFuCiAgICBIVFRQIHJlcXVlc3QuCgogICAgV2hlbiB0aGUgc2VydmVyIHJl
4047
+ c3BvbmRzIHdpdGggYSBwYXlsb2FkLCBFbWJlciBEYXRhIHdpbGwgY2FsbCBp
4048
+ bnRvIGBleHRyYWN0U2luZ2xlYAogICAgb3IgYGV4dHJhY3RBcnJheWAgKGRl
4049
+ cGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcmlnaW5hbCBxdWVyeSB3YXMgZm9y
4050
+ IG9uZSByZWNvcmQgb3IKICAgIG1hbnkgcmVjb3JkcykuCgogICAgQnkgZGVm
4051
+ YXVsdCwgaXQgaGFzIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6CgogICAgKiBJ
4052
+ dCBzZXRzIHRoZSByZXNwb25zZSBgZGF0YVR5cGVgIHRvIGAianNvbiJgCiAg
4053
+ ICAqIElmIHRoZSBIVFRQIG1ldGhvZCBpcyBub3QgYCJHRVQiYCwgaXQgc2V0
4054
+ cyB0aGUgYENvbnRlbnQtVHlwZWAgdG8gYmUKICAgICAgYGFwcGxpY2F0aW9u
4055
+ L2pzb247IGNoYXJzZXQ9dXRmLThgCiAgICAqIElmIHRoZSBIVFRQIG1ldGhv
4056
+ ZCBpcyBub3QgYCJHRVQiYCwgaXQgc3RyaW5naWZpZXMgdGhlIGRhdGEgcGFz
4057
+ c2VkIGluLiBUaGUKICAgICAgZGF0YSBpcyB0aGUgc2VyaWFsaXplZCByZWNv
4058
+ cmQgaW4gdGhlIGNhc2Ugb2YgYSBzYXZlLgogICAgKiBSZWdpc3RlcnMgc3Vj
4059
+ Y2VzcyBhbmQgZmFpbHVyZSBoYW5kbGVycy4KCiAgICBAbWV0aG9kIGFqYXgK
4060
+ ICAgIEBwcml2YXRlCiAgICBAcGFyYW0gIHVybAogICAgQHBhcmFtICB0eXBl
4061
+ CiAgICBAcGFyYW0gIGhhc2gKICAqLwogIGFqYXg6IGZ1bmN0aW9uKHVybCwg
4062
+ dHlwZSwgaGFzaCkgewogICAgdmFyIGFkYXB0ZXIgPSB0aGlzOwoKICAgIHJl
4063
+ dHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
4064
+ IHJlamVjdCkgewogICAgICBoYXNoID0gaGFzaCB8fCB7fTsKICAgICAgaGFz
4065
+ aC51cmwgPSB1cmw7CiAgICAgIGhhc2gudHlwZSA9IHR5cGU7CiAgICAgIGhh
4066
+ c2guZGF0YVR5cGUgPSAnanNvbic7CiAgICAgIGhhc2guY29udGV4dCA9IGFk
4067
+ YXB0ZXI7CgogICAgICBpZiAoaGFzaC5kYXRhICYmIHR5cGUgIT09ICdHRVQn
4068
+ KSB7CiAgICAgICAgaGFzaC5jb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9q
4069
+ c29uOyBjaGFyc2V0PXV0Zi04JzsKICAgICAgICBoYXNoLmRhdGEgPSBKU09O
4070
+ LnN0cmluZ2lmeShoYXNoLmRhdGEpOwogICAgICB9CgogICAgICBpZiAoYWRh
4071
+ cHRlci5oZWFkZXJzICE9PSB1bmRlZmluZWQpIHsKICAgICAgICB2YXIgaGVh
4072
+ ZGVycyA9IGFkYXB0ZXIuaGVhZGVyczsKICAgICAgICBoYXNoLmJlZm9yZVNl
4073
+ bmQgPSBmdW5jdGlvbiAoeGhyKSB7CiAgICAgICAgICBFbWJlci5rZXlzKGhl
4074
+ YWRlcnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgIHho
4075
+ ci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKTsKICAgICAg
4076
+ ICAgIH0pOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIGhhc2guc3VjY2Vz
4077
+ cyA9IGZ1bmN0aW9uKGpzb24pIHsKICAgICAgICBFbWJlci5ydW4obnVsbCwg
4078
+ cmVzb2x2ZSwganNvbik7CiAgICAgIH07CgogICAgICBoYXNoLmVycm9yID0g
4079
+ ZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7CiAg
4080
+ ICAgICAgaWYgKGpxWEhSKSB7CiAgICAgICAgICBqcVhIUi50aGVuID0gbnVs
4081
+ bDsKICAgICAgICB9CgogICAgICAgIEVtYmVyLnJ1bihudWxsLCByZWplY3Qs
4082
+ IGpxWEhSKTsKICAgICAgfTsKCiAgICAgIEVtYmVyLiQuYWpheChoYXNoKTsK
4083
+ ICAgIH0pOwogIH0KCn0pOwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewovKioK
4084
+ ICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCn0pKCk7CgoKCihmdW5jdGlvbigp
4085
+ IHsKRFMuTW9kZWwucmVvcGVuKHsKCiAgLyoqCiAgIFByb3ZpZGVzIGluZm8g
4086
+ YWJvdXQgdGhlIG1vZGVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKICAgYnkg
4087
+ Z3JvdXBpbmcgdGhlIHByb3BlcnRpZXMgaW50byBtb3JlIHNlbWFudGljIGdy
4088
+ b3Vwcy4KCiAgIE1lYW50IHRvIGJlIHVzZWQgYnkgZGVidWdnaW5nIHRvb2xz
4089
+ IHN1Y2ggYXMgdGhlIENocm9tZSBFbWJlciBFeHRlbnNpb24uCgogICAtIEdy
4090
+ b3VwcyBhbGwgYXR0cmlidXRlcyBpbiAiQXR0cmlidXRlcyIgZ3JvdXAuCiAg
4091
+ IC0gR3JvdXBzIGFsbCBiZWxvbmdzVG8gcmVsYXRpb25zaGlwcyBpbiAiQmVs
4092
+ b25ncyBUbyIgZ3JvdXAuCiAgIC0gR3JvdXBzIGFsbCBoYXNNYW55IHJlbGF0
4093
+ aW9uc2hpcHMgaW4gIkhhcyBNYW55IiBncm91cC4KICAgLSBHcm91cHMgYWxs
4094
+ IGZsYWdzIGluICJGbGFncyIgZ3JvdXAuCiAgIC0gRmxhZ3MgcmVsYXRpb25z
4095
+ aGlwIENQcyBhcyBleHBlbnNpdmUgcHJvcGVydGllcy4KICAqLwogIF9kZWJ1
4096
+ Z0luZm86IGZ1bmN0aW9uKCkgewogICAgdmFyIGF0dHJpYnV0ZXMgPSBbJ2lk
4097
+ J10sCiAgICAgICAgcmVsYXRpb25zaGlwcyA9IHsgYmVsb25nc1RvOiBbXSwg
4098
+ aGFzTWFueTogW10gfSwKICAgICAgICBleHBlbnNpdmVQcm9wZXJ0aWVzID0g
4099
+ W107CgogICAgdGhpcy5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKG5hbWUsIG1l
4100
+ dGEpIHsKICAgICAgYXR0cmlidXRlcy5wdXNoKG5hbWUpOwogICAgfSwgdGhp
4101
+ cyk7CgogICAgdGhpcy5lYWNoUmVsYXRpb25zaGlwKGZ1bmN0aW9uKG5hbWUs
4102
+ IHJlbGF0aW9uc2hpcCkgewogICAgICByZWxhdGlvbnNoaXBzW3JlbGF0aW9u
4103
+ c2hpcC5raW5kXS5wdXNoKG5hbWUpOwogICAgICBleHBlbnNpdmVQcm9wZXJ0
4104
+ aWVzLnB1c2gobmFtZSk7CiAgICB9KTsKCiAgICB2YXIgZ3JvdXBzID0gWwog
4105
+ ICAgICB7CiAgICAgICAgbmFtZTogJ0F0dHJpYnV0ZXMnLAogICAgICAgIHBy
4106
+ b3BlcnRpZXM6IGF0dHJpYnV0ZXMsCiAgICAgICAgZXhwYW5kOiB0cnVlLAog
4107
+ ICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogJ0JlbG9uZ3MgVG8nLAog
4108
+ ICAgICAgIHByb3BlcnRpZXM6IHJlbGF0aW9uc2hpcHMuYmVsb25nc1RvLAog
4109
+ ICAgICAgIGV4cGFuZDogdHJ1ZQogICAgICB9LAogICAgICB7CiAgICAgICAg
4110
+ bmFtZTogJ0hhcyBNYW55JywKICAgICAgICBwcm9wZXJ0aWVzOiByZWxhdGlv
4111
+ bnNoaXBzLmhhc01hbnksCiAgICAgICAgZXhwYW5kOiB0cnVlCiAgICAgIH0s
4112
+ CiAgICAgIHsKICAgICAgICBuYW1lOiAnRmxhZ3MnLAogICAgICAgIHByb3Bl
4113
+ cnRpZXM6IFsnaXNMb2FkZWQnLCAnaXNEaXJ0eScsICdpc1NhdmluZycsICdp
4114
+ c0RlbGV0ZWQnLCAnaXNFcnJvcicsICdpc05ldycsICdpc1ZhbGlkJ10KICAg
4115
+ ICAgfQogICAgXTsKCiAgICByZXR1cm4gewogICAgICBwcm9wZXJ0eUluZm86
4116
+ IHsKICAgICAgICAvLyBpbmNsdWRlIGFsbCBvdGhlciBtaXhpbnMgLyBwcm9w
4117
+ ZXJ0aWVzIChub3QganVzdCB0aGUgZ3JvdXBlZCBvbmVzKQogICAgICAgIGlu
4118
+ Y2x1ZGVPdGhlclByb3BlcnRpZXM6IHRydWUsCiAgICAgICAgZ3JvdXBzOiBn
4119
+ cm91cHMsCiAgICAgICAgLy8gZG9uJ3QgcHJlLWNhbGN1bGF0ZSB1bmxlc3Mg
4120
+ Y2FjaGVkCiAgICAgICAgZXhwZW5zaXZlUHJvcGVydGllczogZXhwZW5zaXZl
4121
+ UHJvcGVydGllcwogICAgICB9CiAgICB9OwogIH0KCn0pOwoKfSkoKTsKCgoK
4122
+ KGZ1bmN0aW9uKCkgewovKioKICBAbW9kdWxlIGVtYmVyLWRhdGEKKi8KCn0p
4123
+ KCk7CgoKCihmdW5jdGlvbigpIHsKLy9Db3B5cmlnaHQgKEMpIDIwMTEgYnkg
4124
+ TGl2aW5nIFNvY2lhbCwgSW5jLgoKLy9QZXJtaXNzaW9uIGlzIGhlcmVieSBn
4125
+ cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p
4126
+ bmcgYSBjb3B5IG9mCi8vdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk
4127
+ b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwg
4128
+ aW4KLy90aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk
4129
+ aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi8vdXNlLCBj
4130
+ b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs
4131
+ aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLy9vZiB0aGUgU29mdHdhcmUs
4132
+ IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBp
4133
+ cyBmdXJuaXNoZWQgdG8gZG8KLy9zbywgc3ViamVjdCB0byB0aGUgZm9sbG93
4134
+ aW5nIGNvbmRpdGlvbnM6CgovL1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
4135
+ IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
4136
+ IGluIGFsbAovL2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0
4137
+ aGUgU29mdHdhcmUuCgovL1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
4138
+ SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
4139
+ Ci8vSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
4140
+ V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi8vRklUTkVTUyBGT1Ig
4141
+ QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g
4142
+ Tk8gRVZFTlQgU0hBTEwgVEhFCi8vQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
4143
+ REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF
4144
+ UgovL0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
4145
+ Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi8vT1VUIE9G
4146
+ IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
4147
+ RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLy9TT0ZUV0FSRS4KCi8qKgog
4148
+ IEVtYmVyIERhdGEKCiAgQG1vZHVsZSBlbWJlci1kYXRhCiAgQG1haW4gZW1i
4149
+ ZXItZGF0YQoqLwoKfSkoKTsKCg==
4150
+ http_version:
4151
+ recorded_at: Mon, 17 Feb 2014 11:45:23 GMT
4152
+ - request:
4153
+ method: get
4154
+ uri: http://builds.emberjs.com/tags/v1.0.0-beta.1/ember-data.min.js
4155
+ body:
4156
+ encoding: US-ASCII
4157
+ string: ''
4158
+ headers:
4159
+ Accept-Encoding:
4160
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
4161
+ Accept:
4162
+ - '*/*'
4163
+ User-Agent:
4164
+ - Ruby
4165
+ Host:
4166
+ - builds.emberjs.com
4167
+ response:
4168
+ status:
4169
+ code: 200
4170
+ message: OK
4171
+ headers:
4172
+ X-Amz-Id-2:
4173
+ - dhcnXvFIaQzLDo1KXXC8kCGb0g8og6oYgO2pDcEXbFsVndVrIG/qtA9qu9PbSbEe
4174
+ X-Amz-Request-Id:
4175
+ - DE1DE9B79D7D5B2D
4176
+ Date:
4177
+ - Mon, 17 Feb 2014 11:45:25 GMT
4178
+ Last-Modified:
4179
+ - Sun, 01 Sep 2013 07:45:27 GMT
4180
+ Etag:
4181
+ - '"7066a174c8ef121fbcc734c19087d271"'
4182
+ Content-Type:
4183
+ - text/javascript
4184
+ Content-Length:
4185
+ - '4008'
4186
+ Server:
4187
+ - AmazonS3
4188
+ body:
4189
+ encoding: ASCII-8BIT
4190
+ string: !binary |-
4191
+ Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
4192
+ PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUHJvamVjdDog
4193
+ ICBFbWJlciBEYXRhCi8vIENvcHlyaWdodDogwqkyMDExLTIwMTIgVGlsZGUg
4194
+ SW5jLiBhbmQgY29udHJpYnV0b3JzLgovLyAgICAgICAgICAgIFBvcnRpb25z
4195
+ IMKpMjAxMSBMaXZpbmcgU29jaWFsIEluYy4gYW5kIGNvbnRyaWJ1dG9ycy4K
4196
+ Ly8gTGljZW5zZTogICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZSAoc2Vl
4197
+ IGxpY2Vuc2UuanMpCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
4198
+ PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
4199
+ CgoKCi8vIFZlcnNpb246IHYxLjAuMC1iZXRhLjEKLy8gTGFzdCBjb21taXQ6
4200
+ IGNhZmFiOWQgKDIwMTMtMDktMDEgMDA6NDI6MzkgLTA3MDApCgoKIWZ1bmN0
4201
+ aW9uKCl7dmFyIGUsaTshZnVuY3Rpb24oKXt2YXIgcj17fSxzPXt9O2U9ZnVu
4202
+ Y3Rpb24oZSxpLHMpe3JbZV09e2RlcHM6aSxjYWxsYmFjazpzfX0saT1mdW5j
4203
+ dGlvbihlKXtpZihzW2VdKXJldHVybiBzW2VdO3NbZV09e307dmFyIG4sdCx1
4204
+ LG8sYTtpZihuPXJbZV0sIW4pdGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgJyIr
4205
+ ZSsiJyBub3QgZm91bmQuIik7dD1uLmRlcHMsdT1uLmNhbGxiYWNrLG89W107
4206
+ Zm9yKHZhciBsPTAsJD10Lmxlbmd0aDskPmw7bCsrKSJleHBvcnRzIj09PXRb
4207
+ bF0/by5wdXNoKGE9e30pOm8ucHVzaChpKHRbbF0pKTt2YXIgYz11LmFwcGx5
4208
+ KHRoaXMsbyk7cmV0dXJuIHNbZV09YXx8Y319KCksZnVuY3Rpb24oKXtFbWJl
4209
+ ci5TdHJpbmcucGx1cmFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBFbWJlci5J
4210
+ bmZsZWN0b3IuaW5mbGVjdG9yLnBsdXJhbGl6ZShlKX0sRW1iZXIuU3RyaW5n
4211
+ LnNpbmd1bGFyaXplPWZ1bmN0aW9uKGUpe3JldHVybiBFbWJlci5JbmZsZWN0
4212
+ b3IuaW5mbGVjdG9yLnNpbmd1bGFyaXplKGUpfX0oKSxmdW5jdGlvbigpe2Z1
4213
+ bmN0aW9uIGUoZSxpKXtmb3IodmFyIHI9MCxzPWkubGVuZ3RoO3M+cjtyKysp
4214
+ ZS51bmNvdW50YWJsZVtpW3JdXT0hMH1mdW5jdGlvbiBpKGUsaSl7Zm9yKHZh
4215
+ ciByLHM9MCxuPWkubGVuZ3RoO24+cztzKyspcj1pW3NdLGUuaXJyZWd1bGFy
4216
+ W3JbMF1dPXJbMV0sZS5pcnJlZ3VsYXJJbnZlcnNlW3JbMV1dPXJbMF19ZnVu
4217
+ Y3Rpb24gcihyKXtyPXJ8fHt9LHIudW5jb3VudGFibGU9ci51bmNvdW50YWJs
4218
+ ZXx8e30sci5pcnJlZ3VsYXJQYWlycz1yLmlycmVndWxhclBhaXJzfHx7fTt2
4219
+ YXIgcz10aGlzLnJ1bGVzPXtwbHVyYWxzOnIucGx1cmFsc3x8W10sc2luZ3Vs
4220
+ YXI6ci5zaW5ndWxhcnx8W10saXJyZWd1bGFyOnt9LGlycmVndWxhckludmVy
4221
+ c2U6e30sdW5jb3VudGFibGU6e319O2UocyxyLnVuY291bnRhYmxlKSxpKHMs
4222
+ ci5pcnJlZ3VsYXJQYWlycyl9dmFyIHM9L15ccyokLztyLnByb3RvdHlwZT17
4223
+ cGx1cmFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmluZmxlY3QoZSx0
4224
+ aGlzLnJ1bGVzLnBsdXJhbHMpfSxzaW5ndWxhcml6ZTpmdW5jdGlvbihlKXty
4225
+ ZXR1cm4gdGhpcy5pbmZsZWN0KGUsdGhpcy5ydWxlcy5zaW5ndWxhcil9LGlu
4226
+ ZmxlY3Q6ZnVuY3Rpb24oZSxpKXt2YXIgcixuLHQsdSxvLGEsbCwkLGM7aWYo
4227
+ bz1zLnRlc3QoZSkpcmV0dXJuIGU7aWYodT1lLnRvTG93ZXJDYXNlKCksYT10
4228
+ aGlzLnJ1bGVzLnVuY291bnRhYmxlW3VdKXJldHVybiBlO2lmKGw9dGhpcy5y
4229
+ dWxlcy5pcnJlZ3VsYXJbdV0pcmV0dXJuIGw7aWYoJD10aGlzLnJ1bGVzLmly
4230
+ cmVndWxhckludmVyc2VbdV0pcmV0dXJuICQ7Zm9yKHZhciBmPWkubGVuZ3Ro
4231
+ LHA9MDtmPnAmJihyPWlbZi0xXSxjPXJbMF0sIWMudGVzdChlKSk7Zi0tKTty
4232
+ ZXR1cm4gcj1yfHxbXSxjPXJbMF0sbj1yWzFdLHQ9ZS5yZXBsYWNlKGMsbil9
4233
+ fSxFbWJlci5JbmZsZWN0b3I9cn0oKSxmdW5jdGlvbigpe0VtYmVyLkluZmxl
4234
+ Y3Rvci5kZWZhdWx0UnVsZXM9e3BsdXJhbHM6W1svJC8sInMiXSxbL3MkL2ks
4235
+ InMiXSxbL14oYXh8dGVzdClpcyQvaSwiJDFlcyJdLFsvKG9jdG9wfHZpcil1
4236
+ cyQvaSwiJDFpIl0sWy8ob2N0b3B8dmlyKWkkL2ksIiQxaSJdLFsvKGFsaWFz
4237
+ fHN0YXR1cykkL2ksIiQxZXMiXSxbLyhidSlzJC9pLCIkMXNlcyJdLFsvKGJ1
4238
+ ZmZhbHx0b21hdClvJC9pLCIkMW9lcyJdLFsvKFt0aV0pdW0kL2ksIiQxYSJd
4239
+ LFsvKFt0aV0pYSQvaSwiJDFhIl0sWy9zaXMkL2ksInNlcyJdLFsvKD86KFte
4240
+ Zl0pZmV8KFtscl0pZikkL2ksIiQxJDJ2ZXMiXSxbLyhoaXZlKSQvaSwiJDFz
4241
+ Il0sWy8oW15hZWlvdXldfHF1KXkkL2ksIiQxaWVzIl0sWy8oeHxjaHxzc3xz
4242
+ aCkkL2ksIiQxZXMiXSxbLyhtYXRyfHZlcnR8aW5kKSg/Oml4fGV4KSQvaSwi
4243
+ JDFpY2VzIl0sWy9eKG18bClvdXNlJC9pLCIkMWljZSJdLFsvXihtfGwpaWNl
4244
+ JC9pLCIkMWljZSJdLFsvXihveCkkL2ksIiQxZW4iXSxbL14ob3hlbikkL2ks
4245
+ IiQxIl0sWy8ocXVpeikkL2ksIiQxemVzIl1dLHNpbmd1bGFyOltbL3MkL2ks
4246
+ IiJdLFsvKHNzKSQvaSwiJDEiXSxbLyhuKWV3cyQvaSwiJDFld3MiXSxbLyhb
4247
+ dGldKWEkL2ksIiQxdW0iXSxbLygoYSluYWx5fChiKWF8KGQpaWFnbm98KHAp
4248
+ YXJlbnRoZXwocClyb2dub3wocyl5bm9wfCh0KWhlKShzaXN8c2VzKSQvaSwi
4249
+ JDFzaXMiXSxbLyheYW5hbHkpKHNpc3xzZXMpJC9pLCIkMXNpcyJdLFsvKFte
4250
+ Zl0pdmVzJC9pLCIkMWZlIl0sWy8oaGl2ZSlzJC9pLCIkMSJdLFsvKHRpdmUp
4251
+ cyQvaSwiJDEiXSxbLyhbbHJdKXZlcyQvaSwiJDFmIl0sWy8oW15hZWlvdXld
4252
+ fHF1KWllcyQvaSwiJDF5Il0sWy8ocyllcmllcyQvaSwiJDFlcmllcyJdLFsv
4253
+ KG0pb3ZpZXMkL2ksIiQxb3ZpZSJdLFsvKHh8Y2h8c3N8c2gpZXMkL2ksIiQx
4254
+ Il0sWy9eKG18bClpY2UkL2ksIiQxb3VzZSJdLFsvKGJ1cykoZXMpPyQvaSwi
4255
+ JDEiXSxbLyhvKWVzJC9pLCIkMSJdLFsvKHNob2UpcyQvaSwiJDEiXSxbLyhj
4256
+ cmlzfHRlc3QpKGlzfGVzKSQvaSwiJDFpcyJdLFsvXihhKXhbaWVdcyQvaSwi
4257
+ JDF4aXMiXSxbLyhvY3RvcHx2aXIpKHVzfGkpJC9pLCIkMXVzIl0sWy8oYWxp
4258
+ YXN8c3RhdHVzKShlcyk/JC9pLCIkMSJdLFsvXihveCllbi9pLCIkMSJdLFsv
4259
+ KHZlcnR8aW5kKWljZXMkL2ksIiQxZXgiXSxbLyhtYXRyKWljZXMkL2ksIiQx
4260
+ aXgiXSxbLyhxdWl6KXplcyQvaSwiJDEiXSxbLyhkYXRhYmFzZSlzJC9pLCIk
4261
+ MSJdXSxpcnJlZ3VsYXJQYWlyczpbWyJwZXJzb24iLCJwZW9wbGUiXSxbIm1h
4262
+ biIsIm1lbiJdLFsiY2hpbGQiLCJjaGlsZHJlbiJdLFsic2V4Iiwic2V4ZXMi
4263
+ XSxbIm1vdmUiLCJtb3ZlcyJdLFsiY293Iiwia2luZSJdLFsiem9tYmllIiwi
4264
+ em9tYmllcyJdXSx1bmNvdW50YWJsZTpbImVxdWlwbWVudCIsImluZm9ybWF0
4265
+ aW9uIiwicmljZSIsIm1vbmV5Iiwic3BlY2llcyIsInNlcmllcyIsImZpc2gi
4266
+ LCJzaGVlcCIsImplYW5zIiwicG9saWNlIl19fSgpLGZ1bmN0aW9uKCl7RW1i
4267
+ ZXIuRVhURU5EX1BST1RPVFlQRVMmJihTdHJpbmcucHJvdG90eXBlLnBsdXJh
4268
+ bGl6ZT1mdW5jdGlvbigpe3JldHVybiBFbWJlci5TdHJpbmcucGx1cmFsaXpl
4269
+ KHRoaXMpfSxTdHJpbmcucHJvdG90eXBlLnNpbmd1bGFyaXplPWZ1bmN0aW9u
4270
+ KCl7cmV0dXJuIEVtYmVyLlN0cmluZy5zaW5ndWxhcml6ZSh0aGlzKX0pfSgp
4271
+ LGZ1bmN0aW9uKCl7RW1iZXIuSW5mbGVjdG9yLmluZmxlY3Rvcj1uZXcgRW1i
4272
+ ZXIuSW5mbGVjdG9yKEVtYmVyLkluZmxlY3Rvci5kZWZhdWx0UnVsZXMpfSgp
4273
+ fSgpLCJ1bmRlZmluZWQiPT10eXBlb2YgbG9jYXRpb258fCJsb2NhbGhvc3Qi
4274
+ IT09bG9jYXRpb24uaG9zdG5hbWUmJiIxMjcuMC4wLjEiIT09bG9jYXRpb24u
4275
+ aG9zdG5hbWV8fEVtYmVyLkxvZ2dlci53YXJuKCJZb3UgYXJlIHJ1bm5pbmcg
4276
+ YSBwcm9kdWN0aW9uIGJ1aWxkIG9mIEVtYmVyIG9uIGxvY2FsaG9zdCBhbmQg
4277
+ d29uJ3QgcmVjZWl2ZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy4gSWYgeW91
4278
+ IHdhbnQgZnVsbCBlcnJvciBtZXNzYWdlcyBwbGVhc2UgdXNlIHRoZSBub24t
4279
+ bWluaWZpZWQgYnVpbGQgcHJvdmlkZWQgb24gdGhlIEVtYmVyIHdlYnNpdGUu
4280
+ Iik7
4281
+ http_version:
4282
+ recorded_at: Mon, 17 Feb 2014 11:45:24 GMT
4283
+ recorded_with: VCR 2.8.0