@tiba-spark/client-shared-lib 25.4.1-35 → 25.4.1-41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/esm2022/libraries/constants/version-constants.mjs +1 -10
  2. package/esm2022/libraries/enums/http-cancel-blacklist.enum.mjs +10 -8
  3. package/esm2022/libraries/enums/localization.enum.mjs +2 -1
  4. package/esm2022/libraries/guards/sub-module-guard.mjs +3 -3
  5. package/esm2022/libraries/localization/localization.action.mjs +1 -10
  6. package/esm2022/libraries/localization/localization.module.mjs +1 -4
  7. package/esm2022/libraries/localization/localization.state.mjs +5 -21
  8. package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.mjs +1 -7
  9. package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.mjs +5 -20
  10. package/esm2022/libraries/modules/auth/session.actions.mjs +1 -10
  11. package/esm2022/libraries/modules/auth/session.state.mjs +5 -78
  12. package/esm2022/libraries/modules/login/login.actions.mjs +1 -9
  13. package/esm2022/libraries/modules/login/login.module.mjs +4 -4
  14. package/esm2022/libraries/modules/login/login.state.mjs +5 -24
  15. package/esm2022/libraries/modules/security/security.actions.mjs +1 -8
  16. package/esm2022/libraries/modules/security/security.state.mjs +5 -18
  17. package/esm2022/libraries/modules/smartparks/smartpark.actions.mjs +1 -12
  18. package/esm2022/libraries/modules/smartparks/smartpark.state.mjs +5 -20
  19. package/esm2022/libraries/modules/tenant-logo/tenant-logo.actions.mjs +1 -7
  20. package/esm2022/libraries/modules/tenant-logo/tenant-logo.state.mjs +5 -16
  21. package/esm2022/libraries/modules/user-settings/user-settings.state.mjs +5 -57
  22. package/esm2022/libraries/resolvers/index.mjs +1 -4
  23. package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +133 -790
  24. package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +1 -560
  25. package/esm2022/libraries/service-proxy/service-proxy.module.mjs +4 -8
  26. package/esm2022/libraries/services/auth-token.service.mjs +68 -9
  27. package/esm2022/libraries/services/refresh-token.service.mjs +18 -16
  28. package/esm2022/libraries/services/smartpark.service.mjs +12 -8
  29. package/esm2022/libraries/services/tenant.service.mjs +7 -27
  30. package/fesm2022/tiba-spark-client-shared-lib.mjs +1853 -3372
  31. package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
  32. package/libraries/constants/version-constants.d.ts +0 -4
  33. package/libraries/constants/version-constants.d.ts.map +1 -1
  34. package/libraries/enums/http-cancel-blacklist.enum.d.ts.map +1 -1
  35. package/libraries/enums/localization.enum.d.ts +2 -1
  36. package/libraries/enums/localization.enum.d.ts.map +1 -1
  37. package/libraries/localization/localization.action.d.ts +0 -4
  38. package/libraries/localization/localization.action.d.ts.map +1 -1
  39. package/libraries/localization/localization.module.d.ts.map +1 -1
  40. package/libraries/localization/localization.state.d.ts +2 -4
  41. package/libraries/localization/localization.state.d.ts.map +1 -1
  42. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.d.ts +0 -5
  43. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.d.ts.map +1 -1
  44. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.d.ts +3 -5
  45. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.d.ts.map +1 -1
  46. package/libraries/modules/auth/session.actions.d.ts +0 -8
  47. package/libraries/modules/auth/session.actions.d.ts.map +1 -1
  48. package/libraries/modules/auth/session.state.d.ts +3 -9
  49. package/libraries/modules/auth/session.state.d.ts.map +1 -1
  50. package/libraries/modules/login/login.actions.d.ts +0 -7
  51. package/libraries/modules/login/login.actions.d.ts.map +1 -1
  52. package/libraries/modules/login/login.module.d.ts +1 -1
  53. package/libraries/modules/login/login.state.d.ts +3 -5
  54. package/libraries/modules/login/login.state.d.ts.map +1 -1
  55. package/libraries/modules/security/security.actions.d.ts +0 -6
  56. package/libraries/modules/security/security.actions.d.ts.map +1 -1
  57. package/libraries/modules/security/security.state.d.ts +2 -7
  58. package/libraries/modules/security/security.state.d.ts.map +1 -1
  59. package/libraries/modules/smartparks/smartpark.actions.d.ts +0 -6
  60. package/libraries/modules/smartparks/smartpark.actions.d.ts.map +1 -1
  61. package/libraries/modules/smartparks/smartpark.state.d.ts +3 -5
  62. package/libraries/modules/smartparks/smartpark.state.d.ts.map +1 -1
  63. package/libraries/modules/tenant-logo/tenant-logo.actions.d.ts +0 -5
  64. package/libraries/modules/tenant-logo/tenant-logo.actions.d.ts.map +1 -1
  65. package/libraries/modules/tenant-logo/tenant-logo.state.d.ts +3 -5
  66. package/libraries/modules/tenant-logo/tenant-logo.state.d.ts.map +1 -1
  67. package/libraries/modules/user-settings/user-settings.state.d.ts +3 -6
  68. package/libraries/modules/user-settings/user-settings.state.d.ts.map +1 -1
  69. package/libraries/resolvers/index.d.ts +0 -3
  70. package/libraries/resolvers/index.d.ts.map +1 -1
  71. package/libraries/service-proxy/cloud-service-proxies.d.ts +35 -111
  72. package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
  73. package/libraries/service-proxy/identity-service-proxies.d.ts +0 -53
  74. package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
  75. package/libraries/service-proxy/service-proxy.module.d.ts.map +1 -1
  76. package/libraries/services/auth-token.service.d.ts +4 -0
  77. package/libraries/services/auth-token.service.d.ts.map +1 -1
  78. package/libraries/services/refresh-token.service.d.ts +3 -4
  79. package/libraries/services/refresh-token.service.d.ts.map +1 -1
  80. package/libraries/services/smartpark.service.d.ts +3 -1
  81. package/libraries/services/smartpark.service.d.ts.map +1 -1
  82. package/libraries/services/tenant.service.d.ts +3 -6
  83. package/libraries/services/tenant.service.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/esm2022/libraries/resolvers/mobile-command-center-module.resolver.mjs +0 -53
  86. package/esm2022/libraries/resolvers/mobile-config.resolver.mjs +0 -21
  87. package/esm2022/libraries/resolvers/mobile-version.resolver.mjs +0 -24
  88. package/libraries/resolvers/mobile-command-center-module.resolver.d.ts +0 -21
  89. package/libraries/resolvers/mobile-command-center-module.resolver.d.ts.map +0 -1
  90. package/libraries/resolvers/mobile-config.resolver.d.ts +0 -12
  91. package/libraries/resolvers/mobile-config.resolver.d.ts.map +0 -1
  92. package/libraries/resolvers/mobile-version.resolver.d.ts +0 -13
  93. package/libraries/resolvers/mobile-version.resolver.d.ts.map +0 -1
@@ -642,565 +642,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
642
642
  type: Inject,
643
643
  args: [API_BASE_URL]
644
644
  }] }] });
645
- export class MobileIdentityServiceProxy {
646
- constructor(http, baseUrl) {
647
- this.jsonParseReviver = undefined;
648
- this.http = http;
649
- this.baseUrl = baseUrl ?? "";
650
- }
651
- /**
652
- * @param body (optional)
653
- * @return Success
654
- */
655
- mobileAuthenticate(version, body) {
656
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/users/authenticate";
657
- if (version === undefined || version === null)
658
- throw new Error("The parameter 'version' must be defined.");
659
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
660
- url_ = url_.replace(/[?&]$/, "");
661
- const content_ = JSON.stringify(body);
662
- let options_ = {
663
- body: content_,
664
- observe: "response",
665
- responseType: "blob",
666
- headers: new HttpHeaders({
667
- "Content-Type": "application/json-patch+json",
668
- "Accept": "text/plain"
669
- })
670
- };
671
- return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_) => {
672
- return this.processMobileAuthenticate(response_);
673
- })).pipe(_observableCatch((response_) => {
674
- if (response_ instanceof HttpResponseBase) {
675
- try {
676
- return this.processMobileAuthenticate(response_);
677
- }
678
- catch (e) {
679
- return _observableThrow(e);
680
- }
681
- }
682
- else
683
- return _observableThrow(response_);
684
- }));
685
- }
686
- processMobileAuthenticate(response) {
687
- const status = response.status;
688
- const responseBlob = response instanceof HttpResponse ? response.body :
689
- response.error instanceof Blob ? response.error : undefined;
690
- let _headers = {};
691
- if (response.headers) {
692
- for (let key of response.headers.keys()) {
693
- _headers[key] = response.headers.get(key);
694
- }
695
- }
696
- if (status === 404) {
697
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
698
- let result404 = null;
699
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
700
- result404 = ProblemDetails.fromJS(resultData404);
701
- return throwException("Not Found", status, _responseText, _headers, result404);
702
- }));
703
- }
704
- else if (status === 200) {
705
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
706
- let result200 = null;
707
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
708
- result200 = Int32AuthenticateResponseDtoIDictionaryHttpResponseData.fromJS(resultData200);
709
- return _observableOf(result200);
710
- }));
711
- }
712
- else if (status === 401) {
713
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
714
- let result401 = null;
715
- let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
716
- result401 = AuthenticateErrorResponseDtoHttpResponseData.fromJS(resultData401);
717
- return throwException("Unauthorized", status, _responseText, _headers, result401);
718
- }));
719
- }
720
- else if (status !== 200 && status !== 204) {
721
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
722
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
723
- }));
724
- }
725
- return _observableOf(null);
726
- }
727
- /**
728
- * @param identifier (optional)
729
- * @return Success
730
- */
731
- mobileGetLogo(identifier, version) {
732
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/asset/logo?";
733
- if (version === undefined || version === null)
734
- throw new Error("The parameter 'version' must be defined.");
735
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
736
- if (identifier === null)
737
- throw new Error("The parameter 'identifier' cannot be null.");
738
- else if (identifier !== undefined)
739
- url_ += "Identifier=" + encodeURIComponent("" + identifier) + "&";
740
- url_ = url_.replace(/[?&]$/, "");
741
- let options_ = {
742
- observe: "response",
743
- responseType: "blob",
744
- headers: new HttpHeaders({
745
- "Accept": "text/plain"
746
- })
747
- };
748
- return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
749
- return this.processMobileGetLogo(response_);
750
- })).pipe(_observableCatch((response_) => {
751
- if (response_ instanceof HttpResponseBase) {
752
- try {
753
- return this.processMobileGetLogo(response_);
754
- }
755
- catch (e) {
756
- return _observableThrow(e);
757
- }
758
- }
759
- else
760
- return _observableThrow(response_);
761
- }));
762
- }
763
- processMobileGetLogo(response) {
764
- const status = response.status;
765
- const responseBlob = response instanceof HttpResponse ? response.body :
766
- response.error instanceof Blob ? response.error : undefined;
767
- let _headers = {};
768
- if (response.headers) {
769
- for (let key of response.headers.keys()) {
770
- _headers[key] = response.headers.get(key);
771
- }
772
- }
773
- if (status === 404) {
774
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
775
- let result404 = null;
776
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
777
- result404 = ProblemDetails.fromJS(resultData404);
778
- return throwException("Not Found", status, _responseText, _headers, result404);
779
- }));
780
- }
781
- else if (status === 200) {
782
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
783
- let result200 = null;
784
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
785
- result200 = LogoDtoHttpResponseData.fromJS(resultData200);
786
- return _observableOf(result200);
787
- }));
788
- }
789
- else if (status !== 200 && status !== 204) {
790
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
791
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
792
- }));
793
- }
794
- return _observableOf(null);
795
- }
796
- /**
797
- * @return Success
798
- */
799
- mobileGetVersions(version) {
800
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/smartpark/versions";
801
- if (version === undefined || version === null)
802
- throw new Error("The parameter 'version' must be defined.");
803
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
804
- url_ = url_.replace(/[?&]$/, "");
805
- let options_ = {
806
- observe: "response",
807
- responseType: "blob",
808
- headers: new HttpHeaders({
809
- "Accept": "text/plain"
810
- })
811
- };
812
- return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
813
- return this.processMobileGetVersions(response_);
814
- })).pipe(_observableCatch((response_) => {
815
- if (response_ instanceof HttpResponseBase) {
816
- try {
817
- return this.processMobileGetVersions(response_);
818
- }
819
- catch (e) {
820
- return _observableThrow(e);
821
- }
822
- }
823
- else
824
- return _observableThrow(response_);
825
- }));
826
- }
827
- processMobileGetVersions(response) {
828
- const status = response.status;
829
- const responseBlob = response instanceof HttpResponse ? response.body :
830
- response.error instanceof Blob ? response.error : undefined;
831
- let _headers = {};
832
- if (response.headers) {
833
- for (let key of response.headers.keys()) {
834
- _headers[key] = response.headers.get(key);
835
- }
836
- }
837
- if (status === 404) {
838
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
839
- let result404 = null;
840
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
841
- result404 = ProblemDetails.fromJS(resultData404);
842
- return throwException("Not Found", status, _responseText, _headers, result404);
843
- }));
844
- }
845
- else if (status === 200) {
846
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
847
- let result200 = null;
848
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
849
- result200 = StringStringIDictionaryHttpResponseData.fromJS(resultData200);
850
- return _observableOf(result200);
851
- }));
852
- }
853
- else if (status !== 200 && status !== 204) {
854
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
855
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
856
- }));
857
- }
858
- return _observableOf(null);
859
- }
860
- /**
861
- * @return Success
862
- */
863
- mobileGetSettingsByCategory(category, version) {
864
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/configuration/settings/{category}";
865
- if (category === undefined || category === null)
866
- throw new Error("The parameter 'category' must be defined.");
867
- url_ = url_.replace("{category}", encodeURIComponent("" + category));
868
- if (version === undefined || version === null)
869
- throw new Error("The parameter 'version' must be defined.");
870
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
871
- url_ = url_.replace(/[?&]$/, "");
872
- let options_ = {
873
- observe: "response",
874
- responseType: "blob",
875
- headers: new HttpHeaders({
876
- "Accept": "text/plain"
877
- })
878
- };
879
- return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
880
- return this.processMobileGetSettingsByCategory(response_);
881
- })).pipe(_observableCatch((response_) => {
882
- if (response_ instanceof HttpResponseBase) {
883
- try {
884
- return this.processMobileGetSettingsByCategory(response_);
885
- }
886
- catch (e) {
887
- return _observableThrow(e);
888
- }
889
- }
890
- else
891
- return _observableThrow(response_);
892
- }));
893
- }
894
- processMobileGetSettingsByCategory(response) {
895
- const status = response.status;
896
- const responseBlob = response instanceof HttpResponse ? response.body :
897
- response.error instanceof Blob ? response.error : undefined;
898
- let _headers = {};
899
- if (response.headers) {
900
- for (let key of response.headers.keys()) {
901
- _headers[key] = response.headers.get(key);
902
- }
903
- }
904
- if (status === 404) {
905
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
906
- let result404 = null;
907
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
908
- result404 = ProblemDetails.fromJS(resultData404);
909
- return throwException("Not Found", status, _responseText, _headers, result404);
910
- }));
911
- }
912
- else if (status === 200) {
913
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
914
- let result200 = null;
915
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
916
- result200 = ObjectHttpResponseData.fromJS(resultData200);
917
- return _observableOf(result200);
918
- }));
919
- }
920
- else if (status !== 200 && status !== 204) {
921
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
922
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
923
- }));
924
- }
925
- return _observableOf(null);
926
- }
927
- /**
928
- * @param appModule (optional)
929
- * @return Success
930
- */
931
- mobileGetSmartparkBasicAll(appModule, version) {
932
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/facility/basic?";
933
- if (version === undefined || version === null)
934
- throw new Error("The parameter 'version' must be defined.");
935
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
936
- if (appModule === null)
937
- throw new Error("The parameter 'appModule' cannot be null.");
938
- else if (appModule !== undefined)
939
- url_ += "appModule=" + encodeURIComponent("" + appModule) + "&";
940
- url_ = url_.replace(/[?&]$/, "");
941
- let options_ = {
942
- observe: "response",
943
- responseType: "blob",
944
- headers: new HttpHeaders({
945
- "Accept": "text/plain"
946
- })
947
- };
948
- return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
949
- return this.processMobileGetSmartparkBasicAll(response_);
950
- })).pipe(_observableCatch((response_) => {
951
- if (response_ instanceof HttpResponseBase) {
952
- try {
953
- return this.processMobileGetSmartparkBasicAll(response_);
954
- }
955
- catch (e) {
956
- return _observableThrow(e);
957
- }
958
- }
959
- else
960
- return _observableThrow(response_);
961
- }));
962
- }
963
- processMobileGetSmartparkBasicAll(response) {
964
- const status = response.status;
965
- const responseBlob = response instanceof HttpResponse ? response.body :
966
- response.error instanceof Blob ? response.error : undefined;
967
- let _headers = {};
968
- if (response.headers) {
969
- for (let key of response.headers.keys()) {
970
- _headers[key] = response.headers.get(key);
971
- }
972
- }
973
- if (status === 404) {
974
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
975
- let result404 = null;
976
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
977
- result404 = ProblemDetails.fromJS(resultData404);
978
- return throwException("Not Found", status, _responseText, _headers, result404);
979
- }));
980
- }
981
- else if (status === 200) {
982
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
983
- let result200 = null;
984
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
985
- result200 = SmartParkWrapperDtoHttpResponseData.fromJS(resultData200);
986
- return _observableOf(result200);
987
- }));
988
- }
989
- else if (status !== 200 && status !== 204) {
990
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
991
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
992
- }));
993
- }
994
- return _observableOf(null);
995
- }
996
- /**
997
- * @return Success
998
- */
999
- mobileGetAppConfiguration(version) {
1000
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/configuration";
1001
- if (version === undefined || version === null)
1002
- throw new Error("The parameter 'version' must be defined.");
1003
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
1004
- url_ = url_.replace(/[?&]$/, "");
1005
- let options_ = {
1006
- observe: "response",
1007
- responseType: "blob",
1008
- headers: new HttpHeaders({
1009
- "Accept": "text/plain"
1010
- })
1011
- };
1012
- return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
1013
- return this.processMobileGetAppConfiguration(response_);
1014
- })).pipe(_observableCatch((response_) => {
1015
- if (response_ instanceof HttpResponseBase) {
1016
- try {
1017
- return this.processMobileGetAppConfiguration(response_);
1018
- }
1019
- catch (e) {
1020
- return _observableThrow(e);
1021
- }
1022
- }
1023
- else
1024
- return _observableThrow(response_);
1025
- }));
1026
- }
1027
- processMobileGetAppConfiguration(response) {
1028
- const status = response.status;
1029
- const responseBlob = response instanceof HttpResponse ? response.body :
1030
- response.error instanceof Blob ? response.error : undefined;
1031
- let _headers = {};
1032
- if (response.headers) {
1033
- for (let key of response.headers.keys()) {
1034
- _headers[key] = response.headers.get(key);
1035
- }
1036
- }
1037
- if (status === 404) {
1038
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1039
- let result404 = null;
1040
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
1041
- result404 = ProblemDetails.fromJS(resultData404);
1042
- return throwException("Not Found", status, _responseText, _headers, result404);
1043
- }));
1044
- }
1045
- else if (status === 200) {
1046
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1047
- let result200 = null;
1048
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
1049
- result200 = AppConfigurationDtoHttpResponseData.fromJS(resultData200);
1050
- return _observableOf(result200);
1051
- }));
1052
- }
1053
- else if (status !== 200 && status !== 204) {
1054
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1055
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
1056
- }));
1057
- }
1058
- return _observableOf(null);
1059
- }
1060
- /**
1061
- * @param refreshToken (optional)
1062
- * @return Success
1063
- */
1064
- mobileRefreshToken(refreshToken, version) {
1065
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/users/refresh-token";
1066
- if (version === undefined || version === null)
1067
- throw new Error("The parameter 'version' must be defined.");
1068
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
1069
- url_ = url_.replace(/[?&]$/, "");
1070
- let options_ = {
1071
- observe: "response",
1072
- responseType: "blob",
1073
- headers: new HttpHeaders({
1074
- "RefreshToken": refreshToken !== undefined && refreshToken !== null ? "" + refreshToken : "",
1075
- "Accept": "text/plain"
1076
- })
1077
- };
1078
- return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_) => {
1079
- return this.processMobileRefreshToken(response_);
1080
- })).pipe(_observableCatch((response_) => {
1081
- if (response_ instanceof HttpResponseBase) {
1082
- try {
1083
- return this.processMobileRefreshToken(response_);
1084
- }
1085
- catch (e) {
1086
- return _observableThrow(e);
1087
- }
1088
- }
1089
- else
1090
- return _observableThrow(response_);
1091
- }));
1092
- }
1093
- processMobileRefreshToken(response) {
1094
- const status = response.status;
1095
- const responseBlob = response instanceof HttpResponse ? response.body :
1096
- response.error instanceof Blob ? response.error : undefined;
1097
- let _headers = {};
1098
- if (response.headers) {
1099
- for (let key of response.headers.keys()) {
1100
- _headers[key] = response.headers.get(key);
1101
- }
1102
- }
1103
- if (status === 404) {
1104
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1105
- let result404 = null;
1106
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
1107
- result404 = ProblemDetails.fromJS(resultData404);
1108
- return throwException("Not Found", status, _responseText, _headers, result404);
1109
- }));
1110
- }
1111
- else if (status === 200) {
1112
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1113
- let result200 = null;
1114
- let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
1115
- result200 = RefreshTokenDtoHttpResponseData.fromJS(resultData200);
1116
- return _observableOf(result200);
1117
- }));
1118
- }
1119
- else if (status !== 200 && status !== 204) {
1120
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1121
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
1122
- }));
1123
- }
1124
- return _observableOf(null);
1125
- }
1126
- /**
1127
- * @param body (optional)
1128
- * @return Success
1129
- */
1130
- registerToken(version, body) {
1131
- let url_ = this.baseUrl + "/api/services/v{version}/mobile/register-token";
1132
- if (version === undefined || version === null)
1133
- throw new Error("The parameter 'version' must be defined.");
1134
- url_ = url_.replace("{version}", encodeURIComponent("" + version));
1135
- url_ = url_.replace(/[?&]$/, "");
1136
- const content_ = JSON.stringify(body);
1137
- let options_ = {
1138
- body: content_,
1139
- observe: "response",
1140
- responseType: "blob",
1141
- headers: new HttpHeaders({
1142
- "Content-Type": "application/json-patch+json",
1143
- })
1144
- };
1145
- return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_) => {
1146
- return this.processRegisterToken(response_);
1147
- })).pipe(_observableCatch((response_) => {
1148
- if (response_ instanceof HttpResponseBase) {
1149
- try {
1150
- return this.processRegisterToken(response_);
1151
- }
1152
- catch (e) {
1153
- return _observableThrow(e);
1154
- }
1155
- }
1156
- else
1157
- return _observableThrow(response_);
1158
- }));
1159
- }
1160
- processRegisterToken(response) {
1161
- const status = response.status;
1162
- const responseBlob = response instanceof HttpResponse ? response.body :
1163
- response.error instanceof Blob ? response.error : undefined;
1164
- let _headers = {};
1165
- if (response.headers) {
1166
- for (let key of response.headers.keys()) {
1167
- _headers[key] = response.headers.get(key);
1168
- }
1169
- }
1170
- if (status === 404) {
1171
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1172
- let result404 = null;
1173
- let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
1174
- result404 = ProblemDetails.fromJS(resultData404);
1175
- return throwException("Not Found", status, _responseText, _headers, result404);
1176
- }));
1177
- }
1178
- else if (status === 200) {
1179
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1180
- return _observableOf(null);
1181
- }));
1182
- }
1183
- else if (status !== 200 && status !== 204) {
1184
- return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
1185
- return throwException("An unexpected server error occurred.", status, _responseText, _headers);
1186
- }));
1187
- }
1188
- return _observableOf(null);
1189
- }
1190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MobileIdentityServiceProxy, deps: [{ token: HttpClient }, { token: API_BASE_URL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1191
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MobileIdentityServiceProxy }); }
1192
- }
1193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MobileIdentityServiceProxy, decorators: [{
1194
- type: Injectable
1195
- }], ctorParameters: () => [{ type: i1.HttpClient, decorators: [{
1196
- type: Inject,
1197
- args: [HttpClient]
1198
- }] }, { type: undefined, decorators: [{
1199
- type: Optional
1200
- }, {
1201
- type: Inject,
1202
- args: [API_BASE_URL]
1203
- }] }] });
1204
645
  export class SmartparkIdentityServiceProxy {
1205
646
  constructor(http, baseUrl) {
1206
647
  this.jsonParseReviver = undefined;
@@ -4701,4 +4142,4 @@ function blobToText(blob) {
4701
4142
  }
4702
4143
  });
4703
4144
  }
4704
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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QUFjLENBQUMsR0FBUTtRQUMxQixPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDO0lBQ3ZDLENBQUM7Q0FDSjtBQUVELFNBQVMsY0FBYyxDQUFDLE9BQWUsRUFBRSxNQUFjLEVBQUUsUUFBZ0IsRUFBRSxPQUFnQyxFQUFFLE1BQVk7SUFDckgsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQ3ZDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRWhDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQVM7SUFDekIsT0FBTyxJQUFJLFVBQVUsQ0FBUyxDQUFDLFFBQWEsRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFFLEtBQUssQ0FBQyxNQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxhdXRvLWdlbmVyYXRlZD5cbi8vICAgICBHZW5lcmF0ZWQgdXNpbmcgdGhlIE5Td2FnIHRvb2xjaGFpbiB2MTQuNC4wLjAgKE5Kc29uU2NoZW1hIHYxMS4zLjIuMCAoTmV3dG9uc29mdC5Kc29uIHYxMy4wLjAuMCkpIChodHRwOi8vTlN3YWcub3JnKVxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIFJlU2hhcnBlciBkaXNhYmxlIEluY29uc2lzdGVudE5hbWluZ1xuXG5pbXBvcnQgeyBtZXJnZU1hcCBhcyBfb2JzZXJ2YWJsZU1lcmdlTWFwLCBjYXRjaEVycm9yIGFzIF9vYnNlcnZhYmxlQ2F0Y2ggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIGFzIF9vYnNlcnZhYmxlVGhyb3csIG9mIGFzIF9vYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBBUElfQkFTRV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignQVBJX0JBU0VfVVJMJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldElkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldExvZ28oaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvYXNzZXQvbG9nbz9cIjtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdpZGVudGlmaWVyJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJJZGVudGlmaWVyPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBpZGVudGlmaWVyKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFja29mZmljZVVzZXJJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBiYWNrb2ZmaWNlQXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvYmFja29mZmljZXVzZXIvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NCYWNrb2ZmaWNlQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NCYWNrb2ZmaWNlQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0JhY2tvZmZpY2VBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAyOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDIgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMiA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMik7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbigpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vb25saW5lLXZhbGlkYXRvci12ZXJzaW9uXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT2JqZWN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0U2V0dGluZ3NCeUNhdGVnb3J5KGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5KTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9jb25maWd1cmF0aW9uL3NldHRpbmdzL3tjYXRlZ29yeX1cIjtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSB1bmRlZmluZWQgfHwgY2F0ZWdvcnkgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdjYXRlZ29yeScgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcIntjYXRlZ29yeX1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBjYXRlZ29yeSkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9iamVjdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEFwcENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvY29uZmlndXJhdGlvblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFwcE1vZHVsZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGZhY2lsaXR5QWxsKGFwcE1vZHVsZTogQXBwTW9kdWxlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvZmFjaWxpdHkvYmFzaWM/XCI7XG4gICAgICAgIGlmIChhcHBNb2R1bGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdhcHBNb2R1bGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoYXBwTW9kdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiYXBwTW9kdWxlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBhcHBNb2R1bGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZhY2lsaXR5QWxsKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGYWNpbGl0eUFsbChyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRmFjaWxpdHlBbGwocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYXBwTW9kdWxlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0RmFjaWxpdHlUcmVlKGFwcE1vZHVsZTogQXBwTW9kdWxlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2ZhY2lsaXR5L3RyZWU/XCI7XG4gICAgICAgIGlmIChhcHBNb2R1bGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdhcHBNb2R1bGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoYXBwTW9kdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiYXBwTW9kdWxlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBhcHBNb2R1bGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEZhY2lsaXR5VHJlZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0RmFjaWxpdHlUcmVlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldEZhY2lsaXR5VHJlZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvbklkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ga2V5TmFtZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldFJlc291cmNlKGtleU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9sb2NhbGl6YXRpb24vZ2V0LXJlc291cmNlP1wiO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2tleU5hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoa2V5TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImtleU5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGtleU5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFJlc291cmNlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXNwb25zZS5oZWFkZXJzID8gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGZpbGVOYW1lTWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24gPyAvZmlsZW5hbWVcXCo9KD86KFxcXFw/WydcIl0pKC4qPylcXDF8KD86W15cXHNdKycuKj8nKT8oW147XFxuXSopKS9nLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGZpbGVOYW1lTWF0Y2ggJiYgZmlsZU5hbWVNYXRjaC5sZW5ndGggPiAxID8gZmlsZU5hbWVNYXRjaFszXSB8fCBmaWxlTmFtZU1hdGNoWzJdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZU1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uID8gL2ZpbGVuYW1lPVwiPyhbXlwiXSo/KVwiPyg7fCQpL2cuZXhlYyhjb250ZW50RGlzcG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWVNYXRjaCAmJiBmaWxlTmFtZU1hdGNoLmxlbmd0aCA+IDEgPyBmaWxlTmFtZU1hdGNoWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YoeyBmaWxlTmFtZTogZmlsZU5hbWUsIGRhdGE6IHJlc3BvbnNlQmxvYiBhcyBhbnksIHN0YXR1czogc3RhdHVzLCBoZWFkZXJzOiBfaGVhZGVycyB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8RmlsZVJlc3BvbnNlPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlQXV0aGVudGljYXRlKHZlcnNpb246IHN0cmluZywgYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGVcIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUF1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTW9iaWxlQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZUdldExvZ28oaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkLCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL2Fzc2V0L2xvZ28/XCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIGlmIChpZGVudGlmaWVyID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnaWRlbnRpZmllcicgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiSWRlbnRpZmllcj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgaWRlbnRpZmllcikgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0TG9nbyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0TG9nbyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTW9iaWxlR2V0TG9nbyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZUdldFZlcnNpb25zKHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3Z7dmVyc2lvbn0vbW9iaWxlL3NtYXJ0cGFyay92ZXJzaW9uc1wiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVHZXRWZXJzaW9ucyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0VmVyc2lvbnMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTW9iaWxlR2V0VmVyc2lvbnMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtb2JpbGVHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkoY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnksIHZlcnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9jb25maWd1cmF0aW9uL3NldHRpbmdzL3tjYXRlZ29yeX1cIjtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSB1bmRlZmluZWQgfHwgY2F0ZWdvcnkgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdjYXRlZ29yeScgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcIntjYXRlZ29yeX1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBjYXRlZ29yeSkpO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUdldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01vYmlsZUdldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9iamVjdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBhcHBNb2R1bGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtb2JpbGVHZXRTbWFydHBhcmtCYXNpY0FsbChhcHBNb2R1bGU6IEFwcE1vZHVsZSB8IHVuZGVmaW5lZCwgdmVyc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9mYWNpbGl0eS9iYXNpYz9cIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgaWYgKGFwcE1vZHVsZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2FwcE1vZHVsZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChhcHBNb2R1bGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJhcHBNb2R1bGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGFwcE1vZHVsZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlR2V0U21hcnRwYXJrQmFzaWNBbGwocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUdldFNtYXJ0cGFya0Jhc2ljQWxsKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVHZXRTbWFydHBhcmtCYXNpY0FsbChyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1vYmlsZUdldEFwcENvbmZpZ3VyYXRpb24odmVyc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy92e3ZlcnNpb259L21vYmlsZS9jb25maWd1cmF0aW9uXCI7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgdmVyc2lvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3ZlcnNpb24nIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dmVyc2lvbn1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB2ZXJzaW9uKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUdldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vYmlsZUdldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01vYmlsZUdldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbW9iaWxlUmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCB2ZXJzaW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvdXNlcnMvcmVmcmVzaC10b2tlblwiO1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHZlcnNpb24gPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd2ZXJzaW9uJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3ZlcnNpb259XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdmVyc2lvbikpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiUmVmcmVzaFRva2VuXCI6IHJlZnJlc2hUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHJlZnJlc2hUb2tlbiAhPT0gbnVsbCA/IFwiXCIgKyByZWZyZXNoVG9rZW4gOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTW9iaWxlUmVmcmVzaFRva2VuKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNb2JpbGVSZWZyZXNoVG9rZW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNb2JpbGVSZWZyZXNoVG9rZW4ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHJlZ2lzdGVyVG9rZW4odmVyc2lvbjogc3RyaW5nLCBib2R5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvdnt2ZXJzaW9ufS9tb2JpbGUvcmVnaXN0ZXItdG9rZW5cIjtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCB2ZXJzaW9uID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndmVyc2lvbicgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt2ZXJzaW9ufVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHZlcnNpb24pKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWdpc3RlclRva2VuKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWdpc3RlclRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVnaXN0ZXJUb2tlbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyc2lvbnMoKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3NtYXJ0cGFyay92ZXJzaW9uc1wiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJzaW9ucyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyc2lvbnMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZW5hbnRJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5hbWUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRUZW5hbnREZXRhaWxzKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3RlbmFudC9kZXRhaWxzP1wiO1xuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ25hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcIm5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIG5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5SWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1lKCk6IE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3RoaXJkcGFydHkvbWVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01lKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgYXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3JlZnJlc2gtdG9rZW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIlJlZnJlc2hUb2tlblwiOiByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4gIT09IG51bGwgPyBcIlwiICsgcmVmcmVzaFRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFjdGl2YXRpb25Ub2tlbiAob3B0aW9uYWwpIFxuICAgICAqIEBwYXJhbSBwYXNzd29yZENoYW5nZVR5cGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2YWxpZGF0ZUFjdGl2YXRpb24oYWN0aXZhdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIHBhc3N3b3JkQ2hhbmdlVHlwZTogUGFzc3dvcmRDaGFuZ2VUeXBlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbj9cIjtcbiAgICAgICAgaWYgKHBhc3N3b3JkQ2hhbmdlVHlwZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3Bhc3N3b3JkQ2hhbmdlVHlwZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChwYXNzd29yZENoYW5nZVR5cGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJwYXNzd29yZENoYW5nZVR5cGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHBhc3N3b3JkQ2hhbmdlVHlwZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjdGl2YXRpb25Ub2tlblwiOiBhY3RpdmF0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCAmJiBhY3RpdmF0aW9uVG9rZW4gIT09IG51bGwgPyBcIlwiICsgYWN0aXZhdGlvblRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGF1dGhlbnRpY2F0ZU1vYmlsZShib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGUtbW9iaWxlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGVNb2JpbGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZU1vYmlsZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0F1dGhlbnRpY2F0ZU1vYmlsZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgtbG9naW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGhcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGVuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQ6IG51bWJlcik6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy97dXNlcklkfS9lbmFibGUtMmZhXCI7XG4gICAgICAgIGlmICh1c2VySWQgPT09IHVuZGVmaW5lZCB8fCB1c2VySWQgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd1c2VySWQnIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dXNlcklkfVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHVzZXJJZCkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInB1dFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBkaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3t1c2VySWR9L2Rpc2FibGUtMmZhXCI7XG4gICAgICAgIGlmICh1c2VySWQgPT09IHVuZGVmaW5lZCB8fCB1c2VySWQgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd1c2VySWQnIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dXNlcklkfVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHVzZXJJZCkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInB1dFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG9wZW5JZEF1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL29pZGMtYXV0aFwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDIpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMjogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAyID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDIgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDIpO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldE9ubGluZVZhbGlkYXRvckNvbnRleHQoKTogT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdmFsaWRhdGlvbi9vbmxpbmUtdmFsaWRhdG9yLWNvbnRleHRcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yQ29udGV4dChyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2YXRlUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRmYVNldHVwOiBUZmFTZXR1cER0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQWN0aXZhdGVSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy50ZmFTZXR1cCA9IF9kYXRhW1widGZhU2V0dXBcIl0gPyBUZmFTZXR1cER0by5mcm9tSlMoX2RhdGFbXCJ0ZmFTZXR1cFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQWN0aXZhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcInRmYVNldHVwXCJdID0gdGhpcy50ZmFTZXR1cCA/IHRoaXMudGZhU2V0dXAudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFjdGl2YXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQ29uZmlndXJhdGlvbkR0byBpbXBsZW1lbnRzIElBcHBDb25maWd1cmF0aW9uRHRvIHtcbiAgICBuZXdFZGdlRmxhZzogYm9vbGVhbjtcbiAgICBsYXRlc3RFZGdlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFuYWx5dGljc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZmVlZGJhY2tUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBtbDogbnVtYmVyO1xuICAgIG1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFwcENvbmZpZ3VyYXRpb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0VkZ2VGbGFnID0gX2RhdGFbXCJuZXdFZGdlRmxhZ1wiXTtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0RWRnZVZlcnNpb24gPSBfZGF0YVtcImxhdGVzdEVkZ2VWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5hbmFseXRpY3NUb2tlbiA9IF9kYXRhW1wiYW5hbHl0aWNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrVG9rZW4gPSBfZGF0YVtcImZlZWRiYWNrVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnBtbCA9IF9kYXRhW1wicG1sXCJdO1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbiA9IF9kYXRhW1wibWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbiA9IF9kYXRhW1wibWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBcHBDb25maWd1cmF0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuZXdFZGdlRmxhZ1wiXSA9IHRoaXMubmV3RWRnZUZsYWc7XG4gICAgICAgIGRhdGFbXCJsYXRlc3RFZGdlVmVyc2lvblwiXSA9IHRoaXMubGF0ZXN0RWRnZVZlcnNpb247XG4gICAgICAgIGRhdGFbXCJhbmFseXRpY3NUb2tlblwiXSA9IHRoaXMuYW5hbHl0aWNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJmZWVkYmFja1Rva2VuXCJdID0gdGhpcy5mZWVkYmFja1Rva2VuO1xuICAgICAgICBkYXRhW1wicG1sXCJdID0gdGhpcy5wbWw7XG4gICAgICAgIGRhdGFbXCJtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXSA9IHRoaXMubWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb247XG4gICAgICAgIGRhdGFbXCJtaW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb25cIl0gPSB0aGlzLm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBDb25maWd1cmF0aW9uRHRvIHtcbiAgICBuZXdFZGdlRmxhZzogYm9vbGVhbjtcbiAgICBsYXRlc3RFZGdlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFuYWx5dGljc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZmVlZGJhY2tUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBtbDogbnVtYmVyO1xuICAgIG1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEFwcENvbmZpZ3VyYXRpb25EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IEFwcENvbmZpZ3VyYXRpb25EdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBcHBDb25maWd1cmF0aW9uRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIEFwcE1vZHVsZSB7XG4gICAgQ2MgPSAwLFxuICAgIE1hbmFnZW1lbnQgPSAxLFxuICAgIFNldHRpbmdzID0gMixcbiAgICBWYWxpZGF0aW9uID0gMyxcbiAgICBHdWVzdHMgPSA0LFxuICAgIFJlcG9ydHMgPSA1LFxuICAgIE1vbnRobGllcyA9IDYsXG4gICAgQmFja29mZmljZSA9IDcsXG4gICAgUGkgPSA4LFxuICAgIEFjY291bnRzID0gOSxcbiAgICBMb3RDb25maWd1cmF0aW9uID0gMTAsXG4gICAgRUNvbW1lcmNlQmFja29mZmljZSA9IDExLFxufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlID0gX2RhdGFbXCJjb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW1wb3JhcnlCbG9ja2VkVGltZSA9IF9kYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl0gPSB0aGlzLnRlbXBvcmFyeUJsb2NrZWRUaW1lO1xuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHRlbmFudElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gX2RhdGFbXCJwYXNzd29yZFwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50SWQgPSBfZGF0YVtcInRlbmFudElkXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZFwiXSA9IHRoaXMucGFzc3dvcmQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRJZFwiXSA9IHRoaXMudGVuYW50SWQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB0ZW5hbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICB1c2VySWQ6IG51bWJlcjtcbiAgICBmaXJzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsYXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBwYXNzd29yZEV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbW9kdWxlczogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGRlZmF1bHRNb2R1bGU6IEFwcE1vZHVsZTtcbiAgICB0aGlyZFBhcnR5VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc2V0dGluZ3M6IFNwYXJrU2V0dGluZ3NEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcklzVGVtcG9yYXJ5QmxvY2tlZDogYm9vbGVhbjtcbiAgICBwYXNzd29yZEV4cGlyYXRpb25TdGF0ZTogUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU7XG4gICAgZGF5c1RvRXhwaXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb246IGJvb2xlYW47XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG86IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvO1xuICAgIHNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IF9kYXRhW1widXNlcklkXCJdO1xuICAgICAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBfZGF0YVtcImZpcnN0TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbiA9IF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcIm1vZHVsZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJtb2R1bGVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMucHVzaChBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRNb2R1bGUgPSBfZGF0YVtcImRlZmF1bHRNb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnRoaXJkUGFydHlUb2tlbiA9IF9kYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSW50ZXJ2YWwgPSBfZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wic2V0dGluZ3NcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic2V0dGluZ3NcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucHVzaChTcGFya1NldHRpbmdzRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBfZGF0YVtcIm1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJJc1RlbXBvcmFyeUJsb2NrZWQgPSBfZGF0YVtcInVzZXJJc1RlbXBvcmFyeUJsb2NrZWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvblN0YXRlID0gX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25TdGF0ZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF5c1RvRXhwaXJlID0gX2RhdGFbXCJkYXlzVG9FeHBpcmVcIl07XG4gICAgICAgICAgICB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uID0gX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvblwiXTtcbiAgICAgICAgICAgIHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gPSBfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvXCJdID8gVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8uZnJvbUpTKF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID0gX2RhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSA/IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvLmZyb21KUyhfZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJJZFwiXSA9IHRoaXMudXNlcklkO1xuICAgICAgICBkYXRhW1wiZmlyc3ROYW1lXCJdID0gdGhpcy5maXJzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJsYXN0TmFtZVwiXSA9IHRoaXMubGFzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VyU3RhdHVzXCJdID0gdGhpcy51c2VyU3RhdHVzO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb24gPyB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kdWxlcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJtb2R1bGVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubW9kdWxlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wibW9kdWxlc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJkZWZhdWx0TW9kdWxlXCJdID0gdGhpcy5kZWZhdWx0TW9kdWxlO1xuICAgICAgICBkYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdID0gdGhpcy50aGlyZFBhcnR5VG9rZW47XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJyZWZyZXNoVG9rZW5cIl0gPSB0aGlzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXSA9IHRoaXMucmVmcmVzaEludGVydmFsO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3MpKSB7XG4gICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5zZXR0aW5ncylcbiAgICAgICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJtZXNzYWdlXCJdID0gdGhpcy5tZXNzYWdlO1xuICAgICAgICBkYXRhW1widXNlcklzVGVtcG9yYXJ5QmxvY2tlZFwiXSA9IHRoaXMudXNlcklzVGVtcG9yYXJ5QmxvY2tlZDtcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblN0YXRlXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICAgICAgZGF0YVtcImRheXNUb0V4cGlyZVwiXSA9IHRoaXMuZGF5c1RvRXhwaXJlO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgIHVzZXJJZDogbnVtYmVyO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtb2R1bGVzOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdE1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHRoaXJkUGFydHlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzZXR0aW5nczogU3BhcmtTZXR0aW5nc0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VySXNUZW1wb3JhcnlCbG9ja2VkOiBib29sZWFuO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvblN0YXRlOiBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICBkYXlzVG9FeHBpcmU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbjogYm9vbGVhbjtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bzogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG87XG4gICAgc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG86IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZGF0YVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImRhdGFcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICBkYXRhW1wiZGF0YVwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGVbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcInN1Yk1vZHVsZVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic3ViTW9kdWxlXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJtb2R1bGVcIl0gPSB0aGlzLm1vZHVsZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zdWJNb2R1bGUpKSB7XG4gICAgICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuc3ViTW9kdWxlKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlW10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eUJhc2ljRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5QmFzaWNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgY2xvdWRJZDogbnVtYmVyO1xuICAgIGNsb3VkUGFyZW50SWQ6IG51bWJlcjtcbiAgICBpc0Jhc2ljOiBib29sZWFuO1xuICAgIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gICAgc2l0ZUNvZGU6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaXNNdWx0aVBhcms6IG51bWJlcjtcbiAgICB0aW1lRHJpZnQ6IG51bWJlcjtcbiAgICBzZXJ2ZXJEYXRlVGltZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcFRpbWVab25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdG90YWxTcGFjZTogbnVtYmVyO1xuICAgIGlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzTFBSQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzTFBSRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc1RpY2tldExlc3NFbmFibGVkOiBib29sZWFuO1xuICAgIGxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM6IHsgW2tleTogc3RyaW5nXTogUGVybWlzc2lvbkR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBmZWF0dXJlUGVybWlzc2lvbnM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZXh0ZXJuYWxJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUZhY2lsaXR5QmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQYXJlbnRJZCA9IF9kYXRhW1wiY2xvdWRQYXJlbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNCYXNpYyA9IF9kYXRhW1wiaXNCYXNpY1wiXTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlQYXJrUGFyZW50SUQgPSBfZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdO1xuICAgICAgICAgICAgdGhpcy5zaXRlQ29kZSA9IF9kYXRhW1wic2l0ZUNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IF9kYXRhW1wicGFyZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5pc011bHRpUGFyayA9IF9kYXRhW1wiaXNNdWx0aVBhcmtcIl07XG4gICAgICAgICAgICB0aGlzLnRpbWVEcmlmdCA9IF9kYXRhW1widGltZURyaWZ0XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlVGltZSA9IF9kYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPyBtb21lbnQoX2RhdGFbXCJzZXJ2ZXJEYXRlVGltZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcFRpbWVab25lID0gX2RhdGFbXCJzcFRpbWVab25lXCJdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFNwYWNlID0gX2RhdGFbXCJ0b3RhbFNwYWNlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gX2RhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0xQUkNvbm5lY3RlZCA9IF9kYXRhW1wiaXNMUFJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTFBSRW5hYmxlZCA9IF9kYXRhW1wiaXNMUFJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1RpY2tldExlc3NFbmFibGVkID0gX2RhdGFbXCJpc1RpY2tldExlc3NFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBfZGF0YVtcImFjdGl2ZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInBlcm1pc3Npb25zXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwZXJtaXNzaW9uc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wZXJtaXNzaW9ucylba2V5XSA9IF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSA/IFBlcm1pc3Npb25EdG8uZnJvbUpTKF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSkgOiBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsSWRlbnRpZmllciA9IF9kYXRhW1wiZXh0ZXJuYWxJZGVudGlmaWVyXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eUJhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wiY2xvdWRQYXJlbnRJZFwiXSA9IHRoaXMuY2xvdWRQYXJlbnRJZDtcbiAgICAgICAgZGF0YVtcImlzQmFzaWNcIl0gPSB0aGlzLmlzQmFzaWM7XG4gICAgICAgIGRhdGFbXCJtdWx0aVBhcmtQYXJlbnRJRFwiXSA9IHRoaXMubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGRhdGFbXCJzaXRlQ29kZVwiXSA9IHRoaXMuc2l0ZUNvZGU7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wicGFyZW50XCJdID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGRhdGFbXCJpc011bHRpUGFya1wiXSA9IHRoaXMuaXNNdWx0aVBhcms7XG4gICAgICAgIGRhdGFbXCJ0aW1lRHJpZnRcIl0gPSB0aGlzLnRpbWVEcmlmdDtcbiAgICAgICAgZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdID0gdGhpcy5zZXJ2ZXJEYXRlVGltZSA/IHRoaXMuc2VydmVyRGF0ZVRpbWUudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BUaW1lWm9uZVwiXSA9IHRoaXMuc3BUaW1lWm9uZTtcbiAgICAgICAgZGF0YVtcInRvdGFsU3BhY2VcIl0gPSB0aGlzLnRvdGFsU3BhY2U7XG4gICAgICAgIGRhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdID0gdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdID0gdGhpcy5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkNvbm5lY3RlZFwiXSA9IHRoaXMuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkVuYWJsZWRcIl0gPSB0aGlzLmlzTFBSRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzVGlja2V0TGVzc0VuYWJsZWRcIl0gPSB0aGlzLmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicGVybWlzc2lvbnNcIl0pW2tleV0gPSB0aGlzLnBlcm1pc3Npb25zW2tleV0gPyB0aGlzLnBlcm1pc3Npb25zW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJleHRlcm5hbElkZW50aWZpZXJcIl0gPSB0aGlzLmV4dGVybmFsSWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBjbG91ZFBhcmVudElkOiBudW1iZXI7XG4gICAgaXNCYXNpYzogYm9vbGVhbjtcbiAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICAgIHNpdGVDb2RlOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlzTXVsdGlQYXJrOiBudW1iZXI7XG4gICAgdGltZURyaWZ0OiBudW1iZXI7XG4gICAgc2VydmVyRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BUaW1lWm9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRvdGFsU3BhY2U6IG51bWJlcjtcbiAgICBpc01haW5Db250cm9sbGVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc0xQUkNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0xQUkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWNrZXRMZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zOiB7IFtrZXk6IHN0cmluZ106IFBlcm1pc3Npb25EdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZVBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIGV4dGVybmFsSWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgTWFudWFsbHlSdW5aID0gMSxcbiAgICBVcGRhdGVTZXR0aW5ncyA9IDIsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDMsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDQsXG4gICAgUnVuTWFjcm8gPSA1LFxuICAgIFRyYW5zbWl0U3BlY2lhbERheXMgPSA2LFxufVxuXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlUcmVlRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5VHJlZUR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBQYXJrQnJhbmNoVHlwZTtcbiAgICBsb2NhbElkOiBudW1iZXI7XG4gICAgY2hpbGRyZW46IEZhY2lsaXR5VHJlZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJRmFjaWxpdHlUcmVlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IF9kYXRhW1wiaWRcIl07XG4gICAgICAgICAgICB0aGlzLmNsb3VkSWQgPSBfZGF0YVtcImNsb3VkSWRcIl07XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IF9kYXRhW1wicGFyZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5ndWlkID0gX2RhdGFbXCJndWlkXCJdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy5sb2NhbElkID0gX2RhdGFbXCJsb2NhbElkXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJjaGlsZHJlblwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJjaGlsZHJlblwiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKEZhY2lsaXR5VHJlZUR0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBfZGF0YVtcImFjdGl2ZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogRmFjaWxpdHlUcmVlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eVRyZWVEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImNsb3VkSWRcIl0gPSB0aGlzLmNsb3VkSWQ7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wicGFyZW50XCJdID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGRhdGFbXCJndWlkXCJdID0gdGhpcy5ndWlkO1xuICAgICAgICBkYXRhW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGF0YVtcImxvY2FsSWRcIl0gPSB0aGlzLmxvY2FsSWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBkYXRhW1wiY2hpbGRyZW5cIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICBkYXRhW1wiY2hpbGRyZW5cIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiYWN0aXZlXCJdID0gdGhpcy5hY3RpdmU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEZhY2lsaXR5VHJlZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZhY2lsaXR5VHJlZUR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBQYXJrQnJhbmNoVHlwZTtcbiAgICBsb2NhbElkOiBudW1iZXI7XG4gICAgY2hpbGRyZW46IEZhY2lsaXR5VHJlZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBGYWNpbGl0eVRyZWVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZGF0YVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImRhdGFcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKEZhY2lsaXR5VHJlZUR0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5kYXRhKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdLnB1c2goaXRlbSA/IGl0ZW0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gSHR0cFN0YXR1c0NvZGUge1xuICAgIENvbnRpbnVlID0gMTAwLFxuICAgIFN3aXRjaGluZ1Byb3RvY29scyA9IDEwMSxcbiAgICBQcm9jZXNzaW5nID0gMTAyLFxuICAgIEVhcmx5SGludHMgPSAxMDMsXG4gICAgT0sgPSAyMDAsXG4gICAgQ3JlYXRlZCA9IDIwMSxcbiAgICBBY2NlcHRlZCA9IDIwMixcbiAgICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gICAgTm9Db250ZW50ID0gMjA0LFxuICAgIFJlc2V0Q29udGVudCA9IDIwNSxcbiAgICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgICBNdWx0aVN0YXR1cyA9IDIwNyxcbiAgICBBbHJlYWR5UmVwb3J0ZWQgPSAyMDgsXG4gICAgSU1Vc2VkID0gMjI2LFxuICAgIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgICBBbWJpZ3VvdXMgPSAzMDEsXG4gICAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMixcbiAgICBNb3ZlZCA9IDMwMyxcbiAgICBGb3VuZCA9IDMwNCxcbiAgICBSZWRpcmVjdCA9IDMwNSxcbiAgICBTZWVPdGhlciA9IDMwNixcbiAgICBSZWRpcmVjdE1ldGhvZCA9IDMwNyxcbiAgICBOb3RNb2RpZmllZCA9IDMwOCxcbiAgICBVc2VQcm94eSA9IDQwMCxcbiAgICBVbnVzZWQgPSA0MDEsXG4gICAgVGVtcG9yYXJ5UmVkaXJlY3QgPSA0MDIsXG4gICAgUmVkaXJlY3RLZWVwVmVyYiA9IDQwMyxcbiAgICBQZXJtYW5lbnRSZWRpcmVjdCA9IDQwNCxcbiAgICBCYWRSZXF1ZXN0ID0gNDA1LFxuICAgIFVuYXV0aG9yaXplZCA9IDQwNixcbiAgICBQYXltZW50UmVxdWlyZWQgPSA0MDcsXG4gICAgRm9yYmlkZGVuID0gNDA4LFxuICAgIE5vdEZvdW5kID0gNDA5LFxuICAgIE1ldGhvZE5vdEFsbG93ZWQgPSA0MTAsXG4gICAgTm90QWNjZXB0YWJsZSA9IDQxMSxcbiAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MTIsXG4gICAgUmVxdWVzdFRpbWVvdXQgPSA0MTMsXG4gICAgQ29uZmxpY3QgPSA0MTQsXG4gICAgR29uZSA9IDQxNSxcbiAgICBMZW5ndGhSZXF1aXJlZCA9IDQxNixcbiAgICBQcmVjb25kaXRpb25GYWlsZWQgPSA0MTcsXG4gICAgUmVxdWVzdEVudGl0eVRvb0xhcmdlID0gNDIxLFxuICAgIFJlcXVlc3RVcmlUb29Mb25nID0gNDIyLFxuICAgIFVuc3VwcG9ydGVkTWVkaWFUeXBlID0gNDIzLFxuICAgIFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MjQsXG4gICAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MjYsXG4gICAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDI4LFxuICAgIFVucHJvY2Vzc2FibGVFbnRpdHkgPSA0MjksXG4gICAgVW5wcm9jZXNzYWJsZUNvbnRlbnQgPSA0MzEsXG4gICAgTG9ja2VkID0gNDUxLFxuICAgIEZhaWxlZERlcGVuZGVuY3kgPSA1MDAsXG4gICAgVXBncmFkZVJlcXVpcmVkID0gNTAxLFxuICAgIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNTAyLFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDUwMyxcbiAgICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UgPSA1MDQsXG4gICAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA1MDUsXG4gICAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwNixcbiAgICBOb3RJbXBsZW1lbnRlZCA9IDUwNyxcbiAgICBCYWRHYXRld2F5ID0gNTA4LFxuICAgIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUxMCxcbiAgICBHYXRld2F5VGltZW91dCA9IDUxMSxcbn1cblxuZXhwb3J0IGNsYXNzIEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZGF0YSlba2V5XSA9IF9kYXRhW1wiZGF0YVwiXVtrZXldID8gQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXVtrZXldKSA6IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJkYXRhXCJdKVtrZXldID0gdGhpcy5kYXRhW2tleV0gPyB0aGlzLmRhdGFba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29EdG8gaW1wbGVtZW50cyBJTG9nb0R0byB7XG4gICAgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJTG9nb0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBfZGF0YVtcImltYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBMb2dvRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpbWFnZVwiXSA9IHRoaXMuaW1hZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IExvZ29EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nb0R0byB7XG4gICAgaW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogTG9nb0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gTG9nb0R0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IExvZ29EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIE9iamVjdEh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IGFueSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElPYmplY3RIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl07XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8gaW1wbGVtZW50cyBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmtJZDogbnVtYmVyO1xuICAgIHBhcmtOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29tcGFueUlkOiBudW1iZXI7XG4gICAgc3ViQ29tcGFueUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdmFsaWRhdGlvblR5cGVJZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5ndWlkID0gX2RhdGFbXCJndWlkXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXJrSWQgPSBfZGF0YVtcInBhcmtJZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGFya05hbWUgPSBfZGF0YVtcInBhcmtOYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5jb21wYW55SWQgPSBfZGF0YVtcImNvbXBhbnlJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc3ViQ29tcGFueUlkID0gX2RhdGFbXCJzdWJDb21wYW55SWRcIl07XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25UeXBlSWQgPSBfZGF0YVtcInZhbGlkYXRpb25UeXBlSWRcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImd1aWRcIl0gPSB0aGlzLmd1aWQ7XG4gICAgICAgIGRhdGFbXCJwYXJrSWRcIl0gPSB0aGlzLnBhcmtJZDtcbiAgICAgICAgZGF0YVtcInBhcmtOYW1lXCJdID0gdGhpcy5wYXJrTmFtZTtcbiAgICAgICAgZGF0YVtcImNvbXBhbnlJZFwiXSA9IHRoaXMuY29tcGFueUlkO1xuICAgICAgICBkYXRhW1wic3ViQ29tcGFueUlkXCJdID0gdGhpcy5zdWJDb21wYW55SWQ7XG4gICAgICAgIGRhdGFbXCJ2YWxpZGF0aW9uVHlwZUlkXCJdID0gdGhpcy52YWxpZGF0aW9uVHlwZUlkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwYXJrSWQ6IG51bWJlcjtcbiAgICBwYXJrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbXBhbnlJZDogbnVtYmVyO1xuICAgIHN1YkNvbXBhbnlJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHZhbGlkYXRpb25UeXBlSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gT25saW5lVmFsaWRhdG9yQ29udGV4dER0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gUGFya0JyYW5jaFR5cGUge1xuICAgIFBhcmsgPSAwLFxuICAgIEdyb3VwID0gMSxcbn1cblxuZXhwb3J0IGVudW0gUGFzc3dvcmRDaGFuZ2VUeXBlIHtcbiAgICBSZWdpc3RyYXRpb24gPSAwLFxuICAgIEZvcmdvdCA9IDEsXG4gICAgRXhwaXJhdGlvbiA9IDIsXG59XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkRXhwaXJhdGlvblN0YXRlIHtcbiAgICBOb3RFeHBpcmVkID0gMSxcbiAgICBBYm91dFRvRXhwaXJlID0gMixcbiAgICBFeHBpcmVkID0gMyxcbn1cblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25EdG8gaW1wbGVtZW50cyBJUGVybWlzc2lvbkR0byB7XG4gICAgdHlwZTogUGVybWlzc2lvblR5cGU7XG4gICAgZ3JvdXA6IFBlcm1pc3Npb25Hcm91cDtcbiAgICBzZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZTtcbiAgICBtYWluOiBib29sZWFuO1xuICAgIGRpc3BsYXk6IGJvb2xlYW47XG4gICAgY29tbWFuZDogUmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGZhY2lsaXR5Q29tbWFuZDogRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgYWN0aW9uOiBSZW1vdGVBY3Rpb25UeXBlcztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUGVybWlzc2lvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IF9kYXRhW1widHlwZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBfZGF0YVtcImdyb3VwXCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gX2RhdGFbXCJzZXJ2aWNlXCJdO1xuICAgICAgICAgICAgdGhpcy5tb2R1bGUgPSBfZGF0YVtcIm1vZHVsZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3ViTW9kdWxlID0gX2RhdGFbXCJzdWJNb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLm1haW4gPSBfZGF0YVtcIm1haW5cIl07XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXkgPSBfZGF0YVtcImRpc3BsYXlcIl07XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmQgPSBfZGF0YVtcImNvbW1hbmRcIl07XG4gICAgICAgICAgICB0aGlzLmZhY2lsaXR5Q29tbWFuZCA9IF9kYXRhW1wiZmFjaWxpdHlDb21tYW5kXCJdO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSBfZGF0YVtcImFjdGlvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUGVybWlzc2lvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGF0YVtcImdyb3VwXCJdID0gdGhpcy5ncm91cDtcbiAgICAgICAgZGF0YVtcInNlcnZpY2VcIl0gPSB0aGlzLnNlcnZpY2U7XG4gICAgICAgIGRhdGFbXCJtb2R1bGVcIl0gPSB0aGlzLm1vZHVsZTtcbiAgICAgICAgZGF0YVtcInN1Yk1vZHVsZVwiXSA9IHRoaXMuc3ViTW9kdWxlO1xuICAgICAgICBkYXRhW1wibWFpblwiXSA9IHRoaXMubWFpbjtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlcIl0gPSB0aGlzLmRpc3BsYXk7XG4gICAgICAgIGRhdGFbXCJjb21tYW5kXCJdID0gdGhpcy5jb21tYW5kO1xuICAgICAgICBkYXRhW1wiZmFjaWxpdHlDb21tYW5kXCJdID0gdGhpcy5mYWNpbGl0eUNvbW1hbmQ7XG4gICAgICAgIGRhdGFbXCJhY3Rpb25cIl0gPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUGVybWlzc2lvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFBlcm1pc3Npb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQZXJtaXNzaW9uRHRvIHtcbiAgICB0eXBlOiBQZXJtaXNzaW9uVHlwZTtcbiAgICBncm91cDogUGVybWlzc2lvbkdyb3VwO1xuICAgIHNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlO1xuICAgIG1haW46IGJvb2xlYW47XG4gICAgZGlzcGxheTogYm9vbGVhbjtcbiAgICBjb21tYW5kOiBSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgZmFjaWxpdHlDb21tYW5kOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBhY3Rpb246IFJlbW90ZUFjdGlvblR5cGVzO1xufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uR3JvdXAge1xuICAgIE5vbmUgPSAwLFxuICAgIEdlbmVyYWxQZXJtaXNzaW9ucyA9IDEsXG4gICAgQWR2YW5jZWRPcHRpb25zID0gMixcbiAgICBUaWNrZXRQZXJtaXNzaW9ucyA9IDMsXG4gICAgUGFya2luZ0xvdFBlcm1pc3Npb25zID0gNCxcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvblNlcnZpY2Uge1xuICAgIENsb3VkID0gMCxcbiAgICBTcGFya0NvcmUgPSAxLFxuICAgIENsb3VkU3BhcmtDb3JlID0gMixcbiAgICBTbWFydFBhcmsgPSAzLFxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uVHlwZSB7XG4gICAgQ2NNYWluID0gMCxcbiAgICBEZXByZWNhdGVkQWRtaW5NYWluID0gMSxcbiAgICBVbmxvY2tEb29yID0gMixcbiAgICBWZW5kR2F0ZSA9IDMsXG4gICAgVmFsaWRhdGUgPSA0LFxuICAgIFNldFByaWNlID0gNSxcbiAgICBSZXN0b3JlVGlja2V0ID0gNixcbiAgICBDaGFuZ2VEZXZpY2VBY2Nlc3NNb2RlID0gNyxcbiAgICBSZXNldERldmljZUFjY2Vzc01vZGUgPSA4LFxuICAgIFJlc3RhcnREZXZpY2UgPSA5LFxuICAgIFJlc2V0QmlsbERpc3BlbnNlciA9IDEwLFxuICAgIENsb3NlR2F0ZSA9IDExLFxuICAgIEVqZWN0SmFtbWVkVGlja2V0ID0gMTIsXG4gICAgU3dhbGxvd0phbW1lZFRpY2tldCA9IDEzLFxuICAgIERlbGl2ZXJCdW5kbGVCaWxscyA9IDE0LFxuICAgIExvY2tDYXNoUmVnaXN0ZXIgPSAxNSxcbiAgICBTZXRSYXRlID0gMTYsXG4gICAgSW5zZXJ0VmlydHVhbFRpY2tldCA9IDE3LFxuICAgIEhvbGRSZWxheSA9IDE4LFxuICAgIE9wZW5SZWxheSA9IDE5LFxuICAgIFByaW50VGlja2V0ID0gMjAsXG4gICAgVHJpZ2dlckxQUk1vZHVsZSA9IDIxLFxuICAgIEVuYWJsZVJlcHJpbnRSZWNlaXB0ID0gMjIsXG4gICAgT3BlbkdhdGVDb250aW51b3VzbHkgPSAyMyxcbiAgICBDbG9zZUdhdGVDb250aW51b3VzbHkgPSAyNCxcbiAgICBNYW51YWxseUNsb3NlVGlja2V0ID0gMjUsXG4gICAgVXBkYXRlTG9jYXRpb24gPSAyNixcbiAgICBVcGRhdGVPY2N1cGFuY3kgPSAyNyxcbiAgICBBdHRhY2hUaWNrZXQgPSAyOCxcbiAgICBVcGRhdGVMaWNlbnNlUGxhdGUgPSAyOSxcbiAgICBMb3N0VGlja2V0ID0gMzAsXG4gICAgSW5zZXJ0UmVtb3RlVmFsaWRhdGlvbiA9IDMxLFxuICAgIFVwZGF0ZVBheW1lbnQgPSAzMixcbiAgICBVcGRhdGVab25lT2NjdXBhbmN5ID0gMzMsXG4gICAgVXBkYXRlUmVtb3RlVmFsaWRhdGlvbiA9IDM0LFxuICAgIFZhbGlkYXRpb25NYWluID0gMzUsXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uVmlldyA9IDM2LFxuICAgIFZhbGlkYXRpb25TdGlja2VyVmlldyA9IDM3LFxuICAgIFZhbGlkYXRpb25Db3Vwb25WaWV3ID0gMzgsXG4gICAgUmVwb3J0c01haW4gPSAzOSxcbiAgICBHdWVzdE1haW4gPSA0MCxcbiAgICBVcGRhdGVEb2N1bWVudCA9IDQxLFxuICAgIFZpZXdSZXZlbnVlID0gNDIsXG4gICAgUHJpbnRSZWNlaXB0ID0gNDMsXG4gICAgTW9udGhsaWVzTWFpbiA9IDQ0LFxuICAgIFBpTWFpbiA9IDQ1LFxuICAgIEd1ZXN0R3JvdXBWaWV3ID0gNDYsXG4gICAgU2luZ2xlR3Vlc3QgPSA0NyxcbiAgICBDbG9zZVRpY2tldEZvcklTRiA9IDQ4LFxuICAgIFBheW1lbnRGb3JJU0YgPSA0OSxcbiAgICBNYW51YWxseVJ1blogPSA1MCxcbiAgICBVcGRhdGVTZXR0aW5ncyA9IDUxLFxuICAgIFNldEFjdGl2ZVJhdGUgPSA1MixcbiAgICBVcGRhdGVNQ0RhdGVUaW1lID0gNTMsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0VmlldyA9IDU0LFxuICAgIEd1ZXN0VmlldyA9IDU1LFxuICAgIEFjY291bnRNYW5hZ2VtZW50TWFpbiA9IDU2LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudFZpZXcgPSA1NyxcbiAgICBNb250aGxpZXNWaWV3ID0gNTgsXG4gICAgTW9udGhseVNlcmllc0NyZWF0ZSA9IDU5LFxuICAgIFJ1bk1hY3JvID0gNjAsXG4gICAgVGVuYW50U2V0dGluZ3NNYWluID0gNjEsXG4gICAgTWFuYWdlbWVudEFkbWluID0gNjIsXG4gICAgQmxhY2tMaXN0ID0gNjMsXG4gICAgU3lzdGVtQWRtaW4gPSA2NCxcbiAgICBPcGVyYXRpb25hbEFkbWluID0gNjUsXG4gICAgRmFjaWxpdGllc0FuZFNtYXJ0cGFya3MgPSA2NixcbiAgICBMb2dvID0gNjcsXG4gICAgU210cFNldHRpbmdzID0gNjgsXG4gICAgRGVmYXVsdFVzZXJTZXR0aW5ncyA9IDY5LFxuICAgIEF1ZGl0ID0gNzAsXG4gICAgQmFja29mZmljZU1haW4gPSA3MSxcbiAgICBMb3RDb25maWd1cmF0aW9uTWFpbiA9IDcyLFxuICAgIExvdENvbmZpZ3VyYXRpb25SYXRlcyA9IDczLFxuICAgIExvdENvbmZpZ3VyYXRpb25TY2hlZHVsZXIgPSA3NCxcbiAgICBMb3RDb25maWd1cmF0aW9uVmFsaWRhdGlvblByb2ZpbGUgPSA3NSxcbiAgICBIb3RlbEd1ZXN0SU9DcmVhdGUgPSA3NixcbiAgICBFQ29tbWVyY2VCYWNrb2ZmaWNlTWFpbiA9IDc3LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvbkNyZWF0ZSA9IDc4LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvblVwZGF0ZSA9IDc5LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvbkRlbGV0ZSA9IDgwLFxuICAgIFZhbGlkYXRpb25TdGlja2VyQ3JlYXRlID0gODEsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJVcGRhdGUgPSA4MixcbiAgICBWYWxpZGF0aW9uU3RpY2tlckRlbGV0ZSA9IDgzLFxuICAgIFZhbGlkYXRpb25Db3Vwb25DcmVhdGUgPSA4NCxcbiAgICBWYWxpZGF0aW9uQ291cG9uVXBkYXRlID0gODUsXG4gICAgVmFsaWRhdGlvbkNvdXBvbkRlbGV0ZSA9IDg2LFxuICAgIEd1ZXN0R3JvdXBDcmVhdGUgPSA4NyxcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnRDcmVhdGUgPSA4OCxcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnRVcGRhdGUgPSA4OSxcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnREZWxldGUgPSA5MCxcbiAgICBNb250aGxpZXNDcmVhdGUgPSA5MSxcbiAgICBNb250aGxpZXNVcGRhdGUgPSA5MixcbiAgICBNb250aGxpZXNEZWxldGUgPSA5MyxcbiAgICBHdWVzdENyZWF0ZSA9IDk0LFxuICAgIEd1ZXN0VXBkYXRlID0gOTUsXG4gICAgR3Vlc3REZWxldGUgPSA5NixcbiAgICBDbG9zZVBheW1lbnRTY3JlZW4gPSA5NyxcbiAgICBFQ29tbWVyY2VBZG1pbiA9IDk4LFxuICAgIEVDb21tZXJjZVJlZ3VsYXIgPSA5OSxcbiAgICBMb3RDb25maWd1cmF0aW9uQWNjZXNzUHJvZmlsZSA9IDEwMCxcbiAgICBDYW5jZWxSZWNlaXB0ID0gMTAxLFxuICAgIEd1ZXN0QWR2YW5jZWQgPSAxMDIsXG4gICAgR3Vlc3RHcm91cEFkdmFuY2VkID0gMTAzLFxuICAgIEd1ZXN0SG90ZWxHdWVzdENyZWF0ZSA9IDEwNCxcbiAgICBHdWVzdEhvdGVsR3Vlc3RVcGRhdGUgPSAxMDUsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0RGVsZXRlID0gMTA2LFxuICAgIEltcG9ydGVyVG9vbFZpZXcgPSAxMDcsXG4gICAgR3Vlc3RFVm91Y2hlclZpZXcgPSAxMDgsXG4gICAgTG90Q29uZmlndXJhdGlvbkR5bmFtaWNQcmljaW5nID0gMTA5LFxuICAgIERpZ2l0YWxSZWNlcGl0ID0gMTEwLFxuICAgIEFsbEFjY291bnRzID0gMTExLFxuICAgIEFsbFZhbGlkYXRpb25zID0gMTEyLFxuICAgIE1vbnRobGllc0NyZWF0ZUFkdmFuY2VkID0gMTEzLFxuICAgIE1vbnRobGllc1VwZGF0ZUFkdmFuY2VkID0gMTE0LFxuICAgIE1vbnRobHlTZXJpZXNDcmVhdGVBZHZhbmNlZCA9IDExNSxcbiAgICBHdWVzdENyZWF0ZUFkdmFuY2VkID0gMTE2LFxuICAgIEd1ZXN0VXBkYXRlQWR2YW5jZWQgPSAxMTcsXG4gICAgR3Vlc3RHcm91cENyZWF0ZUFkdmFuY2VkID0gMTE4LFxuICAgIEd1ZXN0SG90ZWxHdWVzdENyZWF0ZUFkdmFuY2VkID0gMTE5LFxuICAgIEd1ZXN0SG90ZWxHdWVzdFVwZGF0ZUFkdmFuY2VkID0gMTIwLFxuICAgIFZhbGlkYXRpb25TdGlja2VyQ3JlYXRlQWR2YW5jZWQgPSAxMjEsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJVcGRhdGVBZHZhbmNlZCA9IDEyMixcbiAgICBWYWxpZGF0aW9uQ291cG9uQ3JlYXRlQWR2YW5jZWQgPSAxMjMsXG4gICAgVmFsaWRhdGlvbkNvdXBvblVwZGF0ZUFkdmFuY2VkID0gMTI0LFxuICAgIFZhbGlkYXRpb25TZWxmVmFsaWRhdGlvblZpZXcgPSAxMjUsXG4gICAgVmFsaWRhdGlvblNlbGZWYWxpZGF0aW9uQ3JlYXRlID0gMTI2LFxuICAgIFZhbGlkYXRpb25TZWxmVmFsaWRhdGlvblVwZGF0ZSA9IDEyNyxcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25EZWxldGUgPSAxMjgsXG4gICAgTG90Q29uZmlndXJhdGlvbkNhc2hpZXJNYW5hZ2VtZW50ID0gMTI5LFxuICAgIEhvdGVsR3Vlc3RJT1ZpZXcgPSAxMzAsXG4gICAgQ3JlYXRlVGlja2V0QnlMaWNlbnNlUGxhdGUgPSAxMzEsXG4gICAgRW5mb3JjZW1lbnRJbnRlZ3JhdGlvbiA9IDEzMixcbiAgICBTY2FuMlBheU1haW4gPSAxMzMsXG4gICAgU2NhbjJQYXkgPSAxMzQsXG4gICAgTW9udGhsaWVzU2VuZEFuZFByaW50ID0gMTM1LFxuICAgIEd1ZXN0U2VuZEFuZFByaW50ID0gMTM2LFxuICAgIEd1ZXN0SG90ZWxHdWVzdFNlbmRBbmRQcmludCA9IDEzNyxcbiAgICBWYWxpZGF0aW9uQ291cG9uU2VuZEFuZFByaW50ID0gMTM4LFxuICAgIFZhbGlkYXRpb25TdGlja2VyU2VuZEFuZFByaW50ID0gMTM5LFxuICAgIEF1dGhvcml6YXRpb24gPSAtMSxcbn1cblxuZXhwb3J0IGNsYXNzIFByb2JsZW1EZXRhaWxzIGltcGxlbWVudHMgSVByb2JsZW1EZXRhaWxzIHtcbiAgICB0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBkZXRhaWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpbnN0YW5jZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElQcm9ibGVtRGV0YWlscykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIF9kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBfZGF0YVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gX2RhdGFbXCJ0aXRsZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gX2RhdGFbXCJzdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLmRldGFpbCA9IF9kYXRhW1wiZGV0YWlsXCJdO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IF9kYXRhW1wiaW5zdGFuY2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFByb2JsZW1EZXRhaWxzIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQcm9ibGVtRGV0YWlscygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB0aGlzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGF0YVtcInRpdGxlXCJdID0gdGhpcy50aXRsZTtcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1wiZGV0YWlsXCJdID0gdGhpcy5kZXRhaWw7XG4gICAgICAgIGRhdGFbXCJpbnN0YW5jZVwiXSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFByb2JsZW1EZXRhaWxzIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUHJvYmxlbURldGFpbHMoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ibGVtRGV0YWlscyB7XG4gICAgdHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaW5zdGFuY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlZnJlc2hUb2tlbkR0byBpbXBsZW1lbnRzIElSZWZyZXNoVG9rZW5EdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUmVmcmVzaFRva2VuRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gX2RhdGFbXCJleHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wiZXhwaXJhdGlvblwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBSZWZyZXNoVG9rZW5EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaFRva2VuXCJdID0gdGhpcy5yZWZyZXNoVG9rZW47XG4gICAgICAgIGRhdGFbXCJleHBpcmF0aW9uXCJdID0gdGhpcy5leHBpcmF0aW9uID8gdGhpcy5leHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVmcmVzaFRva2VuRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVmcmVzaFRva2VuRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBSZWZyZXNoVG9rZW5EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gUmVmcmVzaFRva2VuRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFJlZnJlc2hUb2tlbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBSZW1vdGVBY3Rpb25UeXBlcyB7XG4gICAgVXBkYXRlTGljZW5zZVBsYXRlID0gMSxcbiAgICBVcGRhdGVEb2N1bWVudCA9IDIsXG4gICAgVmlld1JldmVudWUgPSAzLFxuICAgIFByaW50UmVjZWlwdCA9IDQsXG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgVW5sb2NrRG9vciA9IDAsXG4gICAgVmVuZEdhdGUgPSAxLFxuICAgIFZhbGlkYXRlID0gMixcbiAgICBTZXRQcmljZSA9IDMsXG4gICAgUmVzdG9yZVRpY2tldCA9IDQsXG4gICAgQ2hhbmdlRGV2aWNlQWNjZXNzTW9kZSA9IDUsXG4gICAgUmVzZXREZXZpY2VBY2Nlc3NNb2RlID0gNixcbiAgICBSZXN0YXJ0RGV2aWNlID0gNyxcbiAgICBSZXNldEJpbGxEaXNwZW5zZXIgPSA4LFxuICAgIENsb3NlR2F0ZSA9IDksXG4gICAgRWplY3RKYW1tZWRUaWNrZXQgPSAxMCxcbiAgICBTd2FsbG93SmFtbWVkVGlja2V0ID0gMTEsXG4gICAgRGVsaXZlckJ1bmRsZUJpbGxzID0gMTIsXG4gICAgTG9ja0Nhc2hSZWdpc3RlciA9IDEzLFxuICAgIFNldFJhdGUgPSAxNCxcbiAgICBJbnNlcnRWaXJ0dWFsVGlja2V0ID0gMTUsXG4gICAgSG9sZFJlbGF5ID0gMTYsXG4gICAgT3BlblJlbGF5ID0gMTcsXG4gICAgUHJpbnRUaWNrZXQgPSAxOCxcbiAgICBUcmlnZ2VyTFBSTW9kdWxlID0gMTksXG4gICAgRW5hYmxlUmVwcmludFJlY2VpcHQgPSAyMCxcbiAgICBPcGVuR2F0ZUNvbnRpbnVvdXNseSA9IDIxLFxuICAgIENsb3NlR2F0ZUNvbnRpbnVvdXNseSA9IDIyLFxuICAgIFNlbmRQYXJhbWV0ZXJzID0gMjMsXG4gICAgU2VuZEtleU9wdGlvbnMgPSAyNCxcbiAgICBNYW51YWxseUNsb3NlVGlja2V0ID0gMzAsXG4gICAgVXBkYXRlTG9jYXRpb24gPSAzMSxcbiAgICBVcGRhdGVPY2N1cGFuY3kgPSAzMixcbiAgICBBdHRhY2hUaWNrZXQgPSAzMyxcbiAgICBJbnNlcnRSZW1vdGVWYWxpZGF0aW9uID0gMzYsXG4gICAgVXBkYXRlUmVtb3RlVmFsaWRhdGlvbiA9IDM3LFxuICAgIERlbGV0ZVJlbW90ZVZhbGlkYXRpb24gPSAzOSxcbiAgICBSZXN0b3JlUmVtb3RlVmFsaWRhdGlvbiA9IDQwLFxuICAgIFVwZGF0ZVRvdGFsT2NjdXBhbmN5ID0gNDEsXG4gICAgVXBkYXRlWm9uZU9jY3VwYW5jeSA9IDQyLFxuICAgIENsb3NlVGlja2V0Rm9ySVNGID0gNDMsXG4gICAgUGF5bWVudEZvcklTRiA9IDQ0LFxuICAgIERlbGV0ZVRpY2tldCA9IDQ1LFxuICAgIENsb3NlUGF5bWVudFNjcmVlbiA9IDQ2LFxuICAgIFVwZGF0ZUFsbFZhbGlkYXRpb24gPSA0NyxcbiAgICBDYW5jZWxSZWNlaXB0ID0gNDgsXG4gICAgUmVzdGFydFNtYXJ0cGFyayA9IDQ5LFxuICAgIFNlbmREaWdpdGFsUmVjZWlwdFBhcmFtcyA9IDUwLFxuICAgIFNlbmRTdXJjaGFyZ2UgPSA1MSxcbiAgICBTZW5kTG90U2V0dXAgPSA1MixcbiAgICBTZW5kUmF0ZUltYWdlcyA9IDUzLFxuICAgIFVwZGF0ZVNtYXJ0Wm9uZU9jY3VwYW5jeSA9IDU0LFxuICAgIENyZWF0ZVRpY2tldEJ5TGljZW5zZVBsYXRlID0gNTUsXG4gICAgR2V0VGlja2V0RmVlID0gMTAwMCxcbiAgICBVcGRhdGVUaWNrZXRQYXltZW50ID0gMTAwMSxcbiAgICBVcGRhdGVDb21wYW5pZXNDb3VudGVyID0gMTAwMixcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byBpbXBsZW1lbnRzIElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgaXNTbWFydFBhcmtDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU3BhcmtDb3JlQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU3BhcmtDbG91ZENvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IF9kYXRhW1wiaWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzU21hcnRQYXJrQ29ubmVjdGVkID0gX2RhdGFbXCJpc1NtYXJ0UGFya0Nvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkID0gX2RhdGFbXCJpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID0gX2RhdGFbXCJpc1NwYXJrQ29yZUNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID0gX2RhdGFbXCJpc1NwYXJrQ2xvdWRDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wic21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJpc1NtYXJ0UGFya0Nvbm5lY3RlZFwiXSA9IHRoaXMuaXNTbWFydFBhcmtDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU3BhcmtDb3JlQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NwYXJrQ29yZUNvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU3BhcmtDbG91ZENvbm5lY3RlZFwiXSA9IHRoaXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wic21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBpc1NtYXJ0UGFya0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0Nsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIHNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBTZXR0aW5nc0NhdGVnb3J5IHtcbiAgICBEYXRlRm9ybWF0cyA9IDAsXG4gICAgQWxlcnRzID0gMSxcbiAgICBUaWNrZXRzU3BlY2lmaWNhdGlvbnMgPSAyLFxuICAgIExvY2FsaXphdGlvbiA9IDMsXG4gICAgQWxlcnRzUHJlZmVyZW5jZXNPbGQgPSA0LFxuICAgIFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uID0gNSxcbiAgICBFQ29tbWVyY2VCYWNrb2ZmaWNlVVJMID0gNixcbiAgICBTU08gPSA3LFxuICAgIFBhc3N3b3JkUG9saWN5ID0gOCxcbiAgICBEaWdpdGFsUmVjZWlwdFByb3ZpZGVyc1NldHRpbmdzID0gOSxcbiAgICBOb3RpZmljYXRpb25QcmVmZXJlbmNlc09sZCA9IDEwLFxuICAgIFNwZWNpYWxUcmFuc2llbnQgPSAxMSxcbiAgICBBbGVydHNQcmVmZXJlbmNlcyA9IDEyLFxuICAgIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzID0gMTMsXG4gICAgRW5mb3JjZW1lbnRJbnRlZ3JhdGlvblNldHRpbmdzID0gMTQsXG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byBpbXBsZW1lbnRzIElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclN0YXR1cyA9IF9kYXRhW1widXNlclN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gX2RhdGFbXCJpc0F1dGhlbnRpY2F0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVNpZ25PblByb3ZpZGVyID0gX2RhdGFbXCJzaW5nbGVTaWduT25Qcm92aWRlclwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VyU3RhdHVzXCJdID0gdGhpcy51c2VyU3RhdHVzO1xuICAgICAgICBkYXRhW1wiaXNBdXRoZW50aWNhdGVkXCJdID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XG4gICAgICAgIGRhdGFbXCJzaW5nbGVTaWduT25Qcm92aWRlclwiXSA9IHRoaXMuc2luZ2xlU2lnbk9uUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyO1xufVxuXG5leHBvcnQgZW51bSBTaW5nbGVTaWduT25Qcm92aWRlciB7XG4gICAgTWljcm9zb2Z0ID0gMSxcbiAgICBQaW5nRmVkZXJhdGUgPSAyLFxufVxuXG5leHBvcnQgZW51bSBTbWFydFBhcmtUeXBlIHtcbiAgICBTaW5nbGVQYXJrID0gMCxcbiAgICBNdWx0aVBhcmsgPSAxLFxuICAgIFN1cGVyUGFyayA9IDIsXG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydFBhcmtXcmFwcGVyRHRvIGltcGxlbWVudHMgSVNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHNtYXJ0UGFya3M6IHsgW2tleTogc3RyaW5nXTogU21hcnRwYXJrQmFzaWNEdG87IH0gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0UGFya1dyYXBwZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJzbWFydFBhcmtzXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInNtYXJ0UGFya3NcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wic21hcnRQYXJrc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5zbWFydFBhcmtzKVtrZXldID0gX2RhdGFbXCJzbWFydFBhcmtzXCJdW2tleV0gPyBTbWFydHBhcmtCYXNpY0R0by5mcm9tSlMoX2RhdGFbXCJzbWFydFBhcmtzXCJdW2tleV0pIDogbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0UGFya3MpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzbWFydFBhcmtzXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zbWFydFBhcmtzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRQYXJrcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wic21hcnRQYXJrc1wiXSlba2V5XSA9IHRoaXMuc21hcnRQYXJrc1trZXldID8gdGhpcy5zbWFydFBhcmtzW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgIHNtYXJ0UGFya3M6IHsgW2tleTogc3RyaW5nXTogU21hcnRwYXJrQmFzaWNEdG87IH0gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFNtYXJ0UGFya1dyYXBwZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFNtYXJ0UGFya1dyYXBwZXJEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBTbWFydFBhcmtXcmFwcGVyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtCYXNpY0R0byBpbXBsZW1lbnRzIElTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuICAgIGZhY2lsaXRpZXM6IEZhY2lsaXR5QmFzaWNEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzcGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBlbmFibGVTcGVjaWFsVHJhbnNpZW50czogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRwYXJrQmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cyA9IF9kYXRhW1wic2VydmljZXNSdW5uaW5nU3RhdHVzXCJdID8gU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLmZyb21KUyhfZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmFjaWxpdGllc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZhY2lsaXRpZXMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImZhY2lsaXRpZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjaWxpdGllcy5wdXNoKEZhY2lsaXR5QmFzaWNEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3BhcmtWZXJzaW9uID0gX2RhdGFbXCJzcGFya1ZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya1ZlcnNpb24gPSBfZGF0YVtcInNtYXJ0UGFya1ZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gX2RhdGFbXCJjdXJyZW5jeVwiXTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU3BlY2lhbFRyYW5zaWVudHMgPSBfZGF0YVtcImVuYWJsZVNwZWNpYWxUcmFuc2llbnRzXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJndWlkXCJdID0gdGhpcy5ndWlkO1xuICAgICAgICBkYXRhW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSA9IHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzID8gdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mYWNpbGl0aWVzKSkge1xuICAgICAgICAgICAgZGF0YVtcImZhY2lsaXRpZXNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mYWNpbGl0aWVzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJmYWNpbGl0aWVzXCJdLnB1c2goaXRlbSA/IGl0ZW0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInNwYXJrVmVyc2lvblwiXSA9IHRoaXMuc3BhcmtWZXJzaW9uO1xuICAgICAgICBkYXRhW1wic21hcnRQYXJrVmVyc2lvblwiXSA9IHRoaXMuc21hcnRQYXJrVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcImN1cnJlbmN5XCJdID0gdGhpcy5jdXJyZW5jeTtcbiAgICAgICAgZGF0YVtcImVuYWJsZVNwZWNpYWxUcmFuc2llbnRzXCJdID0gdGhpcy5lbmFibGVTcGVjaWFsVHJhbnNpZW50cztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydHBhcmtCYXNpY0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG4gICAgZmFjaWxpdGllczogRmFjaWxpdHlCYXNpY0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjdXJyZW5jeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGVuYWJsZVNwZWNpYWxUcmFuc2llbnRzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3BhcmtTZXR0aW5nc0R0byBpbXBsZW1lbnRzIElTcGFya1NldHRpbmdzRHRvIHtcbiAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeTtcbiAgICBzZXR0aW5nc0pzb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU3BhcmtTZXR0aW5nc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBfZGF0YVtcImNhdGVnb3J5XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0pzb24gPSBfZGF0YVtcInNldHRpbmdzSnNvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3BhcmtTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY2F0ZWdvcnlcIl0gPSB0aGlzLmNhdGVnb3J5O1xuICAgICAgICBkYXRhW1wic2V0dGluZ3NKc29uXCJdID0gdGhpcy5zZXR0aW5nc0pzb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNwYXJrU2V0dGluZ3NEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTcGFya1NldHRpbmdzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnk7XG4gICAgc2V0dGluZ3NKc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5kYXRhKVtrZXldID0gX2RhdGFbXCJkYXRhXCJdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJkYXRhXCJdKVtrZXldID0gKDxhbnk+dGhpcy5kYXRhKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFN1Yk1vZHVsZSB7XG4gICAgRVZhbGlkYXRpb24gPSAwLFxuICAgIFN0aWNrZXJzID0gMSxcbiAgICBDb3Vwb25zID0gMixcbiAgICBHdWVzdHMgPSAzLFxuICAgIEhvdGVsR3Vlc3RzID0gNCxcbiAgICBNb250aGxpZXMgPSA1LFxuICAgIEFjY291bnRzID0gNixcbiAgICBVc2VyTWFuYWdlbWVudCA9IDcsXG4gICAgRmFjaWxpdGllc0FuZFNtYXJ0cGFya3MgPSA4LFxuICAgIExvZ28gPSA5LFxuICAgIFNtdHBTZXR0aW5ncyA9IDEwLFxuICAgIERlZmF1bHRVc2VyU2V0dGluZ3MgPSAxMSxcbiAgICBBdWRpdCA9IDEyLFxuICAgIFJhdGVzID0gMTMsXG4gICAgU2NoZWR1bGVyID0gMTQsXG4gICAgVmFsaWRhdGlvblByb2ZpbGVzID0gMTUsXG4gICAgSG90ZWxHdWVzdHNJTyA9IDE2LFxuICAgIEFjY2Vzc1Byb2ZpbGVzID0gMTcsXG4gICAgSW1wb3J0ZXJUb29sID0gMTgsXG4gICAgRVZvdWNoZXIgPSAxOSxcbiAgICBEeW5hbWljUHJpY2luZyA9IDIwLFxuICAgIERpZ2l0YWxSZWNlaXB0ID0gMjEsXG4gICAgU2VsZlZhbGlkYXRpb24gPSAyMixcbiAgICBDYXNoaWVyc01hbmFnZW1lbnQgPSAyMyxcbiAgICBFbmZvcmNlbWVudEludGVncmF0aW9uID0gMjQsXG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREZXRhaWxzRHRvIGltcGxlbWVudHMgSVRlbmFudERldGFpbHNEdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RGV0YWlsc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlOYW1lXCJdID0gdGhpcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcm9wc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJvcHNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByb3BzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudERldGFpbHNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RGV0YWlsc0R0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUZW5hbnREZXRhaWxzRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUZW5hbnREZXRhaWxzRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGVuYW50RGV0YWlsc0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RHRvIGltcGxlbWVudHMgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy50cmVlSWQgPSBfZGF0YVtcInRyZWVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5TmFtZVwiXSA9IHRoaXMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJvcHNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByb3BzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcm9wcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1widHJlZUlkXCJdID0gdGhpcy50cmVlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZmFTZXR1cER0byBpbXBsZW1lbnRzIElUZmFTZXR1cER0byB7XG4gICAgZW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RmYUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aGVudGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHFyQ29kZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGZhU2V0dXBEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gX2RhdGFbXCJlbWFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNUZmFFbmFibGVkID0gX2RhdGFbXCJpc1RmYUVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0b3JLZXkgPSBfZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl07XG4gICAgICAgICAgICB0aGlzLnFyQ29kZUltYWdlVXJsID0gX2RhdGFbXCJxckNvZGVJbWFnZVVybFwiXTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZCA9IF9kYXRhW1wicmVnaXN0ZXJlZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGZhU2V0dXBEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlbWFpbFwiXSA9IHRoaXMuZW1haWw7XG4gICAgICAgIGRhdGFbXCJpc1RmYUVuYWJsZWRcIl0gPSB0aGlzLmlzVGZhRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl0gPSB0aGlzLmF1dGhlbnRpY2F0b3JLZXk7XG4gICAgICAgIGRhdGFbXCJxckNvZGVJbWFnZVVybFwiXSA9IHRoaXMucXJDb2RlSW1hZ2VVcmw7XG4gICAgICAgIGRhdGFbXCJyZWdpc3RlcmVkXCJdID0gdGhpcy5yZWdpc3RlcmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZmFTZXR1cER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGZhU2V0dXBEdG8ge1xuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBxckNvZGVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5VmVuZG9yRHRvIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBwYXJrQ2xvdWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSBfZGF0YVtcImFjY291bnRJZFwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wicGVybWlzc2lvblR5cGVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmtDbG91ZElkID0gX2RhdGFbXCJwYXJrQ2xvdWRJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjb3VudElkXCJdID0gdGhpcy5hY2NvdW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucGVybWlzc2lvblR5cGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnBlcm1pc3Npb25UeXBlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wicGVybWlzc2lvblR5cGVzXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInBhcmtDbG91ZElkXCJdID0gdGhpcy5wYXJrQ2xvdWRJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICBhY2NvdW50SWQ6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgcGFya0Nsb3VkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGhpcmRQYXJ0eVZlbmRvckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVGhpcmRQYXJ0eVZlbmRvckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRoaXJkUGFydHlWZW5kb3JEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIGltcGxlbWVudHMgSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICBpc0VuYWJsZWRGb3JVc2VyOiBib29sZWFuO1xuICAgIGlzUmVxdWllcmQyRkFTZXR1cDogYm9vbGVhbjtcbiAgICBhY3RpdmF0ZVJlc3BvbnNlRHRvOiBBY3RpdmF0ZVJlc3BvbnNlRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkRm9yVXNlciA9IF9kYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwID0gX2RhdGFbXCJpc1JlcXVpZXJkMkZBU2V0dXBcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8gPSBfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0gPyBBY3RpdmF0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXSA9IHRoaXMuaXNFbmFibGVkRm9yVXNlcjtcbiAgICAgICAgZGF0YVtcImlzUmVxdWllcmQyRkFTZXR1cFwiXSA9IHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwO1xuICAgICAgICBkYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSA9IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0byA/IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgIGlzRW5hYmxlZEZvclVzZXI6IGJvb2xlYW47XG4gICAgaXNSZXF1aWVyZDJGQVNldHVwOiBib29sZWFuO1xuICAgIGFjdGl2YXRlUmVzcG9uc2VEdG86IEFjdGl2YXRlUmVzcG9uc2VEdG87XG59XG5cbmV4cG9ydCBlbnVtIFVzZXJTdGF0dXMge1xuICAgIEFjdGl2ZSA9IDAsXG4gICAgQmxvY2tlZCA9IDEsXG4gICAgSW52aXRlZCA9IDIsXG4gICAgSWdub3JlID0gMyxcbiAgICBQYXNzd29yZEV4cGlyZWQgPSA0LFxuICAgIFJldm9rZWQgPSA1LFxuICAgIFRlbXBvcmFyeUJsb2NrZWQgPSA2LFxuICAgIEF3YWl0aW5nQWNjZXNzID0gNyxcbiAgICBVc2VyRXhwaXJlZCA9IDgsXG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcG1sOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51TmFtZSA9IF9kYXRhW1widU5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVOYW1lXCJdID0gdGhpcy51TmFtZTtcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1wicG1sXCJdID0gdGhpcy5wbWw7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogVXNlclN0YXR1cztcbiAgICBwbWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gX2RhdGFbXCJ1c2VyTmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ1c2VyTmFtZVwiXSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlc3BvbnNlIHtcbiAgICBkYXRhOiBCbG9iO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGZpbGVOYW1lPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgcmVzcG9uc2U6IHN0cmluZztcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICByZXN1bHQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ6IGFueSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0FwaUV4Y2VwdGlvbiA9IHRydWU7XG5cbiAgICBzdGF0aWMgaXNBcGlFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgQXBpRXhjZXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIG9iai5pc0FwaUV4Y2VwdGlvbiA9PT0gdHJ1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3VsdCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhuZXcgQXBpRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcbn1cblxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghYmxvYikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgoZXZlbnQudGFyZ2V0IGFzIGFueSkucmVzdWx0KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59Il19
4145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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QUFFLFFBQWdCLEVBQUUsT0FBZ0MsRUFBRSxNQUFZO0lBQ3JILElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUztRQUN2QyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDOztRQUVoQyxPQUFPLGdCQUFnQixDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFTO0lBQ3pCLE9BQU8sSUFBSSxVQUFVLENBQVMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XG4vLyAgICAgR2VuZXJhdGVkIHVzaW5nIHRoZSBOU3dhZyB0b29sY2hhaW4gdjE0LjQuMC4wIChOSnNvblNjaGVtYSB2MTEuMy4yLjAgKE5ld3RvbnNvZnQuSnNvbiB2MTMuMC4wLjApKSAoaHR0cDovL05Td2FnLm9yZylcbi8vIDwvYXV0by1nZW5lcmF0ZWQ+XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBSZVNoYXJwZXIgZGlzYWJsZSBJbmNvbnNpc3RlbnROYW1pbmdcblxuaW1wb3J0IHsgbWVyZ2VNYXAgYXMgX29ic2VydmFibGVNZXJnZU1hcCwgY2F0Y2hFcnJvciBhcyBfb2JzZXJ2YWJsZUNhdGNoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciBhcyBfb2JzZXJ2YWJsZVRocm93LCBvZiBhcyBfb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFJlc3BvbnNlQmFzZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgY29uc3QgQVBJX0JBU0VfVVJMID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0FQSV9CQVNFX1VSTCcpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXNzZXRJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRMb2dvKGlkZW50aWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2Fzc2V0L2xvZ28/XCI7XG4gICAgICAgIGlmIChpZGVudGlmaWVyID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnaWRlbnRpZmllcicgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiSWRlbnRpZmllcj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgaWRlbnRpZmllcikgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TG9nbyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0TG9nbyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0TG9nbyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgYmFja29mZmljZUF1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL2JhY2tvZmZpY2V1c2VyL2F1dGhlbnRpY2F0ZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQmFja29mZmljZUF1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQmFja29mZmljZUF1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NCYWNrb2ZmaWNlQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDIpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMjogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAyID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDIgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDIpO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldE9ubGluZVZhbGlkYXRvclZlcnNpb24oKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9jb25maWd1cmF0aW9uL29ubGluZS12YWxpZGF0b3ItdmVyc2lvblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9iamVjdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldFNldHRpbmdzQnlDYXRlZ29yeShjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvY29uZmlndXJhdGlvbi9zZXR0aW5ncy97Y2F0ZWdvcnl9XCI7XG4gICAgICAgIGlmIChjYXRlZ29yeSA9PT0gdW5kZWZpbmVkIHx8IGNhdGVnb3J5ID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnY2F0ZWdvcnknIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7Y2F0ZWdvcnl9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgY2F0ZWdvcnkpKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0U2V0dGluZ3NCeUNhdGVnb3J5KHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBPYmplY3RIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPE9iamVjdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRBcHBDb25maWd1cmF0aW9uKCk6IE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb25cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0QXBwQ29uZmlndXJhdGlvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5SWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBhcHBNb2R1bGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBmYWNpbGl0eUFsbChhcHBNb2R1bGU6IEFwcE1vZHVsZSB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2ZhY2lsaXR5L2Jhc2ljP1wiO1xuICAgICAgICBpZiAoYXBwTW9kdWxlID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnYXBwTW9kdWxlJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGFwcE1vZHVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImFwcE1vZHVsZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgYXBwTW9kdWxlKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGYWNpbGl0eUFsbChyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmFjaWxpdHlBbGwocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0ZhY2lsaXR5QWxsKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFwcE1vZHVsZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEZhY2lsaXR5VHJlZShhcHBNb2R1bGU6IEFwcE1vZHVsZSB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9mYWNpbGl0eS90cmVlP1wiO1xuICAgICAgICBpZiAoYXBwTW9kdWxlID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnYXBwTW9kdWxlJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGFwcE1vZHVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImFwcE1vZHVsZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgYXBwTW9kdWxlKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRGYWNpbGl0eVRyZWUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEZhY2lsaXR5VHJlZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRGYWNpbGl0eVRyZWUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGtleU5hbWUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRSZXNvdXJjZShrZXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvbG9jYWxpemF0aW9uL2dldC1yZXNvdXJjZT9cIjtcbiAgICAgICAgaWYgKGtleU5hbWUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdrZXlOYW1lJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGtleU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJrZXlOYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBrZXlOYW1lKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0UmVzb3VyY2UocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0UmVzb3VyY2UocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCB8fCBzdGF0dXMgPT09IDIwNikge1xuICAgICAgICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzcG9uc2UuaGVhZGVycyA/IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC1kaXNwb3NpdGlvblwiKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZU1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uID8gL2ZpbGVuYW1lXFwqPSg/OihcXFxcP1snXCJdKSguKj8pXFwxfCg/OlteXFxzXSsnLio/Jyk/KFteO1xcbl0qKSkvZy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBmaWxlTmFtZU1hdGNoICYmIGZpbGVOYW1lTWF0Y2gubGVuZ3RoID4gMSA/IGZpbGVOYW1lTWF0Y2hbM10gfHwgZmlsZU5hbWVNYXRjaFsyXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVNYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbiA/IC9maWxlbmFtZT1cIj8oW15cIl0qPylcIj8oO3wkKS9nLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lTWF0Y2ggJiYgZmlsZU5hbWVNYXRjaC5sZW5ndGggPiAxID8gZmlsZU5hbWVNYXRjaFsxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHsgZmlsZU5hbWU6IGZpbGVOYW1lLCBkYXRhOiByZXNwb25zZUJsb2IgYXMgYW55LCBzdGF0dXM6IHN0YXR1cywgaGVhZGVyczogX2hlYWRlcnMgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEZpbGVSZXNwb25zZT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNtYXJ0cGFya0lkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJzaW9ucygpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvc21hcnRwYXJrL3ZlcnNpb25zXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcnNpb25zKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJzaW9ucyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWZXJzaW9ucyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRlbmFudElkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbmFtZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldFRlbmFudERldGFpbHMobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdGVuYW50L2RldGFpbHM/XCI7XG4gICAgICAgIGlmIChuYW1lID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAnbmFtZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChuYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwibmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgbmFtZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0VGVuYW50RGV0YWlscyhyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbWUoKTogT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdGhpcmRwYXJ0eS9tZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc01lKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBhdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvcmVmcmVzaC10b2tlblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiUmVmcmVzaFRva2VuXCI6IHJlZnJlc2hUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHJlZnJlc2hUb2tlbiAhPT0gbnVsbCA/IFwiXCIgKyByZWZyZXNoVG9rZW4gOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYWN0aXZhdGlvblRva2VuIChvcHRpb25hbCkgXG4gICAgICogQHBhcmFtIHBhc3N3b3JkQ2hhbmdlVHlwZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZhbGlkYXRlQWN0aXZhdGlvbihhY3RpdmF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgcGFzc3dvcmRDaGFuZ2VUeXBlOiBQYXNzd29yZENoYW5nZVR5cGUgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92YWxpZGF0ZS1hY3RpdmF0aW9uP1wiO1xuICAgICAgICBpZiAocGFzc3dvcmRDaGFuZ2VUeXBlID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAncGFzc3dvcmRDaGFuZ2VUeXBlJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKHBhc3N3b3JkQ2hhbmdlVHlwZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcInBhc3N3b3JkQ2hhbmdlVHlwZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgcGFzc3dvcmRDaGFuZ2VUeXBlKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWN0aXZhdGlvblRva2VuXCI6IGFjdGl2YXRpb25Ub2tlbiAhPT0gdW5kZWZpbmVkICYmIGFjdGl2YXRpb25Ub2tlbiAhPT0gbnVsbCA/IFwiXCIgKyBhY3RpdmF0aW9uVG9rZW4gOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgYXV0aGVudGljYXRlTW9iaWxlKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL2F1dGhlbnRpY2F0ZS1tb2JpbGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZU1vYmlsZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQXV0aGVudGljYXRlTW9iaWxlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzQXV0aGVudGljYXRlTW9iaWxlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4oYm9keTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3ZlcmlmeS0yZmEtYXV0aC1sb2dpblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24oYm9keTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3ZlcmlmeS0yZmEtYXV0aFwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3t1c2VySWR9L2VuYWJsZS0yZmFcIjtcbiAgICAgICAgaWYgKHVzZXJJZCA9PT0gdW5kZWZpbmVkIHx8IHVzZXJJZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3VzZXJJZCcgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt1c2VySWR9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdXNlcklkKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicHV0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGRpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIodXNlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMve3VzZXJJZH0vZGlzYWJsZS0yZmFcIjtcbiAgICAgICAgaWYgKHVzZXJJZCA9PT0gdW5kZWZpbmVkIHx8IHVzZXJJZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3VzZXJJZCcgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcInt1c2VySWR9XCIsIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsgdXNlcklkKSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicHV0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgb3BlbklkQXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvb2lkYy1hdXRoXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAyOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDIgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMiA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMik7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0T25saW5lVmFsaWRhdG9yQ29udGV4dCgpOiBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi92YWxpZGF0aW9uL29ubGluZS12YWxpZGF0b3ItY29udGV4dFwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JDb250ZXh0KHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JDb250ZXh0KHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JDb250ZXh0KHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVSZXNwb25zZUR0byBpbXBsZW1lbnRzIElBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBY3RpdmF0ZVJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLnRmYVNldHVwID0gX2RhdGFbXCJ0ZmFTZXR1cFwiXSA/IFRmYVNldHVwRHRvLmZyb21KUyhfZGF0YVtcInRmYVNldHVwXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBY3RpdmF0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1widGZhU2V0dXBcIl0gPSB0aGlzLnRmYVNldHVwID8gdGhpcy50ZmFTZXR1cC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBY3RpdmF0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQWN0aXZhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBDb25maWd1cmF0aW9uRHRvIGltcGxlbWVudHMgSUFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgIG5ld0VkZ2VGbGFnOiBib29sZWFuO1xuICAgIGxhdGVzdEVkZ2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYW5hbHl0aWNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmZWVkYmFja1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcG1sOiBudW1iZXI7XG4gICAgbWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtaW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXBwQ29uZmlndXJhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmV3RWRnZUZsYWcgPSBfZGF0YVtcIm5ld0VkZ2VGbGFnXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RFZGdlVmVyc2lvbiA9IF9kYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl07XG4gICAgICAgICAgICB0aGlzLmFuYWx5dGljc1Rva2VuID0gX2RhdGFbXCJhbmFseXRpY3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tUb2tlbiA9IF9kYXRhW1wiZmVlZGJhY2tUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucG1sID0gX2RhdGFbXCJwbWxcIl07XG4gICAgICAgICAgICB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uID0gX2RhdGFbXCJtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMubWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uID0gX2RhdGFbXCJtaW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5ld0VkZ2VGbGFnXCJdID0gdGhpcy5uZXdFZGdlRmxhZztcbiAgICAgICAgZGF0YVtcImxhdGVzdEVkZ2VWZXJzaW9uXCJdID0gdGhpcy5sYXRlc3RFZGdlVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcImFuYWx5dGljc1Rva2VuXCJdID0gdGhpcy5hbmFseXRpY3NUb2tlbjtcbiAgICAgICAgZGF0YVtcImZlZWRiYWNrVG9rZW5cIl0gPSB0aGlzLmZlZWRiYWNrVG9rZW47XG4gICAgICAgIGRhdGFbXCJwbWxcIl0gPSB0aGlzLnBtbDtcbiAgICAgICAgZGF0YVtcIm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdID0gdGhpcy5taW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcIm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXSA9IHRoaXMubWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBcHBDb25maWd1cmF0aW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgIG5ld0VkZ2VGbGFnOiBib29sZWFuO1xuICAgIGxhdGVzdEVkZ2VWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYW5hbHl0aWNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmZWVkYmFja1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcG1sOiBudW1iZXI7XG4gICAgbWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtaW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXBwQ29uZmlndXJhdGlvbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXBwQ29uZmlndXJhdGlvbkR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEFwcENvbmZpZ3VyYXRpb25EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gQXBwTW9kdWxlIHtcbiAgICBDYyA9IDAsXG4gICAgTWFuYWdlbWVudCA9IDEsXG4gICAgU2V0dGluZ3MgPSAyLFxuICAgIFZhbGlkYXRpb24gPSAzLFxuICAgIEd1ZXN0cyA9IDQsXG4gICAgUmVwb3J0cyA9IDUsXG4gICAgTW9udGhsaWVzID0gNixcbiAgICBCYWNrb2ZmaWNlID0gNyxcbiAgICBQaSA9IDgsXG4gICAgQWNjb3VudHMgPSA5LFxuICAgIExvdENvbmZpZ3VyYXRpb24gPSAxMCxcbiAgICBFQ29tbWVyY2VCYWNrb2ZmaWNlID0gMTEsXG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY29kZVwiXSA9IHRoaXMuY29kZTtcbiAgICAgICAgZGF0YVtcInRlbmFudE5hbWVcIl0gPSB0aGlzLnRlbmFudE5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW1wb3JhcnlCbG9ja2VkVGltZTogbnVtYmVyO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnRlbXBvcmFyeUJsb2NrZWRUaW1lID0gX2RhdGFbXCJ0ZW1wb3JhcnlCbG9ja2VkVGltZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50ID0gX2RhdGFbXCJ0ZW5hbnRcIl0gPyBUZW5hbnREdG8uZnJvbUpTKF9kYXRhW1widGVuYW50XCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJ0ZW1wb3JhcnlCbG9ja2VkVGltZVwiXSA9IHRoaXMudGVtcG9yYXJ5QmxvY2tlZFRpbWU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRcIl0gPSB0aGlzLnRlbmFudCA/IHRoaXMudGVuYW50LnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW1wb3JhcnlCbG9ja2VkVGltZTogbnVtYmVyO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVxdWVzdER0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgdGVuYW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gX2RhdGFbXCJ1c2VybmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmQgPSBfZGF0YVtcInBhc3N3b3JkXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnRJZCA9IF9kYXRhW1widGVuYW50SWRcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJuYW1lXCJdID0gdGhpcy51c2VybmFtZTtcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkXCJdID0gdGhpcy5wYXNzd29yZDtcbiAgICAgICAgZGF0YVtcInRlbmFudElkXCJdID0gdGhpcy50ZW5hbnRJZDtcbiAgICAgICAgZGF0YVtcInRlbmFudE5hbWVcIl0gPSB0aGlzLnRlbmFudE5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHRlbmFudElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgIHVzZXJJZDogbnVtYmVyO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtb2R1bGVzOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdE1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHRoaXJkUGFydHlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzZXR0aW5nczogU3BhcmtTZXR0aW5nc0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VySXNUZW1wb3JhcnlCbG9ja2VkOiBib29sZWFuO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvblN0YXRlOiBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICBkYXlzVG9FeHBpcmU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbjogYm9vbGVhbjtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bzogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG87XG4gICAgc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG86IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gX2RhdGFbXCJ1c2VySWRcIl07XG4gICAgICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IF9kYXRhW1wiZmlyc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TmFtZSA9IF9kYXRhW1wibGFzdE5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gX2RhdGFbXCJ1c2VybmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlclN0YXR1cyA9IF9kYXRhW1widXNlclN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uID0gX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0gPyBtb21lbnQoX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wibW9kdWxlc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcIm1vZHVsZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcy5wdXNoKEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZHVsZSA9IF9kYXRhW1wiZGVmYXVsdE1vZHVsZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGhpcmRQYXJ0eVRva2VuID0gX2RhdGFbXCJ0aGlyZFBhcnR5VG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gX2RhdGFbXCJhY2Nlc3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gX2RhdGFbXCJyZWZyZXNoVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJbnRlcnZhbCA9IF9kYXRhW1wicmVmcmVzaEludGVydmFsXCJdO1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gX2RhdGFbXCJleHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wiZXhwaXJhdGlvblwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJzZXR0aW5nc1wiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJzZXR0aW5nc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5wdXNoKFNwYXJrU2V0dGluZ3NEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGVuYW50ID0gX2RhdGFbXCJ0ZW5hbnRcIl0gPyBUZW5hbnREdG8uZnJvbUpTKF9kYXRhW1widGVuYW50XCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IF9kYXRhW1wibWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlcklzVGVtcG9yYXJ5QmxvY2tlZCA9IF9kYXRhW1widXNlcklzVGVtcG9yYXJ5QmxvY2tlZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uU3RhdGUgPSBfZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblN0YXRlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXlzVG9FeHBpcmUgPSBfZGF0YVtcImRheXNUb0V4cGlyZVwiXTtcbiAgICAgICAgICAgIHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSBfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uXCJdO1xuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byA9IF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0gPyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0by5mcm9tSlMoX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0b1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gPSBfZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdID8gU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8uZnJvbUpTKF9kYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlcklkXCJdID0gdGhpcy51c2VySWQ7XG4gICAgICAgIGRhdGFbXCJmaXJzdE5hbWVcIl0gPSB0aGlzLmZpcnN0TmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVzZXJuYW1lXCJdID0gdGhpcy51c2VybmFtZTtcbiAgICAgICAgZGF0YVtcInVzZXJTdGF0dXNcIl0gPSB0aGlzLnVzZXJTdGF0dXM7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25cIl0gPSB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbiA/IHRoaXMucGFzc3dvcmRFeHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2R1bGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcIm1vZHVsZXNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5tb2R1bGVzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJtb2R1bGVzXCJdLnB1c2goaXRlbSA/IGl0ZW0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcImRlZmF1bHRNb2R1bGVcIl0gPSB0aGlzLmRlZmF1bHRNb2R1bGU7XG4gICAgICAgIGRhdGFbXCJ0aGlyZFBhcnR5VG9rZW5cIl0gPSB0aGlzLnRoaXJkUGFydHlUb2tlbjtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaEludGVydmFsXCJdID0gdGhpcy5yZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgIGRhdGFbXCJleHBpcmF0aW9uXCJdID0gdGhpcy5leHBpcmF0aW9uID8gdGhpcy5leHBpcmF0aW9uLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5ncykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzZXR0aW5nc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnNldHRpbmdzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJzZXR0aW5nc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRcIl0gPSB0aGlzLnRlbmFudCA/IHRoaXMudGVuYW50LnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcIm1lc3NhZ2VcIl0gPSB0aGlzLm1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJ1c2VySXNUZW1wb3JhcnlCbG9ja2VkXCJdID0gdGhpcy51c2VySXNUZW1wb3JhcnlCbG9ja2VkO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uU3RhdGVcIl0gPSB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvblN0YXRlO1xuICAgICAgICBkYXRhW1wiZGF5c1RvRXhwaXJlXCJdID0gdGhpcy5kYXlzVG9FeHBpcmU7XG4gICAgICAgIGRhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvblwiXSA9IHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb247XG4gICAgICAgIGRhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0b1wiXSA9IHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gPyB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSA9IHRoaXMuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gPyB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgdXNlcklkOiBudW1iZXI7XG4gICAgZmlyc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1vZHVsZXM6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0TW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgdGhpcmRQYXJ0eVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoSW50ZXJ2YWw6IG51bWJlcjtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNldHRpbmdzOiBTcGFya1NldHRpbmdzRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50OiBUZW5hbnREdG87XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJJc1RlbXBvcmFyeUJsb2NrZWQ6IGJvb2xlYW47XG4gICAgcGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU6IFBhc3N3b3JkRXhwaXJhdGlvblN0YXRlO1xuICAgIGRheXNUb0V4cGlyZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uOiBib29sZWFuO1xuICAgIHR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bztcbiAgICBzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bzogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG87XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBdXRoZW50aWNhdGVSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJkYXRhXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZGF0YVwiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5kYXRhKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdLnB1c2goaXRlbSA/IGl0ZW0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byBpbXBsZW1lbnRzIElBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZVtdIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGUgPSBfZGF0YVtcIm1vZHVsZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wic3ViTW9kdWxlXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViTW9kdWxlID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJzdWJNb2R1bGVcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ViTW9kdWxlLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm1vZHVsZVwiXSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnN1Yk1vZHVsZSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5zdWJNb2R1bGUpXG4gICAgICAgICAgICAgICAgZGF0YVtcInN1Yk1vZHVsZVwiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSA9IF9kYXRhW1wiY29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50TmFtZSA9IF9kYXRhW1widGVuYW50TmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY29kZVwiXSA9IHRoaXMuY29kZTtcbiAgICAgICAgZGF0YVtcInRlbmFudE5hbWVcIl0gPSB0aGlzLnRlbmFudE5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5QmFzaWNEdG8gaW1wbGVtZW50cyBJRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgY2xvdWRQYXJlbnRJZDogbnVtYmVyO1xuICAgIGlzQmFzaWM6IGJvb2xlYW47XG4gICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bWJlcjtcbiAgICBzaXRlQ29kZTogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwYXJlbnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBpc011bHRpUGFyazogbnVtYmVyO1xuICAgIHRpbWVEcmlmdDogbnVtYmVyO1xuICAgIHNlcnZlckRhdGVUaW1lOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwVGltZVpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0b3RhbFNwYWNlOiBudW1iZXI7XG4gICAgaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0NyZWRpdFNlcnZlckNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0NyZWRpdFNlcnZlckVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNMUFJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNMUFJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzVGlja2V0TGVzc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgbHByRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBhY3RpdmU6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uczogeyBba2V5OiBzdHJpbmddOiBQZXJtaXNzaW9uRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIGZlYXR1cmVQZXJtaXNzaW9uczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBleHRlcm5hbElkZW50aWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJRmFjaWxpdHlCYXNpY0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy5jbG91ZElkID0gX2RhdGFbXCJjbG91ZElkXCJdO1xuICAgICAgICAgICAgdGhpcy5jbG91ZFBhcmVudElkID0gX2RhdGFbXCJjbG91ZFBhcmVudElkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0Jhc2ljID0gX2RhdGFbXCJpc0Jhc2ljXCJdO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVBhcmtQYXJlbnRJRCA9IF9kYXRhW1wibXVsdGlQYXJrUGFyZW50SURcIl07XG4gICAgICAgICAgICB0aGlzLnNpdGVDb2RlID0gX2RhdGFbXCJzaXRlQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gX2RhdGFbXCJwYXJlbnRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlQYXJrID0gX2RhdGFbXCJpc011bHRpUGFya1wiXTtcbiAgICAgICAgICAgIHRoaXMudGltZURyaWZ0ID0gX2RhdGFbXCJ0aW1lRHJpZnRcIl07XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGVUaW1lID0gX2RhdGFbXCJzZXJ2ZXJEYXRlVGltZVwiXSA/IG1vbWVudChfZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNwVGltZVpvbmUgPSBfZGF0YVtcInNwVGltZVpvbmVcIl07XG4gICAgICAgICAgICB0aGlzLnRvdGFsU3BhY2UgPSBfZGF0YVtcInRvdGFsU3BhY2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBfZGF0YVtcImlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gX2RhdGFbXCJpc0NyZWRpdFNlcnZlckNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gX2RhdGFbXCJpc0NyZWRpdFNlcnZlckVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTFBSQ29ubmVjdGVkID0gX2RhdGFbXCJpc0xQUkNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNMUFJFbmFibGVkID0gX2RhdGFbXCJpc0xQUkVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzVGlja2V0TGVzc0VuYWJsZWQgPSBfZGF0YVtcImlzVGlja2V0TGVzc0VuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wibHByRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wibHByRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wiY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID8gbW9tZW50KF9kYXRhW1wiY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcIm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IF9kYXRhW1wiYWN0aXZlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicGVybWlzc2lvbnNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInBlcm1pc3Npb25zXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInBlcm1pc3Npb25zXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnBlcm1pc3Npb25zKVtrZXldID0gX2RhdGFbXCJwZXJtaXNzaW9uc1wiXVtrZXldID8gUGVybWlzc2lvbkR0by5mcm9tSlMoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXVtrZXldKSA6IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxJZGVudGlmaWVyID0gX2RhdGFbXCJleHRlcm5hbElkZW50aWZpZXJcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEZhY2lsaXR5QmFzaWNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImNsb3VkSWRcIl0gPSB0aGlzLmNsb3VkSWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZFBhcmVudElkXCJdID0gdGhpcy5jbG91ZFBhcmVudElkO1xuICAgICAgICBkYXRhW1wiaXNCYXNpY1wiXSA9IHRoaXMuaXNCYXNpYztcbiAgICAgICAgZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdID0gdGhpcy5tdWx0aVBhcmtQYXJlbnRJRDtcbiAgICAgICAgZGF0YVtcInNpdGVDb2RlXCJdID0gdGhpcy5zaXRlQ29kZTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXJlbnRcIl0gPSB0aGlzLnBhcmVudDtcbiAgICAgICAgZGF0YVtcImlzTXVsdGlQYXJrXCJdID0gdGhpcy5pc011bHRpUGFyaztcbiAgICAgICAgZGF0YVtcInRpbWVEcmlmdFwiXSA9IHRoaXMudGltZURyaWZ0O1xuICAgICAgICBkYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPSB0aGlzLnNlcnZlckRhdGVUaW1lID8gdGhpcy5zZXJ2ZXJEYXRlVGltZS50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcFRpbWVab25lXCJdID0gdGhpcy5zcFRpbWVab25lO1xuICAgICAgICBkYXRhW1widG90YWxTcGFjZVwiXSA9IHRoaXMudG90YWxTcGFjZTtcbiAgICAgICAgZGF0YVtcImlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0NyZWRpdFNlcnZlckNvbm5lY3RlZFwiXSA9IHRoaXMuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0NyZWRpdFNlcnZlckVuYWJsZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzTFBSQ29ubmVjdGVkXCJdID0gdGhpcy5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzTFBSRW5hYmxlZFwiXSA9IHRoaXMuaXNMUFJFbmFibGVkO1xuICAgICAgICBkYXRhW1wiaXNUaWNrZXRMZXNzRW5hYmxlZFwiXSA9IHRoaXMuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wiY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImFjdGl2ZVwiXSA9IHRoaXMuYWN0aXZlO1xuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25zXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJwZXJtaXNzaW9uc1wiXSlba2V5XSA9IHRoaXMucGVybWlzc2lvbnNba2V5XSA/IHRoaXMucGVybWlzc2lvbnNba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zKSkge1xuICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucylcbiAgICAgICAgICAgICAgICBkYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcImV4dGVybmFsSWRlbnRpZmllclwiXSA9IHRoaXMuZXh0ZXJuYWxJZGVudGlmaWVyO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlCYXNpY0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZhY2lsaXR5QmFzaWNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgY2xvdWRJZDogbnVtYmVyO1xuICAgIGNsb3VkUGFyZW50SWQ6IG51bWJlcjtcbiAgICBpc0Jhc2ljOiBib29sZWFuO1xuICAgIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gICAgc2l0ZUNvZGU6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaXNNdWx0aVBhcms6IG51bWJlcjtcbiAgICB0aW1lRHJpZnQ6IG51bWJlcjtcbiAgICBzZXJ2ZXJEYXRlVGltZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcFRpbWVab25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdG90YWxTcGFjZTogbnVtYmVyO1xuICAgIGlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzTFBSQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzTFBSRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc1RpY2tldExlc3NFbmFibGVkOiBib29sZWFuO1xuICAgIGxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM6IHsgW2tleTogc3RyaW5nXTogUGVybWlzc2lvbkR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBmZWF0dXJlUGVybWlzc2lvbnM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZXh0ZXJuYWxJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzIHtcbiAgICBNYW51YWxseVJ1blogPSAxLFxuICAgIFVwZGF0ZVNldHRpbmdzID0gMixcbiAgICBTZXRBY3RpdmVSYXRlID0gMyxcbiAgICBVcGRhdGVNQ0RhdGVUaW1lID0gNCxcbiAgICBSdW5NYWNybyA9IDUsXG4gICAgVHJhbnNtaXRTcGVjaWFsRGF5cyA9IDYsXG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVRyZWVEdG8gaW1wbGVtZW50cyBJRmFjaWxpdHlUcmVlRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXI7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFBhcmtCcmFuY2hUeXBlO1xuICAgIGxvY2FsSWQ6IG51bWJlcjtcbiAgICBjaGlsZHJlbjogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElGYWNpbGl0eVRyZWVEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gX2RhdGFbXCJwYXJlbnRcIl07XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmxvY2FsSWQgPSBfZGF0YVtcImxvY2FsSWRcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImNoaWxkcmVuXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImNoaWxkcmVuXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IF9kYXRhW1wiYWN0aXZlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eVRyZWVEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wiY2xvdWRJZFwiXSA9IHRoaXMuY2xvdWRJZDtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXJlbnRcIl0gPSB0aGlzLnBhcmVudDtcbiAgICAgICAgZGF0YVtcImd1aWRcIl0gPSB0aGlzLmd1aWQ7XG4gICAgICAgIGRhdGFbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBkYXRhW1wibG9jYWxJZFwiXSA9IHRoaXMubG9jYWxJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlUcmVlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmFjaWxpdHlUcmVlRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXI7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFBhcmtCcmFuY2hUeXBlO1xuICAgIGxvY2FsSWQ6IG51bWJlcjtcbiAgICBjaGlsZHJlbjogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEZhY2lsaXR5VHJlZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJkYXRhXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZGF0YVwiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmRhdGEpXG4gICAgICAgICAgICAgICAgZGF0YVtcImRhdGFcIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBGYWNpbGl0eVRyZWVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gICAgQ29udGludWUgPSAxMDAsXG4gICAgU3dpdGNoaW5nUHJvdG9jb2xzID0gMTAxLFxuICAgIFByb2Nlc3NpbmcgPSAxMDIsXG4gICAgRWFybHlIaW50cyA9IDEwMyxcbiAgICBPSyA9IDIwMCxcbiAgICBDcmVhdGVkID0gMjAxLFxuICAgIEFjY2VwdGVkID0gMjAyLFxuICAgIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiA9IDIwMyxcbiAgICBOb0NvbnRlbnQgPSAyMDQsXG4gICAgUmVzZXRDb250ZW50ID0gMjA1LFxuICAgIFBhcnRpYWxDb250ZW50ID0gMjA2LFxuICAgIE11bHRpU3RhdHVzID0gMjA3LFxuICAgIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgICBJTVVzZWQgPSAyMjYsXG4gICAgTXVsdGlwbGVDaG9pY2VzID0gMzAwLFxuICAgIEFtYmlndW91cyA9IDMwMSxcbiAgICBNb3ZlZFBlcm1hbmVudGx5ID0gMzAyLFxuICAgIE1vdmVkID0gMzAzLFxuICAgIEZvdW5kID0gMzA0LFxuICAgIFJlZGlyZWN0ID0gMzA1LFxuICAgIFNlZU90aGVyID0gMzA2LFxuICAgIFJlZGlyZWN0TWV0aG9kID0gMzA3LFxuICAgIE5vdE1vZGlmaWVkID0gMzA4LFxuICAgIFVzZVByb3h5ID0gNDAwLFxuICAgIFVudXNlZCA9IDQwMSxcbiAgICBUZW1wb3JhcnlSZWRpcmVjdCA9IDQwMixcbiAgICBSZWRpcmVjdEtlZXBWZXJiID0gNDAzLFxuICAgIFBlcm1hbmVudFJlZGlyZWN0ID0gNDA0LFxuICAgIEJhZFJlcXVlc3QgPSA0MDUsXG4gICAgVW5hdXRob3JpemVkID0gNDA2LFxuICAgIFBheW1lbnRSZXF1aXJlZCA9IDQwNyxcbiAgICBGb3JiaWRkZW4gPSA0MDgsXG4gICAgTm90Rm91bmQgPSA0MDksXG4gICAgTWV0aG9kTm90QWxsb3dlZCA9IDQxMCxcbiAgICBOb3RBY2NlcHRhYmxlID0gNDExLFxuICAgIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDQxMixcbiAgICBSZXF1ZXN0VGltZW91dCA9IDQxMyxcbiAgICBDb25mbGljdCA9IDQxNCxcbiAgICBHb25lID0gNDE1LFxuICAgIExlbmd0aFJlcXVpcmVkID0gNDE2LFxuICAgIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxNyxcbiAgICBSZXF1ZXN0RW50aXR5VG9vTGFyZ2UgPSA0MjEsXG4gICAgUmVxdWVzdFVyaVRvb0xvbmcgPSA0MjIsXG4gICAgVW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSA0MjMsXG4gICAgUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQyNCxcbiAgICBFeHBlY3RhdGlvbkZhaWxlZCA9IDQyNixcbiAgICBNaXNkaXJlY3RlZFJlcXVlc3QgPSA0MjgsXG4gICAgVW5wcm9jZXNzYWJsZUVudGl0eSA9IDQyOSxcbiAgICBVbnByb2Nlc3NhYmxlQ29udGVudCA9IDQzMSxcbiAgICBMb2NrZWQgPSA0NTEsXG4gICAgRmFpbGVkRGVwZW5kZW5jeSA9IDUwMCxcbiAgICBVcGdyYWRlUmVxdWlyZWQgPSA1MDEsXG4gICAgUHJlY29uZGl0aW9uUmVxdWlyZWQgPSA1MDIsXG4gICAgVG9vTWFueVJlcXVlc3RzID0gNTAzLFxuICAgIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDUwNCxcbiAgICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyA9IDUwNSxcbiAgICBJbnRlcm5hbFNlcnZlckVycm9yID0gNTA2LFxuICAgIE5vdEltcGxlbWVudGVkID0gNTA3LFxuICAgIEJhZEdhdGV3YXkgPSA1MDgsXG4gICAgU2VydmljZVVuYXZhaWxhYmxlID0gNTEwLFxuICAgIEdhdGV3YXlUaW1lb3V0ID0gNTExLFxufVxuXG5leHBvcnQgY2xhc3MgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5kYXRhKVtrZXldID0gX2RhdGFbXCJkYXRhXCJdW2tleV0gPyBBdXRoZW50aWNhdGVSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdW2tleV0pIDogbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcImRhdGFcIl0pW2tleV0gPSB0aGlzLmRhdGFba2V5XSA/IHRoaXMuZGF0YVtrZXldLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0R0byBpbXBsZW1lbnRzIElMb2dvRHRvIHtcbiAgICBpbWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElMb2dvRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IF9kYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IExvZ29EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImltYWdlXCJdID0gdGhpcy5pbWFnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTG9nb0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dvRHRvIHtcbiAgICBpbWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBMb2dvRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBMb2dvRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ29EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogTG9nb0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9iamVjdEh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGE7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IGFueSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgT25saW5lVmFsaWRhdG9yQ29udGV4dER0byBpbXBsZW1lbnRzIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFya0lkOiBudW1iZXI7XG4gICAgcGFya05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb21wYW55SWQ6IG51bWJlcjtcbiAgICBzdWJDb21wYW55SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB2YWxpZGF0aW9uVHlwZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmtJZCA9IF9kYXRhW1wicGFya0lkXCJdO1xuICAgICAgICAgICAgdGhpcy5wYXJrTmFtZSA9IF9kYXRhW1wicGFya05hbWVcIl07XG4gICAgICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IF9kYXRhW1wiY29tcGFueUlkXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWJDb21wYW55SWQgPSBfZGF0YVtcInN1YkNvbXBhbnlJZFwiXTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblR5cGVJZCA9IF9kYXRhW1widmFsaWRhdGlvblR5cGVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInBhcmtJZFwiXSA9IHRoaXMucGFya0lkO1xuICAgICAgICBkYXRhW1wicGFya05hbWVcIl0gPSB0aGlzLnBhcmtOYW1lO1xuICAgICAgICBkYXRhW1wiY29tcGFueUlkXCJdID0gdGhpcy5jb21wYW55SWQ7XG4gICAgICAgIGRhdGFbXCJzdWJDb21wYW55SWRcIl0gPSB0aGlzLnN1YkNvbXBhbnlJZDtcbiAgICAgICAgZGF0YVtcInZhbGlkYXRpb25UeXBlSWRcIl0gPSB0aGlzLnZhbGlkYXRpb25UeXBlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmtJZDogbnVtYmVyO1xuICAgIHBhcmtOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29tcGFueUlkOiBudW1iZXI7XG4gICAgc3ViQ29tcGFueUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdmFsaWRhdGlvblR5cGVJZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBQYXJrQnJhbmNoVHlwZSB7XG4gICAgUGFyayA9IDAsXG4gICAgR3JvdXAgPSAxLFxufVxuXG5leHBvcnQgZW51bSBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIFJlZ2lzdHJhdGlvbiA9IDAsXG4gICAgRm9yZ290ID0gMSxcbiAgICBFeHBpcmF0aW9uID0gMixcbn1cblxuZXhwb3J0IGVudW0gUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGUge1xuICAgIE5vdEV4cGlyZWQgPSAxLFxuICAgIEFib3V0VG9FeHBpcmUgPSAyLFxuICAgIEV4cGlyZWQgPSAzLFxufVxuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkR0byBpbXBsZW1lbnRzIElQZXJtaXNzaW9uRHRvIHtcbiAgICB0eXBlOiBQZXJtaXNzaW9uVHlwZTtcbiAgICBncm91cDogUGVybWlzc2lvbkdyb3VwO1xuICAgIHNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlO1xuICAgIG1haW46IGJvb2xlYW47XG4gICAgZGlzcGxheTogYm9vbGVhbjtcbiAgICBjb21tYW5kOiBSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgZmFjaWxpdHlDb21tYW5kOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBhY3Rpb246IFJlbW90ZUFjdGlvblR5cGVzO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElQZXJtaXNzaW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy5ncm91cCA9IF9kYXRhW1wiZ3JvdXBcIl07XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBfZGF0YVtcInNlcnZpY2VcIl07XG4gICAgICAgICAgICB0aGlzLm1vZHVsZSA9IF9kYXRhW1wibW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWJNb2R1bGUgPSBfZGF0YVtcInN1Yk1vZHVsZVwiXTtcbiAgICAgICAgICAgIHRoaXMubWFpbiA9IF9kYXRhW1wibWFpblwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheSA9IF9kYXRhW1wiZGlzcGxheVwiXTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZCA9IF9kYXRhW1wiY29tbWFuZFwiXTtcbiAgICAgICAgICAgIHRoaXMuZmFjaWxpdHlDb21tYW5kID0gX2RhdGFbXCJmYWNpbGl0eUNvbW1hbmRcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IF9kYXRhW1wiYWN0aW9uXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBQZXJtaXNzaW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBkYXRhW1wiZ3JvdXBcIl0gPSB0aGlzLmdyb3VwO1xuICAgICAgICBkYXRhW1wic2VydmljZVwiXSA9IHRoaXMuc2VydmljZTtcbiAgICAgICAgZGF0YVtcIm1vZHVsZVwiXSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdID0gdGhpcy5zdWJNb2R1bGU7XG4gICAgICAgIGRhdGFbXCJtYWluXCJdID0gdGhpcy5tYWluO1xuICAgICAgICBkYXRhW1wiZGlzcGxheVwiXSA9IHRoaXMuZGlzcGxheTtcbiAgICAgICAgZGF0YVtcImNvbW1hbmRcIl0gPSB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGRhdGFbXCJmYWNpbGl0eUNvbW1hbmRcIl0gPSB0aGlzLmZhY2lsaXR5Q29tbWFuZDtcbiAgICAgICAgZGF0YVtcImFjdGlvblwiXSA9IHRoaXMuYWN0aW9uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBQZXJtaXNzaW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcm1pc3Npb25EdG8ge1xuICAgIHR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICAgIGdyb3VwOiBQZXJtaXNzaW9uR3JvdXA7XG4gICAgc2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGU7XG4gICAgbWFpbjogYm9vbGVhbjtcbiAgICBkaXNwbGF5OiBib29sZWFuO1xuICAgIGNvbW1hbmQ6IFJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBmYWNpbGl0eUNvbW1hbmQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGFjdGlvbjogUmVtb3RlQWN0aW9uVHlwZXM7XG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25Hcm91cCB7XG4gICAgTm9uZSA9IDAsXG4gICAgR2VuZXJhbFBlcm1pc3Npb25zID0gMSxcbiAgICBBZHZhbmNlZE9wdGlvbnMgPSAyLFxuICAgIFRpY2tldFBlcm1pc3Npb25zID0gMyxcbiAgICBQYXJraW5nTG90UGVybWlzc2lvbnMgPSA0LFxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgQ2xvdWQgPSAwLFxuICAgIFNwYXJrQ29yZSA9IDEsXG4gICAgQ2xvdWRTcGFya0NvcmUgPSAyLFxuICAgIFNtYXJ0UGFyayA9IDMsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlIHtcbiAgICBDY01haW4gPSAwLFxuICAgIERlcHJlY2F0ZWRBZG1pbk1haW4gPSAxLFxuICAgIFVubG9ja0Rvb3IgPSAyLFxuICAgIFZlbmRHYXRlID0gMyxcbiAgICBWYWxpZGF0ZSA9IDQsXG4gICAgU2V0UHJpY2UgPSA1LFxuICAgIFJlc3RvcmVUaWNrZXQgPSA2LFxuICAgIENoYW5nZURldmljZUFjY2Vzc01vZGUgPSA3LFxuICAgIFJlc2V0RGV2aWNlQWNjZXNzTW9kZSA9IDgsXG4gICAgUmVzdGFydERldmljZSA9IDksXG4gICAgUmVzZXRCaWxsRGlzcGVuc2VyID0gMTAsXG4gICAgQ2xvc2VHYXRlID0gMTEsXG4gICAgRWplY3RKYW1tZWRUaWNrZXQgPSAxMixcbiAgICBTd2FsbG93SmFtbWVkVGlja2V0ID0gMTMsXG4gICAgRGVsaXZlckJ1bmRsZUJpbGxzID0gMTQsXG4gICAgTG9ja0Nhc2hSZWdpc3RlciA9IDE1LFxuICAgIFNldFJhdGUgPSAxNixcbiAgICBJbnNlcnRWaXJ0dWFsVGlja2V0ID0gMTcsXG4gICAgSG9sZFJlbGF5ID0gMTgsXG4gICAgT3BlblJlbGF5ID0gMTksXG4gICAgUHJpbnRUaWNrZXQgPSAyMCxcbiAgICBUcmlnZ2VyTFBSTW9kdWxlID0gMjEsXG4gICAgRW5hYmxlUmVwcmludFJlY2VpcHQgPSAyMixcbiAgICBPcGVuR2F0ZUNvbnRpbnVvdXNseSA9IDIzLFxuICAgIENsb3NlR2F0ZUNvbnRpbnVvdXNseSA9IDI0LFxuICAgIE1hbnVhbGx5Q2xvc2VUaWNrZXQgPSAyNSxcbiAgICBVcGRhdGVMb2NhdGlvbiA9IDI2LFxuICAgIFVwZGF0ZU9jY3VwYW5jeSA9IDI3LFxuICAgIEF0dGFjaFRpY2tldCA9IDI4LFxuICAgIFVwZGF0ZUxpY2Vuc2VQbGF0ZSA9IDI5LFxuICAgIExvc3RUaWNrZXQgPSAzMCxcbiAgICBJbnNlcnRSZW1vdGVWYWxpZGF0aW9uID0gMzEsXG4gICAgVXBkYXRlUGF5bWVudCA9IDMyLFxuICAgIFVwZGF0ZVpvbmVPY2N1cGFuY3kgPSAzMyxcbiAgICBVcGRhdGVSZW1vdGVWYWxpZGF0aW9uID0gMzQsXG4gICAgVmFsaWRhdGlvbk1haW4gPSAzNSxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25WaWV3ID0gMzYsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJWaWV3ID0gMzcsXG4gICAgVmFsaWRhdGlvbkNvdXBvblZpZXcgPSAzOCxcbiAgICBSZXBvcnRzTWFpbiA9IDM5LFxuICAgIEd1ZXN0TWFpbiA9IDQwLFxuICAgIFVwZGF0ZURvY3VtZW50ID0gNDEsXG4gICAgVmlld1JldmVudWUgPSA0MixcbiAgICBQcmludFJlY2VpcHQgPSA0MyxcbiAgICBNb250aGxpZXNNYWluID0gNDQsXG4gICAgUGlNYWluID0gNDUsXG4gICAgR3Vlc3RHcm91cFZpZXcgPSA0NixcbiAgICBTaW5nbGVHdWVzdCA9IDQ3LFxuICAgIENsb3NlVGlja2V0Rm9ySVNGID0gNDgsXG4gICAgUGF5bWVudEZvcklTRiA9IDQ5LFxuICAgIE1hbnVhbGx5UnVuWiA9IDUwLFxuICAgIFVwZGF0ZVNldHRpbmdzID0gNTEsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDUyLFxuICAgIFVwZGF0ZU1DRGF0ZVRpbWUgPSA1MyxcbiAgICBHdWVzdEhvdGVsR3Vlc3RWaWV3ID0gNTQsXG4gICAgR3Vlc3RWaWV3ID0gNTUsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRNYWluID0gNTYsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50VmlldyA9IDU3LFxuICAgIE1vbnRobGllc1ZpZXcgPSA1OCxcbiAgICBNb250aGx5U2VyaWVzQ3JlYXRlID0gNTksXG4gICAgUnVuTWFjcm8gPSA2MCxcbiAgICBUZW5hbnRTZXR0aW5nc01haW4gPSA2MSxcbiAgICBNYW5hZ2VtZW50QWRtaW4gPSA2MixcbiAgICBCbGFja0xpc3QgPSA2MyxcbiAgICBTeXN0ZW1BZG1pbiA9IDY0LFxuICAgIE9wZXJhdGlvbmFsQWRtaW4gPSA2NSxcbiAgICBGYWNpbGl0aWVzQW5kU21hcnRwYXJrcyA9IDY2LFxuICAgIExvZ28gPSA2NyxcbiAgICBTbXRwU2V0dGluZ3MgPSA2OCxcbiAgICBEZWZhdWx0VXNlclNldHRpbmdzID0gNjksXG4gICAgQXVkaXQgPSA3MCxcbiAgICBCYWNrb2ZmaWNlTWFpbiA9IDcxLFxuICAgIExvdENvbmZpZ3VyYXRpb25NYWluID0gNzIsXG4gICAgTG90Q29uZmlndXJhdGlvblJhdGVzID0gNzMsXG4gICAgTG90Q29uZmlndXJhdGlvblNjaGVkdWxlciA9IDc0LFxuICAgIExvdENvbmZpZ3VyYXRpb25WYWxpZGF0aW9uUHJvZmlsZSA9IDc1LFxuICAgIEhvdGVsR3Vlc3RJT0NyZWF0ZSA9IDc2LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VNYWluID0gNzcsXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uQ3JlYXRlID0gNzgsXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uVXBkYXRlID0gNzksXG4gICAgVmFsaWRhdGlvbkVWYWxpZGF0aW9uRGVsZXRlID0gODAsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJDcmVhdGUgPSA4MSxcbiAgICBWYWxpZGF0aW9uU3RpY2tlclVwZGF0ZSA9IDgyLFxuICAgIFZhbGlkYXRpb25TdGlja2VyRGVsZXRlID0gODMsXG4gICAgVmFsaWRhdGlvbkNvdXBvbkNyZWF0ZSA9IDg0LFxuICAgIFZhbGlkYXRpb25Db3Vwb25VcGRhdGUgPSA4NSxcbiAgICBWYWxpZGF0aW9uQ291cG9uRGVsZXRlID0gODYsXG4gICAgR3Vlc3RHcm91cENyZWF0ZSA9IDg3LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudENyZWF0ZSA9IDg4LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudFVwZGF0ZSA9IDg5LFxuICAgIEFjY291bnRNYW5hZ2VtZW50QWNjb3VudERlbGV0ZSA9IDkwLFxuICAgIE1vbnRobGllc0NyZWF0ZSA9IDkxLFxuICAgIE1vbnRobGllc1VwZGF0ZSA9IDkyLFxuICAgIE1vbnRobGllc0RlbGV0ZSA9IDkzLFxuICAgIEd1ZXN0Q3JlYXRlID0gOTQsXG4gICAgR3Vlc3RVcGRhdGUgPSA5NSxcbiAgICBHdWVzdERlbGV0ZSA9IDk2LFxuICAgIENsb3NlUGF5bWVudFNjcmVlbiA9IDk3LFxuICAgIEVDb21tZXJjZUFkbWluID0gOTgsXG4gICAgRUNvbW1lcmNlUmVndWxhciA9IDk5LFxuICAgIExvdENvbmZpZ3VyYXRpb25BY2Nlc3NQcm9maWxlID0gMTAwLFxuICAgIENhbmNlbFJlY2VpcHQgPSAxMDEsXG4gICAgR3Vlc3RBZHZhbmNlZCA9IDEwMixcbiAgICBHdWVzdEdyb3VwQWR2YW5jZWQgPSAxMDMsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0Q3JlYXRlID0gMTA0LFxuICAgIEd1ZXN0SG90ZWxHdWVzdFVwZGF0ZSA9IDEwNSxcbiAgICBHdWVzdEhvdGVsR3Vlc3REZWxldGUgPSAxMDYsXG4gICAgSW1wb3J0ZXJUb29sVmlldyA9IDEwNyxcbiAgICBHdWVzdEVWb3VjaGVyVmlldyA9IDEwOCxcbiAgICBMb3RDb25maWd1cmF0aW9uRHluYW1pY1ByaWNpbmcgPSAxMDksXG4gICAgRGlnaXRhbFJlY2VwaXQgPSAxMTAsXG4gICAgQWxsQWNjb3VudHMgPSAxMTEsXG4gICAgQWxsVmFsaWRhdGlvbnMgPSAxMTIsXG4gICAgTW9udGhsaWVzQ3JlYXRlQWR2YW5jZWQgPSAxMTMsXG4gICAgTW9udGhsaWVzVXBkYXRlQWR2YW5jZWQgPSAxMTQsXG4gICAgTW9udGhseVNlcmllc0NyZWF0ZUFkdmFuY2VkID0gMTE1LFxuICAgIEd1ZXN0Q3JlYXRlQWR2YW5jZWQgPSAxMTYsXG4gICAgR3Vlc3RVcGRhdGVBZHZhbmNlZCA9IDExNyxcbiAgICBHdWVzdEdyb3VwQ3JlYXRlQWR2YW5jZWQgPSAxMTgsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0Q3JlYXRlQWR2YW5jZWQgPSAxMTksXG4gICAgR3Vlc3RIb3RlbEd1ZXN0VXBkYXRlQWR2YW5jZWQgPSAxMjAsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJDcmVhdGVBZHZhbmNlZCA9IDEyMSxcbiAgICBWYWxpZGF0aW9uU3RpY2tlclVwZGF0ZUFkdmFuY2VkID0gMTIyLFxuICAgIFZhbGlkYXRpb25Db3Vwb25DcmVhdGVBZHZhbmNlZCA9IDEyMyxcbiAgICBWYWxpZGF0aW9uQ291cG9uVXBkYXRlQWR2YW5jZWQgPSAxMjQsXG4gICAgVmFsaWRhdGlvblNlbGZWYWxpZGF0aW9uVmlldyA9IDEyNSxcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25DcmVhdGUgPSAxMjYsXG4gICAgVmFsaWRhdGlvblNlbGZWYWxpZGF0aW9uVXBkYXRlID0gMTI3LFxuICAgIFZhbGlkYXRpb25TZWxmVmFsaWRhdGlvbkRlbGV0ZSA9IDEyOCxcbiAgICBMb3RDb25maWd1cmF0aW9uQ2FzaGllck1hbmFnZW1lbnQgPSAxMjksXG4gICAgSG90ZWxHdWVzdElPVmlldyA9IDEzMCxcbiAgICBDcmVhdGVUaWNrZXRCeUxpY2Vuc2VQbGF0ZSA9IDEzMSxcbiAgICBFbmZvcmNlbWVudEludGVncmF0aW9uID0gMTMyLFxuICAgIFNjYW4yUGF5TWFpbiA9IDEzMyxcbiAgICBTY2FuMlBheSA9IDEzNCxcbiAgICBNb250aGxpZXNTZW5kQW5kUHJpbnQgPSAxMzUsXG4gICAgR3Vlc3RTZW5kQW5kUHJpbnQgPSAxMzYsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0U2VuZEFuZFByaW50ID0gMTM3LFxuICAgIFZhbGlkYXRpb25Db3Vwb25TZW5kQW5kUHJpbnQgPSAxMzgsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJTZW5kQW5kUHJpbnQgPSAxMzksXG4gICAgQXV0aG9yaXphdGlvbiA9IC0xLFxufVxuXG5leHBvcnQgY2xhc3MgUHJvYmxlbURldGFpbHMgaW1wbGVtZW50cyBJUHJvYmxlbURldGFpbHMge1xuICAgIHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGluc3RhbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVByb2JsZW1EZXRhaWxzKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gX2RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2RhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IF9kYXRhW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHlwZSA9IF9kYXRhW1widHlwZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSBfZGF0YVtcInRpdGxlXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBfZGF0YVtcInN0YXR1c1wiXTtcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsID0gX2RhdGFbXCJkZXRhaWxcIl07XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gX2RhdGFbXCJpbnN0YW5jZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUHJvYmxlbURldGFpbHMge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFByb2JsZW1EZXRhaWxzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICBkYXRhW3Byb3BlcnR5XSA9IHRoaXNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBkYXRhW1widGl0bGVcIl0gPSB0aGlzLnRpdGxlO1xuICAgICAgICBkYXRhW1wic3RhdHVzXCJdID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIGRhdGFbXCJkZXRhaWxcIl0gPSB0aGlzLmRldGFpbDtcbiAgICAgICAgZGF0YVtcImluc3RhbmNlXCJdID0gdGhpcy5pbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUHJvYmxlbURldGFpbHMge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQcm9ibGVtRGV0YWlscygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb2JsZW1EZXRhaWxzIHtcbiAgICB0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBkZXRhaWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpbnN0YW5jZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuRHRvIGltcGxlbWVudHMgSVJlZnJlc2hUb2tlbkR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50O1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElSZWZyZXNoVG9rZW5EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gX2RhdGFbXCJhY2Nlc3NUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuID0gX2RhdGFbXCJyZWZyZXNoVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSBfZGF0YVtcImV4cGlyYXRpb25cIl0gPyBtb21lbnQoX2RhdGFbXCJleHBpcmF0aW9uXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFJlZnJlc2hUb2tlbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJyZWZyZXNoVG9rZW5cIl0gPSB0aGlzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgZGF0YVtcImV4cGlyYXRpb25cIl0gPSB0aGlzLmV4cGlyYXRpb24gPyB0aGlzLmV4cGlyYXRpb24udG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZWZyZXNoVG9rZW5EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWZyZXNoVG9rZW5EdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudDtcbn1cblxuZXhwb3J0IGNsYXNzIFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFJlZnJlc2hUb2tlbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBSZWZyZXNoVG9rZW5EdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogUmVmcmVzaFRva2VuRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZUFjdGlvblR5cGVzIHtcbiAgICBVcGRhdGVMaWNlbnNlUGxhdGUgPSAxLFxuICAgIFVwZGF0ZURvY3VtZW50ID0gMixcbiAgICBWaWV3UmV2ZW51ZSA9IDMsXG4gICAgUHJpbnRSZWNlaXB0ID0gNCxcbn1cblxuZXhwb3J0IGVudW0gUmVtb3RlQ29tbWFuZFR5cGVzIHtcbiAgICBVbmxvY2tEb29yID0gMCxcbiAgICBWZW5kR2F0ZSA9IDEsXG4gICAgVmFsaWRhdGUgPSAyLFxuICAgIFNldFByaWNlID0gMyxcbiAgICBSZXN0b3JlVGlja2V0ID0gNCxcbiAgICBDaGFuZ2VEZXZpY2VBY2Nlc3NNb2RlID0gNSxcbiAgICBSZXNldERldmljZUFjY2Vzc01vZGUgPSA2LFxuICAgIFJlc3RhcnREZXZpY2UgPSA3LFxuICAgIFJlc2V0QmlsbERpc3BlbnNlciA9IDgsXG4gICAgQ2xvc2VHYXRlID0gOSxcbiAgICBFamVjdEphbW1lZFRpY2tldCA9IDEwLFxuICAgIFN3YWxsb3dKYW1tZWRUaWNrZXQgPSAxMSxcbiAgICBEZWxpdmVyQnVuZGxlQmlsbHMgPSAxMixcbiAgICBMb2NrQ2FzaFJlZ2lzdGVyID0gMTMsXG4gICAgU2V0UmF0ZSA9IDE0LFxuICAgIEluc2VydFZpcnR1YWxUaWNrZXQgPSAxNSxcbiAgICBIb2xkUmVsYXkgPSAxNixcbiAgICBPcGVuUmVsYXkgPSAxNyxcbiAgICBQcmludFRpY2tldCA9IDE4LFxuICAgIFRyaWdnZXJMUFJNb2R1bGUgPSAxOSxcbiAgICBFbmFibGVSZXByaW50UmVjZWlwdCA9IDIwLFxuICAgIE9wZW5HYXRlQ29udGludW91c2x5ID0gMjEsXG4gICAgQ2xvc2VHYXRlQ29udGludW91c2x5ID0gMjIsXG4gICAgU2VuZFBhcmFtZXRlcnMgPSAyMyxcbiAgICBTZW5kS2V5T3B0aW9ucyA9IDI0LFxuICAgIE1hbnVhbGx5Q2xvc2VUaWNrZXQgPSAzMCxcbiAgICBVcGRhdGVMb2NhdGlvbiA9IDMxLFxuICAgIFVwZGF0ZU9jY3VwYW5jeSA9IDMyLFxuICAgIEF0dGFjaFRpY2tldCA9IDMzLFxuICAgIEluc2VydFJlbW90ZVZhbGlkYXRpb24gPSAzNixcbiAgICBVcGRhdGVSZW1vdGVWYWxpZGF0aW9uID0gMzcsXG4gICAgRGVsZXRlUmVtb3RlVmFsaWRhdGlvbiA9IDM5LFxuICAgIFJlc3RvcmVSZW1vdGVWYWxpZGF0aW9uID0gNDAsXG4gICAgVXBkYXRlVG90YWxPY2N1cGFuY3kgPSA0MSxcbiAgICBVcGRhdGVab25lT2NjdXBhbmN5ID0gNDIsXG4gICAgQ2xvc2VUaWNrZXRGb3JJU0YgPSA0MyxcbiAgICBQYXltZW50Rm9ySVNGID0gNDQsXG4gICAgRGVsZXRlVGlja2V0ID0gNDUsXG4gICAgQ2xvc2VQYXltZW50U2NyZWVuID0gNDYsXG4gICAgVXBkYXRlQWxsVmFsaWRhdGlvbiA9IDQ3LFxuICAgIENhbmNlbFJlY2VpcHQgPSA0OCxcbiAgICBSZXN0YXJ0U21hcnRwYXJrID0gNDksXG4gICAgU2VuZERpZ2l0YWxSZWNlaXB0UGFyYW1zID0gNTAsXG4gICAgU2VuZFN1cmNoYXJnZSA9IDUxLFxuICAgIFNlbmRMb3RTZXR1cCA9IDUyLFxuICAgIFNlbmRSYXRlSW1hZ2VzID0gNTMsXG4gICAgVXBkYXRlU21hcnRab25lT2NjdXBhbmN5ID0gNTQsXG4gICAgQ3JlYXRlVGlja2V0QnlMaWNlbnNlUGxhdGUgPSA1NSxcbiAgICBHZXRUaWNrZXRGZWUgPSAxMDAwLFxuICAgIFVwZGF0ZVRpY2tldFBheW1lbnQgPSAxMDAxLFxuICAgIFVwZGF0ZUNvbXBhbmllc0NvdW50ZXIgPSAxMDAyLFxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIGltcGxlbWVudHMgSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBpc1NtYXJ0UGFya0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0Nsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIHNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDb3JlQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDbG91ZENvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NtYXJ0UGFya0Nvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXSA9IHRoaXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0NvcmVDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU3BhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0Nsb3VkQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGlzU21hcnRQYXJrQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ2xvdWRDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFNldHRpbmdzQ2F0ZWdvcnkge1xuICAgIERhdGVGb3JtYXRzID0gMCxcbiAgICBBbGVydHMgPSAxLFxuICAgIFRpY2tldHNTcGVjaWZpY2F0aW9ucyA9IDIsXG4gICAgTG9jYWxpemF0aW9uID0gMyxcbiAgICBBbGVydHNQcmVmZXJlbmNlc09sZCA9IDQsXG4gICAgVHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSA1LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VVUkwgPSA2LFxuICAgIFNTTyA9IDcsXG4gICAgUGFzc3dvcmRQb2xpY3kgPSA4LFxuICAgIERpZ2l0YWxSZWNlaXB0UHJvdmlkZXJzU2V0dGluZ3MgPSA5LFxuICAgIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzT2xkID0gMTAsXG4gICAgU3BlY2lhbFRyYW5zaWVudCA9IDExLFxuICAgIEFsZXJ0c1ByZWZlcmVuY2VzID0gMTIsXG4gICAgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMgPSAxMyxcbiAgICBFbmZvcmNlbWVudEludGVncmF0aW9uU2V0dGluZ3MgPSAxNCxcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIGltcGxlbWVudHMgSVNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgICBzaW5nbGVTaWduT25Qcm92aWRlcjogU2luZ2xlU2lnbk9uUHJvdmlkZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51c2VyU3RhdHVzID0gX2RhdGFbXCJ1c2VyU3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSBfZGF0YVtcImlzQXV0aGVudGljYXRlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlU2lnbk9uUHJvdmlkZXIgPSBfZGF0YVtcInNpbmdsZVNpZ25PblByb3ZpZGVyXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJTdGF0dXNcIl0gPSB0aGlzLnVzZXJTdGF0dXM7XG4gICAgICAgIGRhdGFbXCJpc0F1dGhlbnRpY2F0ZWRcIl0gPSB0aGlzLmlzQXV0aGVudGljYXRlZDtcbiAgICAgICAgZGF0YVtcInNpbmdsZVNpZ25PblByb3ZpZGVyXCJdID0gdGhpcy5zaW5nbGVTaWduT25Qcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgICBzaW5nbGVTaWduT25Qcm92aWRlcjogU2luZ2xlU2lnbk9uUHJvdmlkZXI7XG59XG5cbmV4cG9ydCBlbnVtIFNpbmdsZVNpZ25PblByb3ZpZGVyIHtcbiAgICBNaWNyb3NvZnQgPSAxLFxuICAgIFBpbmdGZWRlcmF0ZSA9IDIsXG59XG5cbmV4cG9ydCBlbnVtIFNtYXJ0UGFya1R5cGUge1xuICAgIFNpbmdsZVBhcmsgPSAwLFxuICAgIE11bHRpUGFyayA9IDEsXG4gICAgU3VwZXJQYXJrID0gMixcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0UGFya1dyYXBwZXJEdG8gaW1wbGVtZW50cyBJU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgc21hcnRQYXJrczogeyBba2V5OiBzdHJpbmddOiBTbWFydHBhcmtCYXNpY0R0bzsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU21hcnRQYXJrV3JhcHBlckR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInNtYXJ0UGFya3NcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNtYXJ0UGFya3MgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wic21hcnRQYXJrc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJzbWFydFBhcmtzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnNtYXJ0UGFya3MpW2tleV0gPSBfZGF0YVtcInNtYXJ0UGFya3NcIl1ba2V5XSA/IFNtYXJ0cGFya0Jhc2ljRHRvLmZyb21KUyhfZGF0YVtcInNtYXJ0UGFya3NcIl1ba2V5XSkgOiBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRQYXJrcykge1xuICAgICAgICAgICAgZGF0YVtcInNtYXJ0UGFya3NcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnNtYXJ0UGFya3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbWFydFBhcmtzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJzbWFydFBhcmtzXCJdKVtrZXldID0gdGhpcy5zbWFydFBhcmtzW2tleV0gPyB0aGlzLnNtYXJ0UGFya3Nba2V5XS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0UGFya1dyYXBwZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgc21hcnRQYXJrczogeyBba2V5OiBzdHJpbmddOiBTbWFydHBhcmtCYXNpY0R0bzsgfSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gU21hcnRQYXJrV3JhcHBlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFNtYXJ0UGFya1dyYXBwZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNtYXJ0cGFya0Jhc2ljRHRvIGltcGxlbWVudHMgSVNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG87XG4gICAgZmFjaWxpdGllczogRmFjaWxpdHlCYXNpY0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjdXJyZW5jeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGVuYWJsZVNwZWNpYWxUcmFuc2llbnRzOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydHBhcmtCYXNpY0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZCA9IF9kYXRhW1wiZ3VpZFwiXTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IF9kYXRhW1widHlwZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzID0gX2RhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0gPyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8uZnJvbUpTKF9kYXRhW1wic2VydmljZXNSdW5uaW5nU3RhdHVzXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJmYWNpbGl0aWVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFjaWxpdGllcyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wiZmFjaWxpdGllc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNpbGl0aWVzLnB1c2goRmFjaWxpdHlCYXNpY0R0by5mcm9tSlMoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zcGFya1ZlcnNpb24gPSBfZGF0YVtcInNwYXJrVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrVmVyc2lvbiA9IF9kYXRhW1wic21hcnRQYXJrVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3kgPSBfZGF0YVtcImN1cnJlbmN5XCJdO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVTcGVjaWFsVHJhbnNpZW50cyA9IF9kYXRhW1wiZW5hYmxlU3BlY2lhbFRyYW5zaWVudHNcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydHBhcmtCYXNpY0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImd1aWRcIl0gPSB0aGlzLmd1aWQ7XG4gICAgICAgIGRhdGFbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBkYXRhW1wic2VydmljZXNSdW5uaW5nU3RhdHVzXCJdID0gdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPyB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cy50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZhY2lsaXRpZXMpKSB7XG4gICAgICAgICAgICBkYXRhW1wiZmFjaWxpdGllc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmZhY2lsaXRpZXMpXG4gICAgICAgICAgICAgICAgZGF0YVtcImZhY2lsaXRpZXNcIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3BhcmtWZXJzaW9uXCJdID0gdGhpcy5zcGFya1ZlcnNpb247XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtWZXJzaW9uXCJdID0gdGhpcy5zbWFydFBhcmtWZXJzaW9uO1xuICAgICAgICBkYXRhW1wiY3VycmVuY3lcIl0gPSB0aGlzLmN1cnJlbmN5O1xuICAgICAgICBkYXRhW1wiZW5hYmxlU3BlY2lhbFRyYW5zaWVudHNcIl0gPSB0aGlzLmVuYWJsZVNwZWNpYWxUcmFuc2llbnRzO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHlwZTogU21hcnRQYXJrVHlwZTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bztcbiAgICBmYWNpbGl0aWVzOiBGYWNpbGl0eUJhc2ljRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc21hcnRQYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGN1cnJlbmN5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZW5hYmxlU3BlY2lhbFRyYW5zaWVudHM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTcGFya1NldHRpbmdzRHRvIGltcGxlbWVudHMgSVNwYXJrU2V0dGluZ3NEdG8ge1xuICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5O1xuICAgIHNldHRpbmdzSnNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTcGFya1NldHRpbmdzRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IF9kYXRhW1wiY2F0ZWdvcnlcIl07XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSnNvbiA9IF9kYXRhW1wic2V0dGluZ3NKc29uXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTcGFya1NldHRpbmdzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTcGFya1NldHRpbmdzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJjYXRlZ29yeVwiXSA9IHRoaXMuY2F0ZWdvcnk7XG4gICAgICAgIGRhdGFbXCJzZXR0aW5nc0pzb25cIl0gPSB0aGlzLnNldHRpbmdzSnNvbjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTcGFya1NldHRpbmdzRHRvIHtcbiAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeTtcbiAgICBzZXR0aW5nc0pzb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLmRhdGEpW2tleV0gPSBfZGF0YVtcImRhdGFcIl1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcImRhdGFcIl0pW2tleV0gPSAoPGFueT50aGlzLmRhdGEpW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gU3ViTW9kdWxlIHtcbiAgICBFVmFsaWRhdGlvbiA9IDAsXG4gICAgU3RpY2tlcnMgPSAxLFxuICAgIENvdXBvbnMgPSAyLFxuICAgIEd1ZXN0cyA9IDMsXG4gICAgSG90ZWxHdWVzdHMgPSA0LFxuICAgIE1vbnRobGllcyA9IDUsXG4gICAgQWNjb3VudHMgPSA2LFxuICAgIFVzZXJNYW5hZ2VtZW50ID0gNyxcbiAgICBGYWNpbGl0aWVzQW5kU21hcnRwYXJrcyA9IDgsXG4gICAgTG9nbyA9IDksXG4gICAgU210cFNldHRpbmdzID0gMTAsXG4gICAgRGVmYXVsdFVzZXJTZXR0aW5ncyA9IDExLFxuICAgIEF1ZGl0ID0gMTIsXG4gICAgUmF0ZXMgPSAxMyxcbiAgICBTY2hlZHVsZXIgPSAxNCxcbiAgICBWYWxpZGF0aW9uUHJvZmlsZXMgPSAxNSxcbiAgICBIb3RlbEd1ZXN0c0lPID0gMTYsXG4gICAgQWNjZXNzUHJvZmlsZXMgPSAxNyxcbiAgICBJbXBvcnRlclRvb2wgPSAxOCxcbiAgICBFVm91Y2hlciA9IDE5LFxuICAgIER5bmFtaWNQcmljaW5nID0gMjAsXG4gICAgRGlnaXRhbFJlY2VpcHQgPSAyMSxcbiAgICBTZWxmVmFsaWRhdGlvbiA9IDIyLFxuICAgIENhc2hpZXJzTWFuYWdlbWVudCA9IDIzLFxuICAgIEVuZm9yY2VtZW50SW50ZWdyYXRpb24gPSAyNCxcbn1cblxuZXhwb3J0IGNsYXNzIFRlbmFudERldGFpbHNEdG8gaW1wbGVtZW50cyBJVGVuYW50RGV0YWlsc0R0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUZW5hbnREZXRhaWxzRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IF9kYXRhW1wiZGlzcGxheU5hbWVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJwcm9wc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMucHJvcHMpW2tleV0gPSBfZGF0YVtcInByb3BzXCJdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUZW5hbnREZXRhaWxzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wiZGlzcGxheU5hbWVcIl0gPSB0aGlzLmRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgICAgICAgZGF0YVtcInByb3BzXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PmRhdGFbXCJwcm9wc1wiXSlba2V5XSA9ICg8YW55PnRoaXMucHJvcHMpW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RGV0YWlsc0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZW5hbnREZXRhaWxzRHRvIHtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRlbmFudERldGFpbHNEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFRlbmFudERldGFpbHNEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUZW5hbnREZXRhaWxzRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREdG8gaW1wbGVtZW50cyBJVGVuYW50RHRvIHtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0gfCB1bmRlZmluZWQ7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0cmVlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IF9kYXRhW1wiZGlzcGxheU5hbWVcIl07XG4gICAgICAgICAgICBpZiAoX2RhdGFbXCJwcm9wc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMucHJvcHMpW2tleV0gPSBfZGF0YVtcInByb3BzXCJdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pZCA9IF9kYXRhW1wiaWRcIl07XG4gICAgICAgICAgICB0aGlzLnRyZWVJZCA9IF9kYXRhW1widHJlZUlkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUZW5hbnREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlOYW1lXCJdID0gdGhpcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcm9wc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJvcHNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByb3BzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJ0cmVlSWRcIl0gPSB0aGlzLnRyZWVJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RHRvIHtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0gfCB1bmRlZmluZWQ7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0cmVlSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRmYVNldHVwRHRvIGltcGxlbWVudHMgSVRmYVNldHVwRHRvIHtcbiAgICBlbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzVGZhRW5hYmxlZDogYm9vbGVhbjtcbiAgICBhdXRoZW50aWNhdG9yS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcXJDb2RlSW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWdpc3RlcmVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUZmFTZXR1cER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZW1haWwgPSBfZGF0YVtcImVtYWlsXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1RmYUVuYWJsZWQgPSBfZGF0YVtcImlzVGZhRW5hYmxlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRvcktleSA9IF9kYXRhW1wiYXV0aGVudGljYXRvcktleVwiXTtcbiAgICAgICAgICAgIHRoaXMucXJDb2RlSW1hZ2VVcmwgPSBfZGF0YVtcInFyQ29kZUltYWdlVXJsXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkID0gX2RhdGFbXCJyZWdpc3RlcmVkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUZmFTZXR1cER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGZhU2V0dXBEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVtYWlsXCJdID0gdGhpcy5lbWFpbDtcbiAgICAgICAgZGF0YVtcImlzVGZhRW5hYmxlZFwiXSA9IHRoaXMuaXNUZmFFbmFibGVkO1xuICAgICAgICBkYXRhW1wiYXV0aGVudGljYXRvcktleVwiXSA9IHRoaXMuYXV0aGVudGljYXRvcktleTtcbiAgICAgICAgZGF0YVtcInFyQ29kZUltYWdlVXJsXCJdID0gdGhpcy5xckNvZGVJbWFnZVVybDtcbiAgICAgICAgZGF0YVtcInJlZ2lzdGVyZWRcIl0gPSB0aGlzLnJlZ2lzdGVyZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRmYVNldHVwRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGZhU2V0dXBEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUZmFTZXR1cER0byB7XG4gICAgZW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RmYUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aGVudGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHFyQ29kZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlWZW5kb3JEdG8gaW1wbGVtZW50cyBJVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgYWNjb3VudElkOiBudW1iZXI7XG4gICAgcGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIHBhcmtDbG91ZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRoaXJkUGFydHlWZW5kb3JEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRJZCA9IF9kYXRhW1wiYWNjb3VudElkXCJdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX2RhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZXMgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFya0Nsb3VkSWQgPSBfZGF0YVtcInBhcmtDbG91ZElkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJhY2NvdW50SWRcIl0gPSB0aGlzLmFjY291bnRJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wZXJtaXNzaW9uVHlwZXMpKSB7XG4gICAgICAgICAgICBkYXRhW1wicGVybWlzc2lvblR5cGVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMucGVybWlzc2lvblR5cGVzKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wicGFya0Nsb3VkSWRcIl0gPSB0aGlzLnBhcmtDbG91ZElkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBwYXJrQ2xvdWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUaGlyZFBhcnR5VmVuZG9yRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUaGlyZFBhcnR5VmVuZG9yRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGhpcmRQYXJ0eVZlbmRvckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8gaW1wbGVtZW50cyBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gaW1wbGVtZW50cyBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgIGlzRW5hYmxlZEZvclVzZXI6IGJvb2xlYW47XG4gICAgaXNSZXF1aWVyZDJGQVNldHVwOiBib29sZWFuO1xuICAgIGFjdGl2YXRlUmVzcG9uc2VEdG86IEFjdGl2YXRlUmVzcG9uc2VEdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRGb3JVc2VyID0gX2RhdGFbXCJpc0VuYWJsZWRGb3JVc2VyXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1JlcXVpZXJkMkZBU2V0dXAgPSBfZGF0YVtcImlzUmVxdWllcmQyRkFTZXR1cFwiXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0byA9IF9kYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSA/IEFjdGl2YXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc0VuYWJsZWRGb3JVc2VyXCJdID0gdGhpcy5pc0VuYWJsZWRGb3JVc2VyO1xuICAgICAgICBkYXRhW1wiaXNSZXF1aWVyZDJGQVNldHVwXCJdID0gdGhpcy5pc1JlcXVpZXJkMkZBU2V0dXA7XG4gICAgICAgIGRhdGFbXCJhY3RpdmF0ZVJlc3BvbnNlRHRvXCJdID0gdGhpcy5hY3RpdmF0ZVJlc3BvbnNlRHRvID8gdGhpcy5hY3RpdmF0ZVJlc3BvbnNlRHRvLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgaXNFbmFibGVkRm9yVXNlcjogYm9vbGVhbjtcbiAgICBpc1JlcXVpZXJkMkZBU2V0dXA6IGJvb2xlYW47XG4gICAgYWN0aXZhdGVSZXNwb25zZUR0bzogQWN0aXZhdGVSZXNwb25zZUR0bztcbn1cblxuZXhwb3J0IGVudW0gVXNlclN0YXR1cyB7XG4gICAgQWN0aXZlID0gMCxcbiAgICBCbG9ja2VkID0gMSxcbiAgICBJbnZpdGVkID0gMixcbiAgICBJZ25vcmUgPSAzLFxuICAgIFBhc3N3b3JkRXhwaXJlZCA9IDQsXG4gICAgUmV2b2tlZCA9IDUsXG4gICAgVGVtcG9yYXJ5QmxvY2tlZCA9IDYsXG4gICAgQXdhaXRpbmdBY2Nlc3MgPSA3LFxuICAgIFVzZXJFeHBpcmVkID0gOCxcbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8gaW1wbGVtZW50cyBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogVXNlclN0YXR1cztcbiAgICBwbWw6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TmFtZSA9IF9kYXRhW1wibGFzdE5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVOYW1lID0gX2RhdGFbXCJ1TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gX2RhdGFbXCJzdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLnBtbCA9IF9kYXRhW1wicG1sXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wibGFzdE5hbWVcIl0gPSB0aGlzLmxhc3ROYW1lO1xuICAgICAgICBkYXRhW1widU5hbWVcIl0gPSB0aGlzLnVOYW1lO1xuICAgICAgICBkYXRhW1wic3RhdHVzXCJdID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIGRhdGFbXCJwbWxcIl0gPSB0aGlzLnBtbDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsYXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBtbDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSA9IF9kYXRhW1wiY29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMudXNlck5hbWUgPSBfZGF0YVtcInVzZXJOYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiY29kZVwiXSA9IHRoaXMuY29kZTtcbiAgICAgICAgZGF0YVtcInVzZXJOYW1lXCJdID0gdGhpcy51c2VyTmFtZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1wicmVmcmVzaFRva2VuXCJdID0gdGhpcy5yZWZyZXNoVG9rZW47XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlUmVzcG9uc2Uge1xuICAgIGRhdGE6IEJsb2I7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XG4gICAgaGVhZGVycz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgY2xhc3MgQXBpRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICByZXNwb25zZTogc3RyaW5nO1xuICAgIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIHJlc3VsdDogYW55O1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgcmVzcG9uc2U6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHJlc3VsdDogYW55KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzQXBpRXhjZXB0aW9uID0gdHJ1ZTtcblxuICAgIHN0YXRpYyBpc0FwaUV4Y2VwdGlvbihvYmo6IGFueSk6IG9iaiBpcyBBcGlFeGNlcHRpb24ge1xuICAgICAgICByZXR1cm4gb2JqLmlzQXBpRXhjZXB0aW9uID09PSB0cnVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24obWVzc2FnZTogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgcmVzcG9uc2U6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHJlc3VsdD86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KG5ldyBBcGlFeGNlcHRpb24obWVzc2FnZSwgc3RhdHVzLCByZXNwb25zZSwgaGVhZGVycywgbnVsbCkpO1xufVxuXG5mdW5jdGlvbiBibG9iVG9UZXh0KGJsb2I6IGFueSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFibG9iKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KFwiXCIpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KChldmVudC50YXJnZXQgYXMgYW55KS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iXX0=