@projectcor/maia-components 2.34.1 → 2.34.2
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.
- package/CHANGELOG.md +691 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +16 -54
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -438,7 +438,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
438
438
|
var messagesRef = useRef(null);
|
|
439
439
|
var chatInitializedRef = useRef(false);
|
|
440
440
|
var isLoadingMoreRef = useRef(false);
|
|
441
|
-
var userScrollingRef = useRef(false);
|
|
442
441
|
var scrollThresholdRef = useRef(39);
|
|
443
442
|
var lastScrollTopRef = useRef(0);
|
|
444
443
|
var showScrollToBottomRef = useRef(false);
|
|
@@ -534,20 +533,17 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
534
533
|
|
|
535
534
|
/**
|
|
536
535
|
* Scroll inmediato al fondo (dentro de rAF para coordinar con el paint)
|
|
537
|
-
* y actualiza la visibilidad del botón.
|
|
538
|
-
*
|
|
536
|
+
* y actualiza la visibilidad del botón. Solo se usa al abrir/cargar un chat
|
|
537
|
+
* o cuando el usuario pide ir al fondo: nunca durante el stream.
|
|
539
538
|
*/
|
|
540
539
|
var scrollToBottomRaf = useCallback(function () {
|
|
541
540
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
542
|
-
var _opts$
|
|
543
|
-
skipIfUserScrolling = _opts$skipIfUserScrol === void 0 ? false : _opts$skipIfUserScrol,
|
|
544
|
-
_opts$delayMs = opts.delayMs,
|
|
541
|
+
var _opts$delayMs = opts.delayMs,
|
|
545
542
|
delayMs = _opts$delayMs === void 0 ? 0 : _opts$delayMs;
|
|
546
543
|
var run = function run() {
|
|
547
544
|
requestAnimationFrame(function () {
|
|
548
545
|
var el = messagesRef.current;
|
|
549
546
|
if (!el) return;
|
|
550
|
-
if (skipIfUserScrolling && userScrollingRef.current) return;
|
|
551
547
|
el.scrollTop = el.scrollHeight;
|
|
552
548
|
updateScrollAffordances();
|
|
553
549
|
});
|
|
@@ -710,7 +706,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
710
706
|
if (isNearBottom) {
|
|
711
707
|
scrollThresholdRef.current = 39;
|
|
712
708
|
}
|
|
713
|
-
userScrollingRef.current = !isNearBottom;
|
|
714
709
|
lastScrollTopRef.current = scrollTop;
|
|
715
710
|
|
|
716
711
|
// Turno ya liberado por el usuario: seguimos devolviendo el alto
|
|
@@ -798,14 +793,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
798
793
|
useEffect(function () {
|
|
799
794
|
isLoadingMoreRef.current = isLoadingMoreMessages;
|
|
800
795
|
}, [isLoadingMoreMessages]);
|
|
801
|
-
|
|
802
|
-
// Cuando el agente empieza a responder, resetear el flag y el umbral para activar el auto-scroll
|
|
803
|
-
useEffect(function () {
|
|
804
|
-
if (waitingResponse) {
|
|
805
|
-
userScrollingRef.current = false;
|
|
806
|
-
scrollThresholdRef.current = 39;
|
|
807
|
-
}
|
|
808
|
-
}, [waitingResponse]);
|
|
809
796
|
useEffect(function () {
|
|
810
797
|
if (!chatInitializedRef.current) {
|
|
811
798
|
chatInitializedRef.current = true;
|
|
@@ -813,39 +800,20 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
813
800
|
}
|
|
814
801
|
}, []);
|
|
815
802
|
|
|
816
|
-
//
|
|
817
|
-
//
|
|
818
|
-
// backend: por eso acá usamos un loop de rAF que compara `scrollHeight`
|
|
819
|
-
// contra el último valor observado y ajusta solo cuando cambia. Así el
|
|
820
|
-
// scroll queda perfectamente sincronizado con la animación del texto sin
|
|
821
|
-
// depender de la cadencia del streamingStore.
|
|
822
|
-
// Con el turno anclado este loop solo encoge el spacer: no toca el scroll.
|
|
803
|
+
// Mientras el stream crece: encoger el spacer del turno anclado y
|
|
804
|
+
// actualizar flecha/gradientes. El scroll no se mueve solo.
|
|
823
805
|
useEffect(function () {
|
|
824
806
|
if (!waitingResponse && !isWriting) return undefined;
|
|
825
807
|
if (!messagesRef.current) return undefined;
|
|
826
808
|
var rafId = null;
|
|
827
|
-
var lastHeight = messagesRef.current.scrollHeight;
|
|
828
809
|
var _tick = function tick() {
|
|
829
810
|
var el = messagesRef.current;
|
|
830
811
|
if (!el) {
|
|
831
812
|
rafId = null;
|
|
832
813
|
return;
|
|
833
814
|
}
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
// gradiente de abajo tienen que encenderse apenas se pasa del viewport.
|
|
837
|
-
updateScrollAffordances();
|
|
838
|
-
rafId = requestAnimationFrame(_tick);
|
|
839
|
-
return;
|
|
840
|
-
}
|
|
841
|
-
var currentHeight = el.scrollHeight;
|
|
842
|
-
if (currentHeight !== lastHeight) {
|
|
843
|
-
lastHeight = currentHeight;
|
|
844
|
-
if (!userScrollingRef.current) {
|
|
845
|
-
el.scrollTop = currentHeight;
|
|
846
|
-
}
|
|
847
|
-
updateScrollAffordances();
|
|
848
|
-
}
|
|
815
|
+
syncTurnSpace();
|
|
816
|
+
updateScrollAffordances();
|
|
849
817
|
rafId = requestAnimationFrame(_tick);
|
|
850
818
|
};
|
|
851
819
|
rafId = requestAnimationFrame(_tick);
|
|
@@ -853,15 +821,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
853
821
|
if (rafId != null) cancelAnimationFrame(rafId);
|
|
854
822
|
};
|
|
855
823
|
}, [waitingResponse, isWriting, syncTurnSpace, updateScrollAffordances]);
|
|
856
|
-
|
|
857
|
-
// Al comenzar a esperar la respuesta del backend, scroll inicial al fondo.
|
|
858
|
-
useEffect(function () {
|
|
859
|
-
if (waitingResponse && messagesRef.current && !anchoredTurnIdRef.current) {
|
|
860
|
-
scrollToBottomRaf({
|
|
861
|
-
skipIfUserScrolling: true
|
|
862
|
-
});
|
|
863
|
-
}
|
|
864
|
-
}, [waitingResponse, scrollToBottomRaf]);
|
|
865
824
|
var lastReservedQuestionRef = useRef(null);
|
|
866
825
|
|
|
867
826
|
// Cambio de chat: el ancla y el spacer del turno anterior dejan de aplicar.
|
|
@@ -884,7 +843,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
884
843
|
}
|
|
885
844
|
if (!questionId || questionId === lastReservedQuestionRef.current) return;
|
|
886
845
|
lastReservedQuestionRef.current = questionId;
|
|
887
|
-
userScrollingRef.current = false;
|
|
888
846
|
requestAnimationFrame(function () {
|
|
889
847
|
return reserveTurnSpace(questionId);
|
|
890
848
|
});
|
|
@@ -900,7 +858,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
900
858
|
useEffect(function () {
|
|
901
859
|
wasLoadingMessagesRef.current = false;
|
|
902
860
|
lastScrolledSessionRef.current = null;
|
|
903
|
-
userScrollingRef.current = false;
|
|
904
861
|
scrollThresholdRef.current = 39;
|
|
905
862
|
lastScrollTopRef.current = 0;
|
|
906
863
|
lastMessageIdRef.current = null;
|
|
@@ -913,7 +870,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
913
870
|
if (loadingMessages || !initialChatId || messages.length === 0) return;
|
|
914
871
|
if (lastScrolledSessionRef.current === initialChatId) return;
|
|
915
872
|
lastScrolledSessionRef.current = initialChatId;
|
|
916
|
-
userScrollingRef.current = false;
|
|
917
873
|
scrollThresholdRef.current = 39;
|
|
918
874
|
lastMessageIdRef.current = (_messages$id = (_messages = messages[messages.length - 1]) === null || _messages === void 0 ? void 0 : _messages.id) !== null && _messages$id !== void 0 ? _messages$id : null;
|
|
919
875
|
lastMessagesLengthRef.current = messages.length;
|
|
@@ -945,6 +901,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
945
901
|
requestAnimationFrame(syncTurnSpace);
|
|
946
902
|
return;
|
|
947
903
|
}
|
|
904
|
+
|
|
905
|
+
// Mientras el agente responde no empujamos el scroll: el usuario se queda
|
|
906
|
+
// donde está y usa el botón si quiere ir al fondo.
|
|
907
|
+
if (waitingResponse || isWriting) {
|
|
908
|
+
updateScrollAffordances();
|
|
909
|
+
return;
|
|
910
|
+
}
|
|
948
911
|
var container = messagesRef.current;
|
|
949
912
|
var isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 100;
|
|
950
913
|
var hasInitialMessage = messages.some(function (msg) {
|
|
@@ -966,7 +929,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
966
929
|
return;
|
|
967
930
|
}
|
|
968
931
|
updateScrollAffordances();
|
|
969
|
-
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, syncTurnSpace, updateScrollAffordances]);
|
|
932
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, waitingResponse, isWriting, scrollToBottomRaf, syncTurnSpace, updateScrollAffordances]);
|
|
970
933
|
|
|
971
934
|
// Al abrir/cargar una conversación el contenedor se remonta (Loader → lista) con
|
|
972
935
|
// scrollTop=0. Forzamos ir al fondo al terminar loadMessages, sin afectar paginación hacia arriba.
|
|
@@ -975,7 +938,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
975
938
|
var justFinishedLoading = wasLoadingMessagesRef.current && !loadingMessages;
|
|
976
939
|
wasLoadingMessagesRef.current = loadingMessages;
|
|
977
940
|
if (!justFinishedLoading || messages.length === 0) return;
|
|
978
|
-
userScrollingRef.current = false;
|
|
979
941
|
scrollThresholdRef.current = 39;
|
|
980
942
|
lastMessageIdRef.current = (_messages$id2 = (_messages2 = messages[messages.length - 1]) === null || _messages2 === void 0 ? void 0 : _messages2.id) !== null && _messages$id2 !== void 0 ? _messages$id2 : null;
|
|
981
943
|
lastMessagesLengthRef.current = messages.length;
|
|
@@ -1151,4 +1113,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
1151
1113
|
);
|
|
1152
1114
|
};
|
|
1153
1115
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
1154
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzaG93VG9wR3JhZGllbnRSZWYiLCJzaG93Qm90dG9tR3JhZGllbnRSZWYiLCJzY3JvbGxSYWZSZWYiLCJhbmNob3JlZFR1cm5JZFJlZiIsInNwYWNlckVsUmVmIiwic3BhY2VySGVpZ2h0UmVmIiwidHVyblNjcm9sbFJhZlJlZiIsIndhc0xvYWRpbmdNZXNzYWdlc1JlZiIsImxhc3RTY3JvbGxlZFNlc3Npb25SZWYiLCJwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiIsInNjcm9sbFBlcnNpc3RUaW1lclJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJyZXRyeU1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJlYXNlZCIsInBvdyIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZW1vdmFibGUiLCJtYXgiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJsYXN0SGVpZ2h0IiwidGljayIsImN1cnJlbnRIZWlnaHQiLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiIsIl9tZXNzYWdlcyRpbmRleCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJpc1Njcm9sbE9uUGFyZW50Iiwic2Vzc2lvbiIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5IiwidHVybklkIiwidXNlck1lc3NhZ2VGb3JSZXRyeSIsImNhblJldHJ5IiwiaXNfY2FuY2VsbGVkIiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50Iiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCIkdmlzaWJsZSIsInhtbG5zIiwid2lkdGgiLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTWFpYVN0cmVhbWRvd24gfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB0eXBlIHsgTWFpYVN0cmVhbWRvd25Qcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IHJlbmRlclRleHRXaXRoTWVudGlvbnMsIGhhc0lubGluZU1hcmtlcnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5cbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VTbW9vdGhTdHJlYW1UZXh0IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU21vb3RoU3RyZWFtVGV4dCdcbmltcG9ydCB7IHVzZVN0cmVhbWluZ01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgQWdlbnRBY3Rpdml0eUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5pbXBvcnQgeyBSZWFzb25pbmdCbG9jayB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrJ1xuaW1wb3J0IHsgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL3JlYXNvbmluZ0xpdmVOYXJyYXRpb24nXG5pbXBvcnQgeyBSZWFzb25pbmdUaW1lbGluZSB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1RpbWVsaW5lJ1xuaW1wb3J0IHsgU0NUaW1lbGluZUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyByZXNvbHZlUmV0cnlUdXJuSWQsIGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHsgdXNlUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEZhZGUgfSBmcm9tICcuLi8uLi9hdG9tcy9GYWRlJ1xuaW1wb3J0IHsgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uLCByZWFkTWFpYVBhbmVsU2Vzc2lvbiB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ1Njcm9sbEljb25Td2FwLFxuICBTQ1dyaXRpbmdEb3RzLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NNZXNzYWdlc0dyYWRpZW50VG9wLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQWwgYW5jbGFyIGVsIHR1cm5vLCBsYSBwcmVndW50YSBubyBzZSBwZWdhIGFsIGJvcmRlIHN1cGVyaW9yOiBkZWphbW9zIGFzb21hclxuICogbGEgY29sYSBkZWwgbWVuc2FqZSBhbnRlcmlvciBwYXJhIG5vIHBlcmRlciBlbCBoaWxvIGRlIGxhIGNvbnZlcnNhY2nDs24uXG4gKiBSZWxhdGl2byBhbCB2aWV3cG9ydCBwb3JxdWUgdW4gdmFsb3IgZmlqbyBzZSBjb21lIGRlbWFzaWFkbyBlbiBwYW50YWxsYXMgY29ydGFzLlxuICovXG5jb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbi8qKlxuICogRHVyYWNpw7NuIGRlbCBzY3JvbGwgYW5pbWFkbzogYmFzZSB5IHRvcGUgcGFyYSByZWNvcnJpZG9zIGxhcmdvcywgcGFyYSBxdWUgdW5cbiAqIHNhbHRvIGRlIHZhcmlhcyBwYW50YWxsYXMgbm8gc2Ugc2llbnRhIHVuIGxhdGlnYXpvLlxuICovXG5jb25zdCBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyA9IDYwMFxuY29uc3QgVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TID0gODAwXG5cbi8qKiBEaXN0YW5jaWEgYSBwYXJ0aXIgZGUgbGEgY3VhbCBsYSBkdXJhY2nDs24geWEgZXN0w6EgZW4gc3UgdG9wZS4gKi9cbmNvbnN0IFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFggPSAxMjAwXG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBoYW5kbGVSZXRyeT86ICgpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbiAgc3RyZWFtQWN0aXZpdHk/OiBTdHJlYW1BY3Rpdml0eSB8IG51bGxcbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgb25SZXRyeT86ICgpID0+IHZvaWRcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbUxhZ01zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dChyYXdUZXh0LCB7XG4gICAgICBlbmFibGVkOiAhIXByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1BZGFwdCAhPSBudWxsICYmIHsgYWRhcHRUb0JhY2tlbmRSYXRlOiB3aW5GbGFncy5zdHJlYW1BZGFwdCB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyAhPSBudWxsICYmIHsgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zIH0pLFxuICAgIH0pXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcblxuICAgIGlmICghZGlzcGxheVRleHQgJiYgIXByb3BzLmlzU3RyZWFtaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGhhc01lbnRpb25zID0gaGFzSW5saW5lTWFya2VycyhkaXNwbGF5VGV4dClcbiAgICBjb25zdCBtZW50aW9uTm9kZXMgPSBoYXNNZW50aW9ucyA/IHJlbmRlclRleHRXaXRoTWVudGlvbnMoZGlzcGxheVRleHQpIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNZW50aW9ucyAmJiBtZW50aW9uTm9kZXMgPyAoXG4gICAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgICA8TWFpYVN0cmVhbWRvd25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImNoYXRcIlxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgTWFpYVN0cmVhbWRvd25Qcm9wc1snY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgIXByb3BzLmlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkIHx8ICEhcHJvcHMub25SZXRyeSkgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgICAgc291cmNlcz17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIG9uUmV0cnk9e3Byb3BzLm9uUmV0cnl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Vycm9yIHx8IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGgpICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhIWNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgJiYgKFxuICAgICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIGhhbmRsZVJldHJ5LFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGlkKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gaWQgOiBudWxsKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9ICEhaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuICBjb25zdCBoYXNTdHJlYW1UZXh0ID0gQm9vbGVhbihzdHJlYW1pbmdUZXh0KVxuICBjb25zdCByZWFzb25pbmdUcmFjZSA9IHVzZVJlYXNvbmluZ1RyYWNlKGlzQXNzaXN0YW50ICYmIGlzQWN0aXZlU3RyZWFtaW5nID8gaWQgOiAnJylcbiAgY29uc3Qgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9XG4gICAgaXNBc3Npc3RhbnQgJiYgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShyZWFzb25pbmdUcmFjZS5zdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIGlkKVxuICBjb25zdCBzaG93U3RyZWFtaW5nQm9keSA9IGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQgJiYgIXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmVcbiAgY29uc3Qgc2hvd0FjdGl2aXR5SW5kaWNhdG9yID0gaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgISFzdHJlYW1BY3Rpdml0eVxuXG4gIGNvbnN0IG1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBhdHRhY2htZW50c1xuICAgICAgOiAhaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgICA/IChzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgIDogW11cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCA9IGFzeW5jIChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGF0dGFjaG1lbnQubmFtZS5pbmNsdWRlcygnLicpID8gJycgOiBgLiR7YXR0YWNobWVudC50eXBlfWBcbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke2F0dGFjaG1lbnQubmFtZX0ke2V4dGVuc2lvbn1gXG4gICAgY29uc3QgZmlsZVVybCA9IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlID0gYXdhaXQgZG93bmxvYWRGaWxlRnJvbVVybChmaWxlVXJsLCBmaWxlTmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb3dubG9hZGVkRmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhdHRhY2htZW50LmZpbGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYmxvYlVybCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKVxuICAgICAgfSwgMTAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgYXR0YWNobWVudCcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVdyYXBwZXIga2V5PXtpZH0gaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn0gZGF0YS1tZXNzYWdlLWlkPXtpZH0gaGFzRmVlZGJhY2s9e2ZhbHNlfT5cbiAgICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfT5cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHsvKiBNaXNtbyBzbG90IHBhcmEgbGEgdHJhemEgZW4gdml2byB5IGxhIHlhIHBsZWdhZGE6IG1pZW50cmFzIGVsIHR1cm5vXG4gICAgICAgICAgICBjb3JyZSwgbG9zIHBhc29zIHNlIGFwaWxhbiBhY8OhICh0aW1lbGFwc2UpOyBhbCBjb21wbGV0YXIsIGVsXG4gICAgICAgICAgICBSZWFzb25pbmdCbG9jayBvY3VwYSBlbCBsdWdhciB5IGNvbGFwc2Egc29sby5cbiAgICAgICAgICAgIFZhIEFSUklCQSBkZWwgY3VlcnBvIHBvcnF1ZSBsYSBuYXJyYWNpw7NuIGRlIGNhZGEgdHVybm8gdGVybWluYSBjb21vXG4gICAgICAgICAgICBmaWxhIGRlIGxhIHRyYXphOiBzaSBlc3R1dmllcmEgYWJham8sIGVsIHRleHRvIHZpZWpvIHF1ZWRhcsOtYSBwb3JcbiAgICAgICAgICAgIGRlYmFqbyBkZWwgdGV4dG8gbnVldm8uICovfVxuICAgICAgICB7aXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAoaXNBY3RpdmVTdHJlYW1pbmcgPyAoXG4gICAgICAgICAgICA8UmVhc29uaW5nVGltZWxpbmUgbWVzc2FnZUlkPXtpZH0gc3RyZWFtQWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSBzdHJlYW1pbmdUZXh0PXtzdHJlYW1pbmdUZXh0fSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UmVhc29uaW5nQmxvY2sgbWVzc2FnZUlkPXtpZH0gdHJhY2U9e3Byb3BzLnJlYXNvbmluZyA/PyBudWxsfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICB7ISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8U0NBdHRhY2htZW50c1JvdyAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlQXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkRvd25sb2FkPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQoYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBzaG93U3RyZWFtaW5nQm9keSkgJiYgIShpc0Fzc2lzdGFudCAmJiAhIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGgpICYmIChcbiAgICAgICAgICA8U3RyZWFtaW5nTWVzc2FnZUJvZHlcbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2UgPz8gJyd9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17c2hvd1N0cmVhbWluZ0JvZHl9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIFNwaW5uZXIgZGUgYWN0aXZpZGFkOiB2aXNpYmxlIHRhbWJpw6luIGVuIHdyaXRpbmcgKG5hcnJhY2nDs24gZW4gdHJhemEgbyByZXNwdWVzdGEgZmluYWwpLiAqL31cbiAgICAgICAge3Nob3dBY3Rpdml0eUluZGljYXRvciAmJiAoXG4gICAgICAgICAgPFNDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IGNvbXBhY3QgLz5cbiAgICAgICAgICA8L1NDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dUb3BHcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd0JvdHRvbUdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIFR1cm5vIGNvbiBlbCBzY3JvbGwgYmFqbyBjb250cm9sIGRlbCB1c3VhcmlvOiBkZXNkZSBxdWUgZW52w61hIGVsIG1lbnNhamUgeVxuICAgKiBoYXN0YSBlbCBwcsOzeGltbyBlbnbDrW8gbm8gbW92ZW1vcyBlbCBzY3JvbGwgcG9yIG5pbmfDum4gbW90aXZvLiBFc1xuICAgKiBpbmRlcGVuZGllbnRlIGRlIGxhIGFsdHVyYSBkZWwgc3BhY2VyLCBxdWUgcHVlZGUgbGxlZ2FyIGEgMCBzaW4gZGVzYW5jbGFyLlxuICAgKi9cbiAgY29uc3QgYW5jaG9yZWRUdXJuSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VyRWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJIZWlnaHRSZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgdHVyblNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCB3YXNMb2FkaW5nTWVzc2FnZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RTY3JvbGxlZFNlc3Npb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dUb3BHcmFkaWVudCwgc2V0U2hvd1RvcEdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0JvdHRvbUdyYWRpZW50LCBzZXRTaG93Qm90dG9tR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHJldHJ5TWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICAvKipcbiAgICogUmVjYWxjdWxhIGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiB5IGxvcyBncmFkaWVudGVzIGRlIGJvcmRlIGEgcGFydGlyIGRlXG4gICAqIGxhIHBvc2ljacOzbiBkZWwgc2Nyb2xsLiBMb3MgcmVmcyBldml0YW4gYHNldFN0YXRlYCBjdWFuZG8gZWwgdmFsb3Igbm8gY2FtYmlhOlxuICAgKiBlc3RvIGNvcnJlIGVuIGNhZGEgZnJhbWUgZGVsIHN0cmVhbS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICAvLyBFbCBzcGFjZXIgZGVsIHR1cm5vIGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG86IHNpIG5vIGxvIGRlc2NvbnRhbW9zXG4gICAgLy8gbGEgZmxlY2hhIHkgZWwgZ3JhZGllbnRlIGRlIGFiYWpvIHF1ZWRhbiBlbmNlbmRpZG9zIGR1cmFudGUgdG9kbyBlbCB0dXJuby5cbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuXG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRUb3BHcmFkaWVudCA9IHNjcm9sbFRvcCA+IDFcbiAgICBpZiAoc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRUb3BHcmFkaWVudCkge1xuICAgICAgc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0VG9wR3JhZGllbnRcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChuZXh0VG9wR3JhZGllbnQpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEJvdHRvbUdyYWRpZW50ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gMVxuICAgIGlmIChzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dEJvdHRvbUdyYWRpZW50KSB7XG4gICAgICBzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRCb3R0b21HcmFkaWVudFxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KG5leHRCb3R0b21HcmFkaWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gUmVzcGV0YSBgc2tpcElmVXNlclNjcm9sbGluZ2AgcGFyYVxuICAgKiBubyBzb2JyZXNjcmliaXIgZWwgc2Nyb2xsIG1hbnVhbCBkZWwgdXN1YXJpbyBkdXJhbnRlIGVsIHN0cmVhbWluZy5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgc2tpcElmVXNlclNjcm9sbGluZz86IGJvb2xlYW47IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHNraXBJZlVzZXJTY3JvbGxpbmcgPSBmYWxzZSwgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBpZiAoc2tpcElmVXNlclNjcm9sbGluZyAmJiB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBjYW5jZWxUdXJuU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPT09IG51bGwpIHJldHVyblxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWFkbyBjb24gZWFzaW5nIHByb3BpbzogYGJlaGF2aW9yOiAnc21vb3RoJ2Agbm8gcGVybWl0ZSByZWd1bGFyIGxhXG4gICAqIGR1cmFjacOzbiB5IGVsIHNhbHRvIGFsIGFuY2xhciBlbCB0dXJubyBxdWVkYSBkZW1hc2lhZG8gc2Vjby5cbiAgICovXG4gIGNvbnN0IGFuaW1hdGVTY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICh0b3A6IG51bWJlcikgPT4ge1xuICAgICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgY29uc3QgZnJvbSA9IGVsLnNjcm9sbFRvcFxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0b3AgLSBmcm9tXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2UpIDwgMSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID1cbiAgICAgICAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAgICAgICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICAgICAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIC8vIGVhc2VPdXRFeHBvICh+Y3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkpOiBlbXBpZXphIGEgZnJlbmFyIG11Y2hvXG4gICAgICAgIC8vIGFudGVzIHF1ZSBlbCBxdWludCB5IGF0ZXJyaXphIHNpbiBjb3J0ZSBwZXJjZXB0aWJsZS5cbiAgICAgICAgY29uc3QgZWFzZWQgPSBwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoTWF0aC5hYnMoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBuZXh0KSA8IDEpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmVtb3ZhYmxlID0gTWF0aC5tYXgoMCwgZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0IC0gZWwuc2Nyb2xsVG9wKVxuICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHJlbW92YWJsZSkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ICYmIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IDw9IDApIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICBjb25zdCBtZWFzdXJlVHVybiA9IHVzZUNhbGxiYWNrKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBzcGFjZXJFbCA9IHNwYWNlckVsUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsIHx8ICFzcGFjZXJFbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHF1ZXN0aW9uRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtbWVzc2FnZS1pZD1cIiR7cXVlc3Rpb25JZH1cIl1gKVxuICAgIGlmICghcXVlc3Rpb25FbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgIGNvbnN0IHF1ZXN0aW9uVG9wID0gcXVlc3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICBjb25zdCBjb250ZW50Qm90dG9tID0gc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0OiBjb250ZW50Qm90dG9tIC0gcXVlc3Rpb25Ub3AgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbiAgICAgIC8vIENoYXQgcmVjacOpbiBpbmljaWFkbyBvIGNvbnZlcnNhY2nDs24gcXVlIGHDum4gZW50cmEgZW4gcGFudGFsbGE6IGxhXG4gICAgICAvLyBwcmVndW50YSB5YSBlc3TDoSBhcnJpYmEsIG5vIGhheSBuYWRhIHF1ZSBzdWJpciBuaSBxdWUgcmVzZXJ2YXIuXG4gICAgICBpZiAodGFyZ2V0U2Nyb2xsVG9wIDw9IGVsLnNjcm9sbFRvcCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXJ2YW1vcyBsbyBtw61uaW1vIHBhcmEgcXVlIGB0YXJnZXRTY3JvbGxUb3BgIHNlYSBhbGNhbnphYmxlLiBFbFxuICAgICAgLy8gc3BhY2VyIHNlIGluc2VydGEgZGUgdW5hIChlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvIHZpc2libGUpO1xuICAgICAgLy8gbG8gw7puaWNvIHF1ZSBzZSBwZXJjaWJlIGVzIGVsIGRlc3BsYXphbWllbnRvIGFuaW1hZG8uXG4gICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5tYXgoMCwgZWwuY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldCkpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8odGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodClcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQgLSBtZWFzdXJlZC50dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5taW4oc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQsIHJlc2VydmVkKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSwgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIC8vIE1pc21hIGN1cnZhIHkgZHVyYWNpw7NuIHF1ZSBlbCBhbmNsYWplIGRlbCB0dXJubzogZWwgYHNtb290aGAgbmF0aXZvIGZyZW5hIHNlY28uXG4gICAgYW5pbWF0ZVNjcm9sbFRvKGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gVHVybm8geWEgbGliZXJhZG8gcG9yIGVsIHVzdWFyaW86IHNlZ3VpbW9zIGRldm9sdmllbmRvIGVsIGFsdG9cbiAgICAgICAgLy8gcmVzZXJ2YWRvIG1pZW50cmFzIGJhamEsIHBhcmEgcXVlIGFsIGxsZWdhciBhbCDDumx0aW1vIG1lbnNhamUgbm9cbiAgICAgICAgLy8gcXVlZGUgaHVlY28gZGViYWpvLlxuICAgICAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIGRyYWluVHVyblNwYWNlKClcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgc2Nyb2xsVG9wID4gMCkge1xuICAgICAgICAgIGlmIChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZCwge1xuICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgIHNjcm9sbFNlc3Npb25JZDogaW5pdGlhbENoYXRJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMTUwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFthdXRoVXNlci5pZCwgZHJhaW5UdXJuU3BhY2UsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgLyoqXG4gICAqIGBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tgIHNlIHBhc2EgYSBUT0RPUyBsb3MgTWVzc2FnZUl0ZW0sIGFzw60gcXVlIHN1IGlkZW50aWRhZFxuICAgKiBkZWNpZGUgc2kgZWwgYG1lbW9gIGRlIGxhIGxpc3RhIHNvc3RpZW5lLiBMZWVtb3MgcG9yIHJlZiBsbyBxdWUgY2FtYmlhIGVuIGNhZGFcbiAgICogdXBkYXRlIChgbWVzc2FnZXNgLCBgc2VuZE1lc3NhZ2VgLCBsYXMgc3VnZXJlbmNpYXMgeWEgZWxlZ2lkYXMpIHBhcmEgcXVlIGVsXG4gICAqIGNhbGxiYWNrIHNlYSBlc3RhYmxlOiBzaSBubywgYWwgdGVybWluYXIgZWwgc3RyZWFtIHNlIHJlcGludGEgZWwgY2hhdCBlbnRlcm9cbiAgICogeSBjYWRhIE1haWFTdHJlYW1kb3duIHZ1ZWx2ZSBhIHBhcnNlYXIgc3UgbWFya2Rvd24uXG4gICAqL1xuICBjb25zdCBtZXNzYWdlc0RhdGFSZWYgPSB1c2VSZWYobWVzc2FnZXMpXG4gIG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50ID0gbWVzc2FnZXNcbiAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiA9IHVzZVJlZihzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKVxuICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnQgPSBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnRbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSBtZXNzYWdlc0RhdGFSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcbiAgICAgIGlmIChpc1JldHJ5U3VnZ2VzdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmV0cnlBdHRhY2htZW50cylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbZXZlbnQsIGFnZW50LCB0LCBhdXRoVXNlci5pZF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChcbiAgICAgICAgc2VuZE1lc3NhZ2VQcm94eVJlZi5jdXJyZW50LFxuICAgICAgICBzdG9wR2VuZXJhdGlvblByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgaXNXcml0aW5nXG4gICAgICApXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEF1dG9zY3JvbGwgbWllbnRyYXMgZWwgdGV4dG8gZGVsIHN0cmVhbSBjcmVjZS4gRWwgdGV4dG8gc2UgcGludGEgYWwgcml0bW9cbiAgLy8gZGUgYHVzZVNtb290aFN0cmVhbVRleHRgICh+NjBmcHMpLCBubyBhbCByaXRtbyBkZSBsbGVnYWRhIGRlIHRva2VucyBkZWxcbiAgLy8gYmFja2VuZDogcG9yIGVzbyBhY8OhIHVzYW1vcyB1biBsb29wIGRlIHJBRiBxdWUgY29tcGFyYSBgc2Nyb2xsSGVpZ2h0YFxuICAvLyBjb250cmEgZWwgw7psdGltbyB2YWxvciBvYnNlcnZhZG8geSBhanVzdGEgc29sbyBjdWFuZG8gY2FtYmlhLiBBc8OtIGVsXG4gIC8vIHNjcm9sbCBxdWVkYSBwZXJmZWN0YW1lbnRlIHNpbmNyb25pemFkbyBjb24gbGEgYW5pbWFjacOzbiBkZWwgdGV4dG8gc2luXG4gIC8vIGRlcGVuZGVyIGRlIGxhIGNhZGVuY2lhIGRlbCBzdHJlYW1pbmdTdG9yZS5cbiAgLy8gQ29uIGVsIHR1cm5vIGFuY2xhZG8gZXN0ZSBsb29wIHNvbG8gZW5jb2dlIGVsIHNwYWNlcjogbm8gdG9jYSBlbCBzY3JvbGwuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgIGxldCBsYXN0SGVpZ2h0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHN5bmNUdXJuU3BhY2UoKSkge1xuICAgICAgICAvLyBFbCBzY3JvbGwgbm8gc2UgbXVldmUsIHBlcm8gZWwgY29udGVuaWRvIGNyZWNlOiBsYSBmbGVjaGEgeSBlbFxuICAgICAgICAvLyBncmFkaWVudGUgZGUgYWJham8gdGllbmVuIHF1ZSBlbmNlbmRlcnNlIGFwZW5hcyBzZSBwYXNhIGRlbCB2aWV3cG9ydC5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ICE9PSBsYXN0SGVpZ2h0KSB7XG4gICAgICAgIGxhc3RIZWlnaHQgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIGlmICghdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gY3VycmVudEhlaWdodFxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIH1cbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gQWwgY29tZW56YXIgYSBlc3BlcmFyIGxhIHJlc3B1ZXN0YSBkZWwgYmFja2VuZCwgc2Nyb2xsIGluaWNpYWwgYWwgZm9uZG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50ICYmICFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IHNraXBJZlVzZXJTY3JvbGxpbmc6IHRydWUgfSlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICBjb25zdCBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIC8vIENhbWJpbyBkZSBjaGF0OiBlbCBhbmNsYSB5IGVsIHNwYWNlciBkZWwgdHVybm8gYW50ZXJpb3IgZGVqYW4gZGUgYXBsaWNhci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIGNsZWFyVHVyblNwYWNlXSlcblxuICAvLyBBbCBlbnZpYXIgdW4gbWVuc2FqZTogYW5jbGFtb3MgZWwgdHVybm8geSBoYWNlbW9zIGVsIMO6bmljbyBzY3JvbGwgZGVsIGNpY2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzKSByZXR1cm5cblxuICAgIGxldCBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgIGZvciAobGV0IGluZGV4ID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgICAgaWYgKG1lc3NhZ2VzW2luZGV4XT8uaWQ/LnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKSB7XG4gICAgICAgIHF1ZXN0aW9uSWQgPSBtZXNzYWdlc1tpbmRleF0uaWRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxdWVzdGlvbklkIHx8IHF1ZXN0aW9uSWQgPT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgIWluaXRpYWxDaGF0SWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBpZiAobGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID09PSBpbml0aWFsQ2hhdElkKSByZXR1cm5cbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2luaXRpYWxDaGF0SWQsIGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBtZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gbGFzdElkICE9PSBwcmV2SWQgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSBwcmV2TGVuXG4gICAgaWYgKCFpc05ld01lc3NhZ2UpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFR1cm5vIGFuY2xhZG86IG5pIGVsIHJlZW1wbGF6byBkZWwgcGxhY2Vob2xkZXIgcG9yIGVsIG1lbnNhamUgZmluYWwsIG5pIGxhXG4gICAgLy8gYXBhcmljacOzbiBkZWwgQXBwcm92YWxCb3ggbXVldmVuIGVsIHNjcm9sbC4gU29sbyBzZSBhanVzdGEgZWwgc3BhY2VyLlxuICAgIGlmIChhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3luY1R1cm5TcGFjZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZiwgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIEFsIGFicmlyL2NhcmdhciB1bmEgY29udmVyc2FjacOzbiBlbCBjb250ZW5lZG9yIHNlIHJlbW9udGEgKExvYWRlciDihpIgbGlzdGEpIGNvblxuICAvLyBzY3JvbGxUb3A9MC4gRm9yemFtb3MgaXIgYWwgZm9uZG8gYWwgdGVybWluYXIgbG9hZE1lc3NhZ2VzLCBzaW4gYWZlY3RhciBwYWdpbmFjacOzbiBoYWNpYSBhcnJpYmEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QganVzdEZpbmlzaGVkTG9hZGluZyA9IHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ICYmICFsb2FkaW5nTWVzc2FnZXNcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFqdXN0RmluaXNoZWRMb2FkaW5nIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA6IDApIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDApXG5cbiAgY29uc3Qgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkoe1xuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzOiBhY3RpdmVMb2FkaW5ncyB8fCB7fSxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzQ291bnQpLFxuICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgdCxcbiAgfSlcblxuICBjb25zdCBpc1Njcm9sbE9uUGFyZW50ID0gISFleHBhbmRlZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsQ2hhdElkKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSByZWFkTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZClcbiAgICBpZiAoc2Vzc2lvbj8uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gc2Vzc2lvbi5zY3JvbGxUb3BcbiAgICB9XG4gIH0sIFthdXRoVXNlci5pZCwgaW5pdGlhbENoYXRJZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPT0gbnVsbCB8fCAhbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9XG4gICAgISFsYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlLmlkKSAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgICAgICBjb25zdCB1c2VyTWVzc2FnZUZvclJldHJ5ID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkobWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgY2FuUmV0cnkgPVxuICAgICAgICAgICAgISF1c2VyTWVzc2FnZUZvclJldHJ5ICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmlzRXJyb3IgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsICYmXG4gICAgICAgICAgICAobWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkIHx8ICghbWVzc2FnZS5pc19jYW5jZWxsZWQgJiYgISF0dXJuSWQpKVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYW5kbGVSZXRyeT17Y2FuUmV0cnkgPyAoKSA9PiByZXRyeU1lc3NhZ2UobWVzc2FnZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICAvLyBTaSBlbCB1c3VhcmlvIG11ZXZlIGVsIHNjcm9sbCBhYm9ydGFtb3MgbGEgYW5pbWFjacOzbiB5IHNvbHRhbW9zIGVsIHR1cm5vOlxuICAgIC8vIG5vIGxlIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlclxuICAgICAgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fVxuICAgICAgb25XaGVlbD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICAgIG9uVG91Y2hTdGFydD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICA+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17aXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxTQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgPC9TQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17IWlzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzIwMjAyMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17MS41fVxuICAgICAgICAgICAgICAgIGQ9XCJNNiAuNzV2MTAuNU0uNzUgNiA2IDExLjI1IDExLjI1IDZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFFN0csU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFDcEYsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUczRCxTQUFz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
|
|
1116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsInBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmIiwic2Nyb2xsUGVyc2lzdFRpbWVyUmVmIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsInJldHJ5TWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwibmV4dFRvcEdyYWRpZW50IiwibmV4dEJvdHRvbUdyYWRpZW50Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkZGVsYXlNcyIsImRlbGF5TXMiLCJydW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxUdXJuU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsVG8iLCJ0b3AiLCJmcm9tIiwiZGlzdGFuY2UiLCJhYnMiLCJkdXJhdGlvbiIsInN0YXJ0ZWRBdCIsInBlcmZvcm1hbmNlIiwibm93Iiwic3RlcCIsInByb2dyZXNzIiwiZWFzZWQiLCJwb3ciLCJzZXRTcGFjZXJIZWlnaHQiLCJoZWlnaHQiLCJjbGVhclR1cm5TcGFjZSIsImRyYWluVHVyblNwYWNlIiwicmVtb3ZhYmxlIiwibWF4IiwicmVsZWFzZVR1cm5TcGFjZSIsImhhbmRsZVVzZXJTY3JvbGxJbnRlbnQiLCJtZWFzdXJlVHVybiIsInNwYWNlckVsIiwicXVlc3Rpb25FbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250YWluZXJUb3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJxdWVzdGlvblRvcCIsImNvbnRlbnRCb3R0b20iLCJ0dXJuSGVpZ2h0IiwicmVzZXJ2ZVR1cm5TcGFjZSIsIm1lYXN1cmVkIiwib2Zmc2V0IiwidGFyZ2V0U2Nyb2xsVG9wIiwic3luY1R1cm5TcGFjZSIsInJlc2VydmVkIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwiY2xlYXJUaW1lb3V0Iiwic2Nyb2xsU2Vzc2lvbklkIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwibWVzc2FnZXNEYXRhUmVmIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiIsInRyaW0iLCJjdXJyZW50TWVzc2FnZXMiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsInJhZklkIiwidGljayIsImxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmIiwiX21lc3NhZ2VzJGluZGV4IiwibGFzdE1lc3NhZ2VJZFJlZiIsImxhc3RNZXNzYWdlc0xlbmd0aFJlZiIsIl9tZXNzYWdlcyRpZCIsIl9tZXNzYWdlcyIsIl9sYXN0TWVzc2FnZSRpZCIsImxhc3RNZXNzYWdlIiwibGFzdElkIiwicHJldklkIiwicHJldkxlbiIsImlzTmV3TWVzc2FnZSIsImlzQXRCb3R0b20iLCJoYXNJbml0aWFsTWVzc2FnZSIsImlzQXBwcm92YWwiLCJpc0Fuc3dlck9yUXVlc3Rpb24iLCJfbWVzc2FnZXMkaWQyIiwiX21lc3NhZ2VzMiIsImp1c3RGaW5pc2hlZExvYWRpbmciLCJhdHRhY2htZW50c0NvdW50Iiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJoYXNBdHRhY2htZW50cyIsImlzU2Nyb2xsT25QYXJlbnQiLCJzZXNzaW9uIiwiZXhwYW5kZWRSZWYiLCJzYXZlZFNjcm9sbFRvcCIsImZpbGwiLCJoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IiLCJtZXNzYWdlc0NvbnRlbnQiLCJ0ZXh0IiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkcHJvamVjdCIsIl9tZXNzYWdlJGlkIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwicHJvamVjdCIsIm1lc3NhZ2VGZWVkYmFjayIsIndhc0hlbHBmdWwiLCJUSFVNQlNfVVAiLCJUSFVNQlNfRE9XTiIsIm1lc3NhZ2VLZXkiLCJ0dXJuSWQiLCJ1c2VyTWVzc2FnZUZvclJldHJ5IiwiY2FuUmV0cnkiLCJpc19jYW5jZWxsZWQiLCJrZXkiLCJyZWYiLCIkc2Nyb2xsT25QYXJlbnQiLCJvbldoZWVsIiwib25Ub3VjaFN0YXJ0IiwiJHNob3ciLCJvblNjcm9sbCIsIiR2aXNpYmxlIiwieG1sbnMiLCJ3aWR0aCIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgeyBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcbmltcG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nVGltZWxpbmUnXG5pbXBvcnQgeyBTQ1RpbWVsaW5lSW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2suc3R5bGVzJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBwYXRjaE1haWFQYW5lbFNlc3Npb24sIHJlYWRNYWlhUGFuZWxTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDU2Nyb2xsSWNvblN3YXAsXG4gIFNDV3JpdGluZ0RvdHMsXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ1R1cm5TcGFjZXIsXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NNZXNzYWdlSXRlbVdyYXBwZXIsXG4gIFNDTWVzc2FnZUl0ZW1Jbm5lcixcbiAgU0NBdHRhY2htZW50c1JvdyxcbiAgU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4sXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRUb3AsXG4gIFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSxcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBFbnRpdHlMaW5rQ3VzdG9tTGluaywgZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnRpdHlMaW5rUmVuZGVyJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICB9XG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGxcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBvblNlbmRNZXNzYWdlUmVhZHk/OiAoXG4gICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHZvaWQsXG4gICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgaXNXcml0aW5nOiBib29sZWFuXG4gICkgPT4gdm9pZFxuICBpc0Rpc2FibGVkPzogYm9vbGVhblxuICBvblNjcm9sbFRvQm90dG9tPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBBbCBhbmNsYXIgZWwgdHVybm8sIGxhIHByZWd1bnRhIG5vIHNlIHBlZ2EgYWwgYm9yZGUgc3VwZXJpb3I6IGRlamFtb3MgYXNvbWFyXG4gKiBsYSBjb2xhIGRlbCBtZW5zYWplIGFudGVyaW9yIHBhcmEgbm8gcGVyZGVyIGVsIGhpbG8gZGUgbGEgY29udmVyc2FjacOzbi5cbiAqIFJlbGF0aXZvIGFsIHZpZXdwb3J0IHBvcnF1ZSB1biB2YWxvciBmaWpvIHNlIGNvbWUgZGVtYXNpYWRvIGVuIHBhbnRhbGxhcyBjb3J0YXMuXG4gKi9cbmNvbnN0IHR1cm5BbmNob3JPZmZzZXQgPSAodmlld3BvcnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciA9PiBNYXRoLm1pbih2aWV3cG9ydEhlaWdodCAqIDAuMTgsIDIwMClcblxuLyoqXG4gKiBEdXJhY2nDs24gZGVsIHNjcm9sbCBhbmltYWRvOiBiYXNlIHkgdG9wZSBwYXJhIHJlY29ycmlkb3MgbGFyZ29zLCBwYXJhIHF1ZSB1blxuICogc2FsdG8gZGUgdmFyaWFzIHBhbnRhbGxhcyBubyBzZSBzaWVudGEgdW4gbGF0aWdhem8uXG4gKi9cbmNvbnN0IFRVUk5fU0NST0xMX0RVUkFUSU9OX01TID0gNjAwXG5jb25zdCBUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgPSA4MDBcblxuLyoqIERpc3RhbmNpYSBhIHBhcnRpciBkZSBsYSBjdWFsIGxhIGR1cmFjacOzbiB5YSBlc3TDoSBlbiBzdSB0b3BlLiAqL1xuY29uc3QgVFVSTl9TQ1JPTExfTE9OR19ESVNUQU5DRV9QWCA9IDEyMDBcblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGhhbmRsZVJldHJ5PzogKCkgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBvblJldHJ5PzogKCkgPT4gdm9pZFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhcHJvcHMuaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgISFwcm9wcy5vblJldHJ5KSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogcHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAgICAgb25SZXRyeT17cHJvcHMub25SZXRyeX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgaGFuZGxlUmV0cnksXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IHJlYXNvbmluZ1RyYWNlID0gdXNlUmVhc29uaW5nVHJhY2UoaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnKVxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID1cbiAgICBpc0Fzc2lzdGFudCAmJiBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgaWQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCAmJiAhc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhIXN0cmVhbUFjdGl2aXR5XG5cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IHNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2Nyb2xsVG9wID4gMVxuICAgIGlmIChzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dFRvcEdyYWRpZW50KSB7XG4gICAgICBzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRUb3BHcmFkaWVudFxuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KG5leHRUb3BHcmFkaWVudClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Qm90dG9tR3JhZGllbnQgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiAxXG4gICAgaWYgKHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0Qm90dG9tR3JhZGllbnQpIHtcbiAgICAgIHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dEJvdHRvbUdyYWRpZW50XG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQobmV4dEJvdHRvbUdyYWRpZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBTb2xvIHNlIHVzYSBhbCBhYnJpci9jYXJnYXIgdW4gY2hhdFxuICAgKiBvIGN1YW5kbyBlbCB1c3VhcmlvIHBpZGUgaXIgYWwgZm9uZG86IG51bmNhIGR1cmFudGUgZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBjYW5jZWxUdXJuU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPT09IG51bGwpIHJldHVyblxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWFkbyBjb24gZWFzaW5nIHByb3BpbzogYGJlaGF2aW9yOiAnc21vb3RoJ2Agbm8gcGVybWl0ZSByZWd1bGFyIGxhXG4gICAqIGR1cmFjacOzbiB5IGVsIHNhbHRvIGFsIGFuY2xhciBlbCB0dXJubyBxdWVkYSBkZW1hc2lhZG8gc2Vjby5cbiAgICovXG4gIGNvbnN0IGFuaW1hdGVTY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICh0b3A6IG51bWJlcikgPT4ge1xuICAgICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgY29uc3QgZnJvbSA9IGVsLnNjcm9sbFRvcFxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0b3AgLSBmcm9tXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2UpIDwgMSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID1cbiAgICAgICAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAgICAgICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICAgICAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIC8vIGVhc2VPdXRFeHBvICh+Y3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkpOiBlbXBpZXphIGEgZnJlbmFyIG11Y2hvXG4gICAgICAgIC8vIGFudGVzIHF1ZSBlbCBxdWludCB5IGF0ZXJyaXphIHNpbiBjb3J0ZSBwZXJjZXB0aWJsZS5cbiAgICAgICAgY29uc3QgZWFzZWQgPSBwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoTWF0aC5hYnMoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBuZXh0KSA8IDEpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmVtb3ZhYmxlID0gTWF0aC5tYXgoMCwgZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0IC0gZWwuc2Nyb2xsVG9wKVxuICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHJlbW92YWJsZSkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ICYmIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IDw9IDApIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICBjb25zdCBtZWFzdXJlVHVybiA9IHVzZUNhbGxiYWNrKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBzcGFjZXJFbCA9IHNwYWNlckVsUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsIHx8ICFzcGFjZXJFbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHF1ZXN0aW9uRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtbWVzc2FnZS1pZD1cIiR7cXVlc3Rpb25JZH1cIl1gKVxuICAgIGlmICghcXVlc3Rpb25FbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgIGNvbnN0IHF1ZXN0aW9uVG9wID0gcXVlc3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICBjb25zdCBjb250ZW50Qm90dG9tID0gc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0OiBjb250ZW50Qm90dG9tIC0gcXVlc3Rpb25Ub3AgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbiAgICAgIC8vIENoYXQgcmVjacOpbiBpbmljaWFkbyBvIGNvbnZlcnNhY2nDs24gcXVlIGHDum4gZW50cmEgZW4gcGFudGFsbGE6IGxhXG4gICAgICAvLyBwcmVndW50YSB5YSBlc3TDoSBhcnJpYmEsIG5vIGhheSBuYWRhIHF1ZSBzdWJpciBuaSBxdWUgcmVzZXJ2YXIuXG4gICAgICBpZiAodGFyZ2V0U2Nyb2xsVG9wIDw9IGVsLnNjcm9sbFRvcCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXJ2YW1vcyBsbyBtw61uaW1vIHBhcmEgcXVlIGB0YXJnZXRTY3JvbGxUb3BgIHNlYSBhbGNhbnphYmxlLiBFbFxuICAgICAgLy8gc3BhY2VyIHNlIGluc2VydGEgZGUgdW5hIChlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvIHZpc2libGUpO1xuICAgICAgLy8gbG8gw7puaWNvIHF1ZSBzZSBwZXJjaWJlIGVzIGVsIGRlc3BsYXphbWllbnRvIGFuaW1hZG8uXG4gICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5tYXgoMCwgZWwuY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldCkpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8odGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodClcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQgLSBtZWFzdXJlZC50dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5taW4oc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQsIHJlc2VydmVkKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSwgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIC8vIE1pc21hIGN1cnZhIHkgZHVyYWNpw7NuIHF1ZSBlbCBhbmNsYWplIGRlbCB0dXJubzogZWwgYHNtb290aGAgbmF0aXZvIGZyZW5hIHNlY28uXG4gICAgYW5pbWF0ZVNjcm9sbFRvKGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIC8vIFR1cm5vIHlhIGxpYmVyYWRvIHBvciBlbCB1c3VhcmlvOiBzZWd1aW1vcyBkZXZvbHZpZW5kbyBlbCBhbHRvXG4gICAgICAgIC8vIHJlc2VydmFkbyBtaWVudHJhcyBiYWphLCBwYXJhIHF1ZSBhbCBsbGVnYXIgYWwgw7psdGltbyBtZW5zYWplIG5vXG4gICAgICAgIC8vIHF1ZWRlIGh1ZWNvIGRlYmFqby5cbiAgICAgICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSBkcmFpblR1cm5TcGFjZSgpXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuXG4gICAgICAgIGlmIChpbml0aWFsQ2hhdElkICYmIHNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20gJiYgb25TY3JvbGxUb0JvdHRvbSkge1xuICAgICAgICAgIG9uU2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGNvbnRhaW5lcilcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYXV0aFVzZXIuaWQsIGRyYWluVHVyblNwYWNlLCBoYW5kbGVTY3JvbGwsIGluaXRpYWxDaGF0SWQsIG9uU2Nyb2xsVG9Cb3R0b20sIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcbiAgY29uc3Qgc2VuZE1lc3NhZ2VQcm94eVJlZiA9IHVzZVJlZihcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblByb3h5UmVmID0gdXNlUmVmKCgpID0+IHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQoKSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBtZXNzYWdlc0RhdGFSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcbiAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1xuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gTWllbnRyYXMgZWwgc3RyZWFtIGNyZWNlOiBlbmNvZ2VyIGVsIHNwYWNlciBkZWwgdHVybm8gYW5jbGFkbyB5XG4gIC8vIGFjdHVhbGl6YXIgZmxlY2hhL2dyYWRpZW50ZXMuIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3luY1R1cm5TcGFjZSgpXG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTWllbnRyYXMgZWwgYWdlbnRlIHJlc3BvbmRlIG5vIGVtcHVqYW1vcyBlbCBzY3JvbGw6IGVsIHVzdWFyaW8gc2UgcXVlZGFcbiAgICAvLyBkb25kZSBlc3TDoSB5IHVzYSBlbCBib3TDs24gc2kgcXVpZXJlIGlyIGFsIGZvbmRvLlxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgfSwgW1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBzY3JvbGxUb0JvdHRvbVJhZixcbiAgICBzeW5jVHVyblNwYWNlLFxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLFxuICBdKVxuXG4gIC8vIEFsIGFicmlyL2NhcmdhciB1bmEgY29udmVyc2FjacOzbiBlbCBjb250ZW5lZG9yIHNlIHJlbW9udGEgKExvYWRlciDihpIgbGlzdGEpIGNvblxuICAvLyBzY3JvbGxUb3A9MC4gRm9yemFtb3MgaXIgYWwgZm9uZG8gYWwgdGVybWluYXIgbG9hZE1lc3NhZ2VzLCBzaW4gYWZlY3RhciBwYWdpbmFjacOzbiBoYWNpYSBhcnJpYmEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QganVzdEZpbmlzaGVkTG9hZGluZyA9IHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ICYmICFsb2FkaW5nTWVzc2FnZXNcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFqdXN0RmluaXNoZWRMb2FkaW5nIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5pdGlhbENoYXRJZCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uID0gcmVhZE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQpXG4gICAgaWYgKHNlc3Npb24/LnNjcm9sbFNlc3Npb25JZCA9PT0gaW5pdGlhbENoYXRJZCAmJiB0eXBlb2Ygc2Vzc2lvbi5zY3JvbGxUb3AgPT09ICdudW1iZXInICYmIHNlc3Npb24uc2Nyb2xsVG9wID4gMCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IHNlc3Npb24uc2Nyb2xsVG9wXG4gICAgfVxuICB9LCBbYXV0aFVzZXIuaWQsIGluaXRpYWxDaGF0SWRdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID09IG51bGwgfHwgIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXhwYW5kZWRSZWYuY3VycmVudCAhPT0gZXhwYW5kZWQgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gc2F2ZWRTY3JvbGxUb3BcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9XG4gIH0sIFtleHBhbmRlZF0pXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiAoXG4gICAgICA8RmFkZSBmaWxsPlxuICAgICAgICA8TG9hZGVyIC8+XG4gICAgICA8L0ZhZGU+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICBjb25zdCBoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgPVxuICAgICEhbGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChsYXN0TWVzc2FnZS5pZCkgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSBtZXNzYWdlLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgbWVzc2FnZS51c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAgICAgICAgIGNvbnN0IGlzTGFzdE1lc3NhZ2UgPSBpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgaXNBc3Npc3RhbnRNZXNzYWdlICYmIGlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtZXNzYWdlLmlkKVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICAgICAgICAgIC8vIE5vIGZpbHRyYXIgZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nOiBzdSB0ZXh0byB2aXZlXG4gICAgICAgICAgLy8gZW4gZWwgc3RyZWFtaW5nU3RvcmUgeSBgbWVzc2FnZS5tZXNzYWdlYCBlcyAnJyBoYXN0YSBlbCBjb21wbGV0ZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhKG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCkgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLnByb2plY3Q/Lm5hbWUgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgdXNlck1lc3NhZ2VGb3JSZXRyeSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KG1lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IGNhblJldHJ5ID1cbiAgICAgICAgICAgICEhdXNlck1lc3NhZ2VGb3JSZXRyeSAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5pc0Vycm9yICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbCAmJlxuICAgICAgICAgICAgKG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAoIW1lc3NhZ2UuaXNfY2FuY2VsbGVkICYmICEhdHVybklkKSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFuZGxlUmV0cnk9e2NhblJldHJ5ID8gKCkgPT4gcmV0cnlNZXNzYWdlKG1lc3NhZ2UpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICBzdHJlYW1BY3Rpdml0eT17aXNTdHJlYW1pbmcgPyBzdHJlYW1Mb2FkaW5nRGlzcGxheSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHshaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yICYmIHN0cmVhbUxvYWRpbmdEaXNwbGF5ICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX0gLz5cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgICB7LyogRXNwYWNpbyBxdWUgbGUgcGVybWl0ZSBhIGxhIHByZWd1bnRhIHN1YmlyIGFsIHRvcGUuIEFsdHVyYSBtYW5lamFkYVxuICAgICAgICAgIGltcGVyYXRpdmFtZW50ZSBkZXNkZSBgc2V0U3BhY2VySGVpZ2h0YDsgYXJyYW5jYSBlbiAwLiAqL31cbiAgICAgIDxTQ1R1cm5TcGFjZXIgcmVmPXtzcGFjZXJFbFJlZn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgLy8gU2kgZWwgdXN1YXJpbyBtdWV2ZSBlbCBzY3JvbGwgYWJvcnRhbW9zIGxhIGFuaW1hY2nDs24geSBzb2x0YW1vcyBlbCB0dXJubzpcbiAgICAvLyBubyBsZSBwZWxlYW1vcyBlbCBjb250cm9sIGRlbCBjb250ZW5lZG9yLlxuICAgIDxTQ01lc3NhZ2VzT3V0ZXJcbiAgICAgICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH1cbiAgICAgIG9uV2hlZWw9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgICBvblRvdWNoU3RhcnQ9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgPlxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PnttZXNzYWdlc0NvbnRlbnR9PC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfSAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfT5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9e2lzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8U0NXcml0aW5nRG90cz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgIDwvU0NXcml0aW5nRG90cz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9eyFpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyMDIwMjBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezEuNX1cbiAgICAgICAgICAgICAgICBkPVwiTTYgLjc1djEwLjVNLjc1IDYgNiAxMS4yNSAxMS4yNSA2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBRTdHLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFHM0QsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0Msc0JBQXNCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUUvRixTQUFTQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ2hFLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsY0FBYyxRQUFRLDhDQUE4QztBQUM3RSxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBRXhFLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFDckQsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsK0JBQStCLFFBQVEsbURBQW1EO0FBQ25HLFNBQVNDLGlCQUFpQixRQUFRLDhDQUE4QztBQUNoRixTQUFTQyxtQkFBbUIsUUFBUSxrREFBa0Q7QUFFdEYsU0FBU0MsK0JBQStCLEVBQUVDLDJCQUEyQixRQUFRLHVDQUF1QztBQUNwSCxTQUFTQyxrQkFBa0IsRUFBRUMsdUJBQXVCLFFBQVEsZ0NBQWdDO0FBQzVGLFNBQVNDLGlCQUFpQixRQUFRLGtDQUFrQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLElBQUksUUFBUSxrQkFBa0I7QUFDdkMsU0FBU0MscUJBQXFCLEVBQUVDLG9CQUFvQixRQUFRLDRDQUE0QztBQUl4RyxTQUFTQyxlQUFlLEVBQUVDLGdCQUFnQixFQUFFQyxzQkFBc0IsRUFBRUMsdUJBQXVCLFFBQVEsVUFBVTtBQUM3RyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBQ3BELFNBQ0VDLG1CQUFtQixFQUNuQkMsb0JBQW9CLEVBQ3BCQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFlBQVksRUFDWkMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyx1QkFBdUIsRUFDdkJDLHFCQUFxQixFQUNyQkMsd0JBQXdCLFFBQ25CLGFBQWE7QUFDcEIsU0FBU0MsUUFBUSxRQUFRLG9DQUFvQztBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFJbEUsU0FBU0Msb0JBQW9CLEVBQUVDLDZCQUE2QixRQUFRLGlDQUFpQztBQUNyRyxTQUFTQyxpQkFBaUIsUUFBUSxxQkFBcUI7QUFDdkQsU0FBU0Msd0JBQXdCLFFBQVEsNEJBQTRCO0FBQ3JFLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyxtQkFBbUIsUUFBUSxtQ0FBbUM7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQW1DdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlDLGNBQXNCO0VBQUEsT0FBYUMsSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQUE7O0FBRWpHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUcsdUJBQXVCLEdBQUcsR0FBRztBQUNuQyxJQUFNQywyQkFBMkIsR0FBRyxHQUFHOztBQUV2QztBQUNBLElBQU1DLDRCQUE0QixHQUFHLElBQUk7QUFnQ3pDLElBQU1DLGNBQXVDLEdBQUcsU0FBMUNBLGNBQXVDQSxDQUFBQyxJQUFBLEVBQThDO0VBQUEsSUFBeENDLGFBQWEsR0FBQUQsSUFBQSxDQUFiQyxhQUFhO0lBQUVDLFFBQVEsR0FBQUYsSUFBQSxDQUFSRSxRQUFRO0lBQUtDLEtBQUssR0FBQUMsd0JBQUEsQ0FBQUosSUFBQSxFQUFBSyxTQUFBO0VBQ2xGLElBQU1DLGdCQUFnQixHQUFHTCxhQUFhLEdBQUc5QyxlQUFlLEdBQUdDLGdCQUFnQjtFQUMzRSxvQkFBTytCLElBQUEsQ0FBQ21CLGdCQUFnQixFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBS0osS0FBSztJQUFBRCxRQUFBLEVBQUdBO0VBQVEsRUFBbUIsQ0FBQztBQUNuRSxDQUFDO0FBRUQsSUFBTU0scUJBQXFELEdBQUcsU0FBeERBLHFCQUFxREEsQ0FBQUMsS0FBQSxFQUFvQztFQUFBLElBQTlCUixhQUFhLEdBQUFRLEtBQUEsQ0FBYlIsYUFBYTtJQUFLRSxLQUFLLEdBQUFDLHdCQUFBLENBQUFLLEtBQUEsRUFBQUMsVUFBQTtFQUN0RixJQUFNQyx1QkFBdUIsR0FBR1YsYUFBYSxHQUFHNUMsc0JBQXNCLEdBQUdDLHVCQUF1QjtFQUNoRyxvQkFBTzZCLElBQUEsQ0FBQ3dCLHVCQUF1QixFQUFBSixhQUFBLEtBQUtKLEtBQUssQ0FBRyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTUyxjQUFjQSxDQUFBQyxLQUFBLEVBTXBCO0VBQUEsSUFMREMsT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFGLEtBQUEsQ0FBbEJFLGtCQUFrQjtFQUtsQixJQUFBQyxTQUFBLEdBQTRDN0YsUUFBUSxDQUFpQixJQUFJLENBQUM7SUFBQThGLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQW5FRyxjQUFjLEdBQUFGLFVBQUE7SUFBRUcsaUJBQWlCLEdBQUFILFVBQUE7RUFFeEMsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlDLE1BQWUsRUFBSztJQUN4QyxJQUFJSCxjQUFjLEVBQUU7SUFDcEJDLGlCQUFpQixDQUFDRSxNQUFNLENBQUM7SUFDekJQLGtCQUFrQixDQUFDTyxNQUFNLENBQUM7RUFDNUIsQ0FBQztFQUVELG9CQUNFbkMsSUFBQSxDQUFDbkIsYUFBYTtJQUFBa0MsUUFBQSxFQUNYLENBQUNZLE9BQU8sSUFBSSxFQUFFLEVBQUVTLEdBQUcsQ0FBQyxVQUFBRCxNQUFNO01BQUEsb0JBQ3pCbkMsSUFBQSxDQUFDbEIsWUFBWTtRQUNYdUQsYUFBYSxFQUFFLENBQUMsQ0FBQ0wsY0FBZTtRQUNoQ00sT0FBTyxFQUFFLENBQUMsQ0FBQ04sY0FBYyxJQUFJLENBQUFBLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFTyxFQUFFLE1BQUtKLE1BQU0sQ0FBQ0ksRUFBRztRQUM5REMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRTixZQUFZLENBQUNDLE1BQU0sQ0FBQztRQUFBLENBQUM7UUFBQXBCLFFBQUEsRUFHbkNvQixNQUFNLENBQUNNO01BQUksR0FGUE4sTUFBTSxDQUFDSSxFQUdBLENBQUM7SUFBQSxDQUNoQjtFQUFDLENBQ1csQ0FBQztBQUVwQjs7QUFFQTtBQUNBLElBQU1HLG9CQUFvQixnQkFBRy9HLElBQUksQ0FDL0IsVUFBQ3FGLEtBa0JBLEVBQUs7RUFBQSxJQUFBMkIscUJBQUEsRUFBQUMsa0JBQUE7RUFDSjtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxhQUFhLEdBQUc3RixtQkFBbUIsQ0FBQ2dFLEtBQUssQ0FBQzhCLFdBQVcsR0FBRzlCLEtBQUssQ0FBQytCLFNBQVMsR0FBRyxJQUFJLENBQUM7RUFDckYsSUFBTUMsT0FBTyxHQUFHaEMsS0FBSyxDQUFDOEIsV0FBVyxHQUFHRCxhQUFhLEdBQUc3QixLQUFLLENBQUNpQyxPQUFPO0VBQ2pFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxRQUFRLEdBQ1osT0FBT0MsTUFBTSxLQUFLLFdBQVcsR0FDeEJBLE1BQU0sR0FPUCxDQUFDLENBQUM7RUFDUixJQUFNQyxXQUFXLEdBQUdyRyxtQkFBbUIsQ0FBQ2lHLE9BQU8sRUFBQTVCLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtJQUM3Q2lDLE9BQU8sRUFBRSxDQUFDLENBQUNyQyxLQUFLLENBQUM4QixXQUFXO0lBQzVCUSxnQkFBZ0IsRUFBRSxFQUFFO0lBQ3BCQyxrQkFBa0IsRUFBRTtFQUFJLEdBQ3BCTCxRQUFRLENBQUNNLFdBQVcsSUFBSSxJQUFJLElBQUk7SUFBRUMsV0FBVyxFQUFFUCxRQUFRLENBQUNNO0VBQVksQ0FBQyxHQUNyRU4sUUFBUSxDQUFDUSxXQUFXLElBQUksSUFBSSxJQUFJO0lBQUVDLGtCQUFrQixFQUFFVCxRQUFRLENBQUNRO0VBQVksQ0FBQyxHQUM1RVIsUUFBUSxDQUFDVSxjQUFjLElBQUksSUFBSSxJQUFJO0lBQUVDLGNBQWMsRUFBRVgsUUFBUSxDQUFDVTtFQUFlLENBQUMsR0FDOUVWLFFBQVEsQ0FBQ1ksZUFBZSxJQUFJLElBQUksSUFBSTtJQUFFQyxjQUFjLEVBQUViLFFBQVEsQ0FBQ1k7RUFBZ0IsQ0FBQyxHQUNoRlosUUFBUSxDQUFDYyxjQUFjLElBQUksSUFBSSxJQUFJO0lBQUVDLFFBQVEsRUFBRWYsUUFBUSxDQUFDYztFQUFlLENBQUMsQ0FDN0UsQ0FBQztFQUNGLElBQU1FLHlCQUF5QixJQUFBdkIscUJBQUEsR0FBRzNCLEtBQUssQ0FBQ21ELG1CQUFtQixjQUFBeEIscUJBQUEsdUJBQXpCQSxxQkFBQSxDQUEyQnlCLE9BQU87RUFFcEUsSUFBSSxDQUFDaEIsV0FBVyxJQUFJLENBQUNwQyxLQUFLLENBQUM4QixXQUFXLEVBQUUsT0FBTyxJQUFJO0VBQ25ELElBQU11QixXQUFXLEdBQUczSCxnQkFBZ0IsQ0FBQzBHLFdBQVcsQ0FBQztFQUNqRCxJQUFNa0IsWUFBWSxHQUFHRCxXQUFXLEdBQUc1SCxzQkFBc0IsQ0FBQzJHLFdBQVcsQ0FBQyxHQUFHLElBQUk7RUFDN0Usb0JBQ0VoRCxLQUFBLENBQUFGLFNBQUE7SUFBQWEsUUFBQSxnQkFDRWYsSUFBQSxDQUFDM0IsbUJBQW1CO01BQ2xCeUMsYUFBYSxFQUFFRSxLQUFLLENBQUNGLGFBQWM7TUFDbkN5RCxtQkFBbUIsRUFBRXZELEtBQUssQ0FBQ3VELG1CQUFvQjtNQUMvQ0MsU0FBUyxFQUFFL0UsNkJBQTZCLENBQUMyRCxXQUFXLENBQUU7TUFBQXJDLFFBQUEsRUFFckRzRCxXQUFXLElBQUlDLFlBQVk7TUFBQTtNQUMxQjtNQUNBdEUsSUFBQTtRQUFNeUUsS0FBSyxFQUFFO1VBQUVDLE9BQU8sRUFBRTtRQUFTLENBQUU7UUFBQTNELFFBQUEsRUFBRXVEO01BQVksQ0FBTyxDQUFDO01BQUE7TUFFekQ7TUFDQXRFLElBQUEsQ0FBQ3pELGNBQWM7UUFDYm9JLE9BQU8sRUFBQyxNQUFNO1FBQ2Q3RCxhQUFhLEVBQUVFLEtBQUssQ0FBQ0YsYUFBYztRQUNuQ3lELG1CQUFtQixFQUFFdkQsS0FBSyxDQUFDdUQsbUJBQW9CO1FBQy9DSyxVQUFVLEVBQUU7VUFBRUMsQ0FBQyxFQUFFckY7UUFBcUIsQ0FBdUM7UUFDN0VzRixXQUFXLEVBQUUsQ0FBQyxDQUFDOUQsS0FBSyxDQUFDOEIsV0FBWTtRQUFBL0IsUUFBQSxFQUVoQ3FDO01BQVcsQ0FDRTtJQUNqQixDQUNrQixDQUFDLEVBQ3JCcEMsS0FBSyxDQUFDK0QsV0FBVyxJQUNoQixDQUFDL0QsS0FBSyxDQUFDZ0UsT0FBTyxJQUNkLENBQUNoRSxLQUFLLENBQUNpRSxRQUFRLElBQ2YsQ0FBQ2pFLEtBQUssQ0FBQzhCLFdBQVcsS0FDakIsQ0FBQzlCLEtBQUssQ0FBQ3VELG1CQUFtQixJQUFJLENBQUMsQ0FBQ3ZELEtBQUssQ0FBQ2tFLE9BQU8sQ0FBQyxpQkFDN0NsRixJQUFBLENBQUM1QixlQUFlO01BQ2QrRyxPQUFPLEVBQUUvQixXQUFZO01BQ3JCZ0MsT0FBTyxFQUFFcEUsS0FBSyxDQUFDdUQsbUJBQW1CLEdBQUdjLFNBQVMsR0FBR3JFLEtBQUssQ0FBQ29FLE9BQVE7TUFDL0RFLGNBQWMsRUFBRXRFLEtBQUssQ0FBQ3VELG1CQUFtQixHQUFHYyxTQUFTLEdBQUdyRSxLQUFLLENBQUN1RSxtQkFBb0I7TUFDbEZDLGVBQWUsRUFBRXhFLEtBQUssQ0FBQ3dFLGVBQWdCO01BQ3ZDTixPQUFPLEVBQUVsRSxLQUFLLENBQUNrRTtJQUFRLENBQ3hCLENBQ0YsRUFDRmxFLEtBQUssQ0FBQytELFdBQVcsSUFDaEIsQ0FBQy9ELEtBQUssQ0FBQ3VELG1CQUFtQixJQUMxQixDQUFDdkQsS0FBSyxDQUFDaUUsUUFBUSxLQUNkLENBQUNqRSxLQUFLLENBQUNnRSxPQUFPLE1BQUFwQyxrQkFBQSxHQUFJNUIsS0FBSyxDQUFDeUUsV0FBVyxjQUFBN0Msa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQjhDLE1BQU0sRUFBQyxpQkFDM0MxRixJQUFBLENBQUNOLGlCQUFpQjtNQUNoQitGLFdBQVcsRUFBRXpFLEtBQUssQ0FBQ3lFLFdBQVcsSUFBSSxFQUFHO01BQ3JDRSxrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFFQyxVQUFVO1FBQUEsT0FBSTVFLEtBQUssQ0FBQzZFLHFCQUFxQixDQUFDN0UsS0FBSyxDQUFDK0IsU0FBUyxFQUFFNkMsVUFBVSxDQUFDO01BQUEsQ0FBQztNQUMzRkUsUUFBUSxFQUFFOUUsS0FBSyxDQUFDK0UsbUJBQW9CO01BQ3BDQyxNQUFNLEVBQUUsQ0FBQyxDQUFDaEYsS0FBSyxDQUFDOEIsV0FBVyxJQUFJLENBQUM5QixLQUFLLENBQUNpRixhQUFhLElBQUksQ0FBQyxDQUFDakYsS0FBSyxDQUFDK0U7SUFBb0IsQ0FDcEYsQ0FDRixFQUNGL0UsS0FBSyxDQUFDK0QsV0FBVyxJQUNoQixDQUFDL0QsS0FBSyxDQUFDZ0UsT0FBTyxJQUNkLENBQUNoRSxLQUFLLENBQUN1RCxtQkFBbUIsSUFDMUIsQ0FBQ3ZELEtBQUssQ0FBQ2lFLFFBQVEsSUFDZixDQUFDLENBQUNmLHlCQUF5QixpQkFDekJsRSxJQUFBLENBQUNMLHdCQUF3QjtNQUN2QnlFLE9BQU8sRUFBRUYseUJBQTBCO01BQ25DNEIsUUFBUSxFQUFFOUUsS0FBSyxDQUFDK0UsbUJBQW9CO01BQ3BDQyxNQUFNLEVBQUUsQ0FBQyxDQUFDaEYsS0FBSyxDQUFDOEIsV0FBVyxJQUFJLENBQUM5QixLQUFLLENBQUNpRixhQUFhLElBQUksQ0FBQyxDQUFDakYsS0FBSyxDQUFDK0U7SUFBb0IsQ0FDcEYsQ0FDRjtFQUFBLENBQ0gsQ0FBQztBQUVQLENBQ0YsQ0FBQztBQUVELElBQU1HLFdBQVcsZ0JBQUd2SyxJQUFJLENBQUMsVUFBQ3FGLEtBQXVCLEVBQUs7RUFBQSxJQUFBbUYsZ0JBQUEsRUFBQUMscUJBQUE7RUFDcEQsSUFDRTdELEVBQUUsR0F3QkF2QixLQUFLLENBeEJQdUIsRUFBRTtJQUNGOEQsSUFBSSxHQXVCRnJGLEtBQUssQ0F2QlBxRixJQUFJO0lBQ0pwRCxPQUFPLEdBc0JMakMsS0FBSyxDQXRCUGlDLE9BQU87SUFDUEgsV0FBVyxHQXFCVDlCLEtBQUssQ0FyQlA4QixXQUFXO0lBQ1hrQyxPQUFPLEdBb0JMaEUsS0FBSyxDQXBCUGdFLE9BQU87SUFDUHNCLFFBQVEsR0FtQk50RixLQUFLLENBbkJQc0YsUUFBUTtJQUNSM0UsT0FBTyxHQWtCTFgsS0FBSyxDQWxCUFcsT0FBTztJQUNQNEUsZUFBZSxHQWlCYnZGLEtBQUssQ0FqQlB1RixlQUFlO0lBQ2YzRSxrQkFBa0IsR0FnQmhCWixLQUFLLENBaEJQWSxrQkFBa0I7SUFDbEJpRSxxQkFBcUIsR0FlbkI3RSxLQUFLLENBZlA2RSxxQkFBcUI7SUFDckJQLGNBQWMsR0FjWnRFLEtBQUssQ0FkUHNFLGNBQWM7SUFDZGtCLHNCQUFzQixHQWFwQnhGLEtBQUssQ0FiUHdGLHNCQUFzQjtJQUN0QmhCLGVBQWUsR0FZYnhFLEtBQUssQ0FaUHdFLGVBQWU7SUFDZmlCLFdBQVcsR0FXVHpGLEtBQUssQ0FYUHlGLFdBQVc7SUFDWEMsSUFBSSxHQVVGMUYsS0FBSyxDQVZQMEYsSUFBSTtJQUNKdEIsT0FBTyxHQVNMcEUsS0FBSyxDQVRQb0UsT0FBTztJQUNQdUIsV0FBVyxHQVFUM0YsS0FBSyxDQVJQMkYsV0FBVztJQUNYMUIsUUFBUSxHQU9OakUsS0FBSyxDQVBQaUUsUUFBUTtJQUNSMkIsY0FBYyxHQU1aNUYsS0FBSyxDQU5QNEYsY0FBYztJQUNkbkIsV0FBVyxHQUtUekUsS0FBSyxDQUxQeUUsV0FBVztJQUNYdEIsbUJBQW1CLEdBSWpCbkQsS0FBSyxDQUpQbUQsbUJBQW1CO0lBQ25CMEMscUJBQXFCLEdBR25CN0YsS0FBSyxDQUhQNkYscUJBQXFCO0lBQ3JCWixhQUFhLEdBRVhqRixLQUFLLENBRlBpRixhQUFhO0lBQ2JhLGNBQWMsR0FDWjlGLEtBQUssQ0FEUDhGLGNBQWM7RUFHaEIsSUFBQUMsVUFBQSxHQUFrRC9LLFFBQVEsQ0FBd0IsSUFBSSxDQUFDO0lBQUFnTCxVQUFBLEdBQUFqRixjQUFBLENBQUFnRixVQUFBO0lBQWhGRSxpQkFBaUIsR0FBQUQsVUFBQTtJQUFFRSxvQkFBb0IsR0FBQUYsVUFBQTtFQUM5QyxJQUFNbEcsYUFBYSxHQUFHNEYsSUFBSSxLQUFLbEssZUFBZSxDQUFDMkssSUFBSSxJQUFJZCxJQUFJLENBQUM5RCxFQUFFLEtBQUsrRCxRQUFRLENBQUMvRCxFQUFFLENBQUM2RSxRQUFRLENBQUMsQ0FBQztFQUN6RixJQUFNckMsV0FBVyxHQUFHMkIsSUFBSSxLQUFLbEssZUFBZSxDQUFDNkssU0FBUyxJQUFJaEIsSUFBSSxDQUFDOUQsRUFBRSxLQUFLLFdBQVc7RUFDakYsSUFBTStFLHNCQUFzQixHQUFHL0osK0JBQStCLENBQUNnRixFQUFFLENBQUM7RUFDbEUsSUFBTU0sYUFBYSxHQUFHN0YsbUJBQW1CLENBQUM4RixXQUFXLElBQUl3RSxzQkFBc0IsR0FBRy9FLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDNUYsSUFBTWdGLGlCQUFpQixHQUFHLENBQUMsQ0FBQ3pFLFdBQVcsSUFBSXdFLHNCQUFzQjtFQUNqRSxJQUFNRSxhQUFhLEdBQUdDLE9BQU8sQ0FBQzVFLGFBQWEsQ0FBQztFQUM1QyxJQUFNNkUsY0FBYyxHQUFHL0osaUJBQWlCLENBQUNvSCxXQUFXLElBQUl3QyxpQkFBaUIsR0FBR2hGLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEYsSUFBTW9GLHlCQUF5QixHQUM3QjVDLFdBQVcsSUFBSTNILCtCQUErQixDQUFDc0ssY0FBYyxDQUFDRSxLQUFLLEVBQUVkLGNBQWMsRUFBRWpFLGFBQWEsRUFBRU4sRUFBRSxDQUFDO0VBQ3pHLElBQU1zRixpQkFBaUIsR0FBR04saUJBQWlCLElBQUlDLGFBQWEsSUFBSSxDQUFDRyx5QkFBeUI7RUFDMUYsSUFBTUcscUJBQXFCLEdBQUcvQyxXQUFXLElBQUl3QyxpQkFBaUIsSUFBSSxDQUFDLENBQUNULGNBQWM7RUFFbEYsSUFBTWlCLGtCQUFrQixHQUN0QnBCLFdBQVcsSUFBSUEsV0FBVyxDQUFDakIsTUFBTSxHQUFHLENBQUMsR0FDakNpQixXQUFXLEdBQ1gsQ0FBQzVCLFdBQVcsSUFBSWlELEtBQUssQ0FBQ0MsT0FBTyxDQUFDN0MsT0FBTyxDQUFDLEdBQ25DQSxPQUFPLEdBQ1IsRUFBRTtFQUVWLElBQU04QyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxVQUEwQixFQUFLO0lBQzVEO0lBQ0EsSUFDRUEsVUFBVSxDQUFDQyxJQUFJLFlBQVlDLElBQUksSUFDL0JGLFVBQVUsQ0FBQ0csWUFBWSxZQUFZRCxJQUFJLElBQ3ZDRixVQUFVLENBQUNJLGFBQWEsSUFDeEJKLFVBQVUsQ0FBQ0ssWUFBWSxJQUN2QkwsVUFBVSxDQUFDTSxRQUFRLEVBQ25CO01BQ0F2QixvQkFBb0IsQ0FBQ2lCLFVBQVUsQ0FBQztJQUNsQztFQUNGLENBQUM7RUFFRCxJQUFNTyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQVM7SUFDL0J4QixvQkFBb0IsQ0FBQyxJQUFJLENBQUM7RUFDNUIsQ0FBQztFQUVELElBQU15Qix3QkFBd0I7SUFBQSxJQUFBQyxLQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUFPYixVQUEwQjtNQUFBLElBQUFjLFNBQUEsRUFBQUMsUUFBQSxFQUFBQyxPQUFBLEVBQUFDLE9BQUEsRUFBQUMsY0FBQSxFQUFBQyxJQUFBLEVBQUFDLEVBQUE7TUFBQSxPQUFBVCxtQkFBQSxDQUFBVSxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQzFEVixTQUFTLEdBQUdkLFVBQVUsQ0FBQzFGLElBQUksQ0FBQ21ILFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQUFDLE1BQUEsQ0FBTzFCLFVBQVUsQ0FBQzJCLElBQUksQ0FBRTtZQUN0RVosUUFBUSxNQUFBVyxNQUFBLENBQU0xQixVQUFVLENBQUMxRixJQUFJLEVBQUFvSCxNQUFBLENBQUdaLFNBQVM7WUFDekNFLE9BQU8sR0FBR2hCLFVBQVUsQ0FBQ0ssWUFBWSxJQUFJTCxVQUFVLENBQUNNLFFBQVEsSUFBSU4sVUFBVSxDQUFDSSxhQUFhO1lBQUFrQixRQUFBLENBQUFDLElBQUE7WUFHcEZOLE9BQXNCLEdBQUcsSUFBSTtZQUFBLEtBRTdCRCxPQUFPO2NBQUFNLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFBQUYsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FDb0I3SixtQkFBbUIsQ0FBQ3FKLE9BQU8sRUFBRUQsUUFBUSxFQUFFZixVQUFVLENBQUMyQixJQUFJLENBQUM7VUFBQTtZQUE5RVQsY0FBYyxHQUFBSSxRQUFBLENBQUFNLElBQUE7WUFDcEJYLE9BQU8sR0FBR1ksR0FBRyxDQUFDQyxlQUFlLENBQUNaLGNBQWMsQ0FBQztZQUFBSSxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQ3hDLElBQUl4QixVQUFVLENBQUNDLElBQUksWUFBWUMsSUFBSSxFQUFFO2NBQzFDZSxPQUFPLEdBQUdZLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDOUIsVUFBVSxDQUFDQyxJQUFJLENBQUM7WUFDaEQ7VUFBQztZQUFBLElBRUlnQixPQUFPO2NBQUFLLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBRixRQUFBLENBQUFTLE1BQUE7VUFBQTtZQUVOWixJQUFJLEdBQUdhLFFBQVEsQ0FBQ2xPLGFBQWEsQ0FBQyxHQUFHLENBQUM7WUFDeENxTixJQUFJLENBQUNjLElBQUksR0FBR2hCLE9BQU87WUFDbkJFLElBQUksQ0FBQ2UsUUFBUSxHQUFHbkIsUUFBUTtZQUN4QkksSUFBSSxDQUFDN0UsS0FBSyxDQUFDQyxPQUFPLEdBQUcsTUFBTTtZQUMzQnlGLFFBQVEsQ0FBQ0csSUFBSSxDQUFDQyxXQUFXLENBQUNqQixJQUFJLENBQUM7WUFDL0JBLElBQUksQ0FBQ2tCLEtBQUssQ0FBQyxDQUFDO1lBRVpDLFVBQVUsQ0FBQyxZQUFNO2NBQ2ZOLFFBQVEsQ0FBQ0csSUFBSSxDQUFDSSxXQUFXLENBQUNwQixJQUFJLENBQUM7Y0FDL0JVLEdBQUcsQ0FBQ1csZUFBZSxDQUFDdkIsT0FBTyxDQUFDO1lBQzlCLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBQUssUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtZQUFBRixRQUFBLENBQUFDLElBQUE7WUFBQUgsRUFBQSxHQUFBRSxRQUFBO1lBRVBtQixPQUFPLENBQUNDLEtBQUssQ0FBQywrQkFBK0IsRUFBQXRCLEVBQU8sQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBRSxRQUFBLENBQUFxQixJQUFBO1FBQUE7TUFBQSxHQUFBOUIsT0FBQTtJQUFBLENBRXhEO0lBQUEsZ0JBL0JLTCx3QkFBd0JBLENBQUFvQyxFQUFBO01BQUEsT0FBQW5DLEtBQUEsQ0FBQW9DLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0ErQjdCO0VBRUQsSUFBSTFFLGVBQWUsSUFBSTVFLE9BQU8sRUFBRTtJQUM5QixvQkFDRTNCLElBQUEsQ0FBQ1ksY0FBYztNQUFVRSxhQUFhLEVBQUVBLGFBQWM7TUFBQyxtQkFBaUJ5QixFQUFHO01BQUMySSxXQUFXLEVBQUUsS0FBTTtNQUFBbkssUUFBQSxlQUM3RmYsSUFBQSxDQUFDakIsb0JBQW9CO1FBQUNvTSxZQUFZLEVBQUVwRyxXQUFZO1FBQUFoRSxRQUFBLGVBQzlDZixJQUFBLENBQUNxQixxQkFBcUI7VUFDcEJrRixlQUFlLEVBQUVBLGVBQWdCO1VBQ2pDdEQsT0FBTyxFQUFFQSxPQUFRO1VBQ2pCbkMsYUFBYSxFQUFFQSxhQUFjO1VBQzdCa0UsT0FBTyxFQUFFQSxPQUFRO1VBQ2pCb0csbUJBQW1CLGVBQUVwTCxJQUFBLENBQUN5QixjQUFjO1lBQUNFLE9BQU8sRUFBRUEsT0FBZTtZQUFDQyxrQkFBa0IsRUFBRUE7VUFBbUIsQ0FBRTtRQUFFLENBQzFHO01BQUMsQ0FDa0I7SUFBQyxHQVRKVyxFQVVMLENBQUM7RUFFckI7RUFFQSxJQUFNZ0QsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSThGLFFBQWtCLEVBQUs7SUFDbEQsSUFBTUMsU0FBUyxHQUFHL0ksRUFBRSxDQUNqQmdKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDVkMsTUFBTSxDQUFDLFVBQUFDLFVBQVU7TUFBQSxPQUFJQSxVQUFVLEtBQUssUUFBUTtJQUFBLEVBQUMsQ0FDN0NDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDWnBHLGNBQWMsYUFBZEEsY0FBYyxlQUFkQSxjQUFjLENBQUcrRixRQUFRLEVBQUVDLFNBQVMsQ0FBQztFQUN2QyxDQUFDO0VBRUQsb0JBQ0VsTCxLQUFBLENBQUNyQixvQkFBb0I7SUFBQ29NLFlBQVksRUFBRXBHLFdBQVk7SUFBQyxtQkFBaUJ4QyxFQUFHO0lBQUF4QixRQUFBLGdCQUNuRVgsS0FBQSxDQUFDcEIsa0JBQWtCO01BQUErQixRQUFBLEdBT2hCZ0UsV0FBVyxLQUNUd0MsaUJBQWlCLGdCQUNoQnZILElBQUEsQ0FBQzNDLGlCQUFpQjtRQUFDMEYsU0FBUyxFQUFFUixFQUFHO1FBQUN1RSxjQUFjLEVBQUVBLGNBQWU7UUFBQ2pFLGFBQWEsRUFBRUE7TUFBYyxDQUFFLENBQUMsZ0JBRWxHN0MsSUFBQSxDQUFDN0MsY0FBYztRQUFDNEYsU0FBUyxFQUFFUixFQUFHO1FBQUNvSixLQUFLLEdBQUF4RixnQkFBQSxHQUFFbkYsS0FBSyxDQUFDNEssU0FBUyxjQUFBekYsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSTtNQUFLLENBQUUsQ0FDakUsQ0FBQyxFQUNILENBQUMsQ0FBQzRCLGtCQUFrQixDQUFDckMsTUFBTSxpQkFDMUIxRixJQUFBLENBQUNmLGdCQUFnQjtRQUFDa00sWUFBWSxFQUFFcEcsV0FBWTtRQUFBaEUsUUFBQSxFQUN6Q2dILGtCQUFrQixDQUFDM0YsR0FBRyxDQUFDLFVBQUMrRixVQUFVLEVBQUUwRCxLQUFLLEVBQUs7VUFBQSxJQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtVQUM3QztVQUNBLElBQU1DLGNBQWMsR0FBRyxDQUFBN0QsVUFBVSxhQUFWQSxVQUFVLGdCQUFBMkQsZ0JBQUEsR0FBVjNELFVBQVUsQ0FBRTJCLElBQUksY0FBQWdDLGdCQUFBLHVCQUFoQkEsZ0JBQUEsQ0FBa0JHLFdBQVcsQ0FBQyxDQUFDLEtBQUksRUFBRTtVQUM1RCxJQUFNQyxjQUFjLEdBQUcsQ0FBQS9ELFVBQVUsYUFBVkEsVUFBVSxnQkFBQTRELGdCQUFBLEdBQVY1RCxVQUFVLENBQUUxRixJQUFJLGNBQUFzSixnQkFBQSx1QkFBaEJBLGdCQUFBLENBQWtCRSxXQUFXLENBQUMsQ0FBQyxLQUFJLEVBQUU7VUFDNUQsSUFBTUUsV0FBVyxHQUNmSCxjQUFjLENBQUNJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFDbkMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUN4QyxRQUFRLENBQUNvQyxjQUFjLENBQUMsSUFDbkYsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUNLLElBQUksQ0FBQyxVQUFBQyxHQUFHO1lBQUEsT0FDekVKLGNBQWMsQ0FBQ0ssUUFBUSxDQUFDRCxHQUFHLENBQUM7VUFBQSxDQUM5QixDQUFDO1VBRUgsSUFBSUgsV0FBVyxFQUFFO1lBQ2Ysb0JBQU9uTSxJQUFBLENBQUMxRCxtQkFBbUI7Y0FBNkM2TCxVQUFVLEVBQUVBO1lBQVcsTUFBQTBCLE1BQUEsQ0FBM0QxQixVQUFVLENBQUM1RixFQUFFLE9BQUFzSCxNQUFBLENBQUkxQixVQUFVLENBQUMxRixJQUFJLENBQTZCLENBQUM7VUFDcEc7VUFFQSxvQkFDRXpDLElBQUEsQ0FBQzdELGNBQWM7WUFFYmdNLFVBQVUsRUFBRUEsVUFBVztZQUN2QnFFLGFBQWEsRUFBRVgsS0FBTTtZQUNyQlksVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQUE7Y0FBQSxPQUFROUQsd0JBQXdCLENBQUNSLFVBQVUsQ0FBQztZQUFBLENBQUM7WUFDdkQzRixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtjQUFBLE9BQVEwRixxQkFBcUIsQ0FBQ0MsVUFBVSxDQUFDO1lBQUE7VUFBQyxNQUFBMEIsTUFBQSxDQUp6QzFCLFVBQVUsQ0FBQzVGLEVBQUUsT0FBQXNILE1BQUEsQ0FBSTFCLFVBQVUsQ0FBQzFGLElBQUksQ0FLekMsQ0FBQztRQUVOLENBQUM7TUFBQyxDQUNjLENBQ25CLEVBQ0EsQ0FBQyxDQUFDLENBQUNRLE9BQU8sSUFBSTRFLGlCQUFpQixLQUFLLEVBQUU5QyxXQUFXLElBQUksQ0FBQyxDQUFDZ0Qsa0JBQWtCLENBQUNyQyxNQUFNLENBQUMsaUJBQ2hGMUYsSUFBQSxDQUFDMEMsb0JBQW9CO1FBQ25CTyxPQUFPLEVBQUVBLE9BQU8sYUFBUEEsT0FBTyxjQUFQQSxPQUFPLEdBQUksRUFBRztRQUN2QkgsV0FBVyxFQUFFK0UsaUJBQWtCO1FBQy9CL0csYUFBYSxFQUFFQSxhQUFjO1FBQzdCaUUsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCUixtQkFBbUIsRUFBRXZELEtBQUssQ0FBQ3VELG1CQUFvQjtRQUMvQ1UsUUFBUSxFQUFFQSxRQUFTO1FBQ25CRCxPQUFPLEVBQUVBLE9BQVE7UUFDakJJLE9BQU8sRUFBRUEsT0FBUTtRQUNqQkssV0FBVyxFQUFFQSxXQUFZO1FBQ3pCdEIsbUJBQW1CLEVBQUVBLG1CQUFvQjtRQUN6Q29CLG1CQUFtQixFQUFFQSxtQkFBb0I7UUFDekNDLGVBQWUsRUFBRUEsZUFBZSxhQUFmQSxlQUFlLGNBQWZBLGVBQWUsR0FBSSxJQUFLO1FBQ3pDTixPQUFPLEVBQUV1QixXQUFZO1FBQ3JCWixxQkFBcUIsRUFBRUEscUJBQXNCO1FBQzdDRSxtQkFBbUIsRUFBRXdCLGlCQUFpQixJQUFJLENBQUMsQ0FBQ1YscUJBQXNCO1FBQ2xFOUQsU0FBUyxFQUFFUixFQUFHO1FBQ2QwRCxhQUFhLEVBQUVBO01BQWMsQ0FDOUIsQ0FDRixFQUVBNkIscUJBQXFCLGlCQUNwQjlILElBQUEsQ0FBQzFDLG1CQUFtQjtRQUFBeUQsUUFBQSxlQUNsQmYsSUFBQSxDQUFDOUMsc0JBQXNCO1VBQUN3UCxRQUFRLEVBQUU1RixjQUFlO1VBQUM2RixPQUFPO1FBQUEsQ0FBRTtNQUFDLENBQ3pDLENBQ3RCLEVBQ0ExSCxRQUFRLElBQUlBLFFBQVEsQ0FBQzJILGVBQWUsaUJBQ25DNU0sSUFBQSxDQUFDZCx1QkFBdUI7UUFBQTZCLFFBQUEsZUFDdEJmLElBQUEsQ0FBQzVELFdBQVc7VUFDVnlRLE9BQU8sRUFBRTVILFFBQVEsQ0FBQzJILGVBQWdCO1VBQ2xDRSxNQUFNLEVBQUVsRyxjQUFlO1VBQ3ZCbUcsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUVDLFNBQVM7WUFBQSxPQUFJeEcsc0JBQXNCLENBQUN3RyxTQUFTLEVBQUUsU0FBUyxDQUFDO1VBQUEsQ0FBQztVQUNyRUMsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUVELFNBQVM7WUFBQSxPQUFJeEcsc0JBQXNCLENBQUN3RyxTQUFTLEVBQUUsUUFBUSxDQUFDO1VBQUEsQ0FBQztVQUNuRUUsZ0JBQWdCLEVBQUUsRUFBQTlHLHFCQUFBLEdBQUFwRixLQUFLLENBQUNtTSxlQUFlLGNBQUEvRyxxQkFBQSx1QkFBckJBLHFCQUFBLENBQXVCZ0gsVUFBVSxNQUFLLElBQUs7VUFDN0RDLFVBQVUsRUFBRXJNLEtBQUssQ0FBQ3NNLFFBQVM7VUFDM0JDLGNBQWMsRUFBRXRJLFFBQVEsQ0FBQ3VJLGtCQUFtQjtVQUM1Q0MsY0FBYyxFQUFFeEksUUFBUSxDQUFDeUksZUFBZ0I7VUFDekNDLHNCQUFzQixFQUFFMUksUUFBUSxDQUFDMkk7UUFBeUIsQ0FDM0Q7TUFBQyxDQUNxQixDQUMxQjtJQUFBLENBQ2lCLENBQUMsZUFDckI1TixJQUFBLENBQUMzRCxzQkFBc0I7TUFDckJ3UixNQUFNLEVBQUUsQ0FBQyxDQUFDNUcsaUJBQWtCO01BQzVCNkcsT0FBTyxFQUFFcEYsa0JBQW1CO01BQzVCUCxVQUFVLEVBQUVsQjtJQUFrQixDQUMvQixDQUFDO0VBQUEsQ0FDa0IsQ0FBQztBQUUzQixDQUFDLENBQUM7QUFFRixJQUFNOEcsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQUMsS0FBQSxFQVNFO0VBQUEsSUFSekJDLGtCQUFrQixHQUFBRCxLQUFBLENBQWxCQyxrQkFBa0I7SUFDbEJDLGFBQWEsR0FBQUYsS0FBQSxDQUFiRSxhQUFhO0lBQ2JDLE9BQU8sR0FBQUgsS0FBQSxDQUFQRyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBSixLQUFBLENBQWxCSSxrQkFBa0I7SUFDbEJDLGdCQUFnQixHQUFBTCxLQUFBLENBQWhCSyxnQkFBZ0I7SUFDaEIxSCxXQUFXLEdBQUFxSCxLQUFBLENBQVhySCxXQUFXO0lBQ1gySCxNQUFNLEdBQUFOLEtBQUEsQ0FBTk0sTUFBTTtJQUNOaEIsUUFBUSxHQUFBVSxLQUFBLENBQVJWLFFBQVE7RUFFUixJQUFBaUIsS0FBQSxHQUFjMVIsSUFBSSxDQUFDLENBQUM7SUFBWjJSLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1QsSUFBQUMsaUJBQUEsR0FBeURsUCxnQkFBZ0IsQ0FBQyxDQUFDO0lBQW5FbVAsaUJBQWlCLEdBQUFELGlCQUFBLENBQWpCQyxpQkFBaUI7SUFBRUMsa0JBQWtCLEdBQUFGLGlCQUFBLENBQWxCRSxrQkFBa0I7SUFBRUMsS0FBSyxHQUFBSCxpQkFBQSxDQUFMRyxLQUFLO0VBQ3BELElBQU1DLEtBQUssR0FBR2hQLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCLElBQU15RyxRQUFRLEdBQUcxSixPQUFPLENBQUMsQ0FBQztFQUMxQixJQUFNa1MsV0FBVyxHQUFHL1MsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDaEQsSUFBTWdULGtCQUFrQixHQUFHaFQsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUN4QyxJQUFNaVQsZ0JBQWdCLEdBQUdqVCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3RDLElBQU1rVCxrQkFBa0IsR0FBR2xULE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDckMsSUFBTW1ULGdCQUFnQixHQUFHblQsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFNb1QscUJBQXFCLEdBQUdwVCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzNDLElBQU1xVCxrQkFBa0IsR0FBR3JULE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDeEMsSUFBTXNULHFCQUFxQixHQUFHdFQsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUMzQyxJQUFNdVQsWUFBWSxHQUFHdlQsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDaEQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU13VCxpQkFBaUIsR0FBR3hULE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ3JELElBQU15VCxXQUFXLEdBQUd6VCxNQUFNLENBQXdCLElBQUksQ0FBQztFQUN2RCxJQUFNMFQsZUFBZSxHQUFHMVQsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNqQyxJQUFNMlQsZ0JBQWdCLEdBQUczVCxNQUFNLENBQWdCLElBQUksQ0FBQztFQUNwRCxJQUFNNFQscUJBQXFCLEdBQUc1VCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzNDLElBQU02VCxzQkFBc0IsR0FBRzdULE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQzFELElBQU04VCx1QkFBdUIsR0FBRzlULE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQzNELElBQU0rVCxxQkFBcUIsR0FBRy9ULE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ3pELElBQUFnVSxVQUFBLEdBQW9EL1QsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBZ1UsVUFBQSxHQUFBak8sY0FBQSxDQUFBZ08sVUFBQTtJQUE1REUsa0JBQWtCLEdBQUFELFVBQUE7SUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7RUFDaEQsSUFBQUcsVUFBQSxHQUE4Q25VLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQW9VLFVBQUEsR0FBQXJPLGNBQUEsQ0FBQW9PLFVBQUE7SUFBdERFLGVBQWUsR0FBQUQsVUFBQTtJQUFFRSxrQkFBa0IsR0FBQUYsVUFBQTtFQUMxQyxJQUFBRyxVQUFBLEdBQW9EdlUsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBd1UsVUFBQSxHQUFBek8sY0FBQSxDQUFBd08sVUFBQTtJQUE1REUsa0JBQWtCLEdBQUFELFVBQUE7SUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7RUFDaEQsSUFBQUcsVUFBQSxHQUF3RTNVLFFBQVEsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7SUFBQTRVLFdBQUEsR0FBQTdPLGNBQUEsQ0FBQTRPLFVBQUE7SUFBdEdFLDRCQUE0QixHQUFBRCxXQUFBO0lBQUVFLCtCQUErQixHQUFBRixXQUFBO0VBRXBFLElBQUFHLGVBQUEsR0FpQklqVSxjQUFjLENBQUM7TUFDakJrVSxNQUFNLEVBQUU5QyxhQUFhLElBQUk3SSxTQUFTO01BQ2xDNEksa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJFLE9BQU8sRUFBUEEsT0FBTztNQUNQeEgsV0FBVyxFQUFYQSxXQUFXO01BQ1gySCxNQUFNLEVBQU5BO0lBQ0YsQ0FBQyxDQUFDO0lBdEJBMkMsUUFBUSxHQUFBRixlQUFBLENBQVJFLFFBQVE7SUFDUkMsZUFBZSxHQUFBSCxlQUFBLENBQWZHLGVBQWU7SUFDZkMscUJBQXFCLEdBQUFKLGVBQUEsQ0FBckJJLHFCQUFxQjtJQUNyQkMsZUFBZSxHQUFBTCxlQUFBLENBQWZLLGVBQWU7SUFDZkMsU0FBUyxHQUFBTixlQUFBLENBQVRNLFNBQVM7SUFDVEMsY0FBYyxHQUFBUCxlQUFBLENBQWRPLGNBQWM7SUFDZHhLLGNBQWMsR0FBQWlLLGVBQUEsQ0FBZGpLLGNBQWM7SUFDZHlLLGNBQWMsR0FBQVIsZUFBQSxDQUFkUSxjQUFjO0lBQ2RDLFdBQVcsR0FBQVQsZUFBQSxDQUFYUyxXQUFXO0lBQ1hDLFlBQVksR0FBQVYsZUFBQSxDQUFaVSxZQUFZO0lBQ1pDLGFBQWEsR0FBQVgsZUFBQSxDQUFiVyxhQUFhO0lBQ2JwTSxjQUFjLEdBQUF5TCxlQUFBLENBQWR6TCxjQUFjO0lBQ2RrQixzQkFBc0IsR0FBQXVLLGVBQUEsQ0FBdEJ2SyxzQkFBc0I7SUFDdEJtTCxjQUFjLEdBQUFaLGVBQUEsQ0FBZFksY0FBYztJQUNkQyxZQUFZLEdBQUFiLGVBQUEsQ0FBWmEsWUFBWTtJQUNaQyxjQUFjLEdBQUFkLGVBQUEsQ0FBZGMsY0FBYztFQVNoQixJQUFNalEsa0JBQWtCLEdBQUdoRyxXQUFXLENBQ3BDLFVBQUN1RyxNQUFlLEVBQUs7SUFDbkJ1UCxhQUFhLENBQUN2UCxNQUFNLENBQUM7RUFDdkIsQ0FBQyxFQUNELENBQUN1UCxhQUFhLENBQ2hCLENBQUM7O0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU1JLHVCQUF1QixHQUFHbFcsV0FBVyxDQUFDLFlBQU07SUFDaEQsSUFBTW1XLEVBQUUsR0FBR2pELFdBQVcsQ0FBQ2tELE9BQU87SUFDOUIsSUFBSSxDQUFDRCxFQUFFLEVBQUU7SUFDVCxJQUFRRSxTQUFTLEdBQWlDRixFQUFFLENBQTVDRSxTQUFTO01BQUVDLFlBQVksR0FBbUJILEVBQUUsQ0FBakNHLFlBQVk7TUFBRUMsWUFBWSxHQUFLSixFQUFFLENBQW5CSSxZQUFZO0lBQzdDO0lBQ0E7SUFDQSxJQUFNQyxrQkFBa0IsR0FBR0YsWUFBWSxHQUFHekMsZUFBZSxDQUFDdUMsT0FBTyxHQUFHQyxTQUFTLEdBQUdFLFlBQVk7SUFFNUYsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO0lBQzFDLElBQUlqRCxxQkFBcUIsQ0FBQzZDLE9BQU8sS0FBS0ssVUFBVSxFQUFFO01BQ2hEbEQscUJBQXFCLENBQUM2QyxPQUFPLEdBQUdLLFVBQVU7TUFDMUNuQyxxQkFBcUIsQ0FBQ21DLFVBQVUsQ0FBQztJQUNuQztJQUVBLElBQU1DLGVBQWUsR0FBR0wsU0FBUyxHQUFHLENBQUM7SUFDckMsSUFBSTdDLGtCQUFrQixDQUFDNEMsT0FBTyxLQUFLTSxlQUFlLEVBQUU7TUFDbERsRCxrQkFBa0IsQ0FBQzRDLE9BQU8sR0FBR00sZUFBZTtNQUM1Q2hDLGtCQUFrQixDQUFDZ0MsZUFBZSxDQUFDO0lBQ3JDO0lBRUEsSUFBTUMsa0JBQWtCLEdBQUdILGtCQUFrQixHQUFHLENBQUM7SUFDakQsSUFBSS9DLHFCQUFxQixDQUFDMkMsT0FBTyxLQUFLTyxrQkFBa0IsRUFBRTtNQUN4RGxELHFCQUFxQixDQUFDMkMsT0FBTyxHQUFHTyxrQkFBa0I7TUFDbEQ3QixxQkFBcUIsQ0FBQzZCLGtCQUFrQixDQUFDO0lBQzNDO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFTjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTUMsaUJBQWlCLEdBQUc1VyxXQUFXLENBQ25DLFlBQXFDO0lBQUEsSUFBcEM2VyxJQUEwQixHQUFBeEgsU0FBQSxDQUFBdkYsTUFBQSxRQUFBdUYsU0FBQSxRQUFBNUYsU0FBQSxHQUFBNEYsU0FBQSxNQUFHLENBQUMsQ0FBQztJQUM5QixJQUFBeUgsYUFBQSxHQUF3QkQsSUFBSSxDQUFwQkUsT0FBTztNQUFQQSxPQUFPLEdBQUFELGFBQUEsY0FBRyxDQUFDLEdBQUFBLGFBQUE7SUFDbkIsSUFBTUUsR0FBRyxHQUFHLFNBQU5BLEdBQUdBLENBQUEsRUFBUztNQUNoQkMscUJBQXFCLENBQUMsWUFBTTtRQUMxQixJQUFNZCxFQUFFLEdBQUdqRCxXQUFXLENBQUNrRCxPQUFPO1FBQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO1FBQ1RBLEVBQUUsQ0FBQ0UsU0FBUyxHQUFHRixFQUFFLENBQUNHLFlBQVk7UUFDOUJKLHVCQUF1QixDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUlhLE9BQU8sR0FBRyxDQUFDLEVBQUVsSSxVQUFVLENBQUNtSSxHQUFHLEVBQUVELE9BQU8sQ0FBQyxNQUNwQ0MsR0FBRyxDQUFDLENBQUM7RUFDWixDQUFDLEVBQ0QsQ0FBQ2QsdUJBQXVCLENBQzFCLENBQUM7RUFFRCxJQUFNZ0IsZ0JBQWdCLEdBQUdsWCxXQUFXLENBQUMsWUFBTTtJQUN6QyxJQUFJOFQsZ0JBQWdCLENBQUNzQyxPQUFPLEtBQUssSUFBSSxFQUFFO0lBQ3ZDZSxvQkFBb0IsQ0FBQ3JELGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQzlDdEMsZ0JBQWdCLENBQUNzQyxPQUFPLEdBQUcsSUFBSTtFQUNqQyxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0FBQ0Y7QUFDQTtBQUNBO0VBQ0UsSUFBTWdCLGVBQWUsR0FBR3BYLFdBQVcsQ0FDakMsVUFBQ3FYLEdBQVcsRUFBSztJQUNmSCxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xCLElBQU1mLEVBQUUsR0FBR2pELFdBQVcsQ0FBQ2tELE9BQU87SUFDOUIsSUFBSSxDQUFDRCxFQUFFLEVBQUU7SUFDVCxJQUFNbUIsSUFBSSxHQUFHbkIsRUFBRSxDQUFDRSxTQUFTO0lBQ3pCLElBQU1rQixRQUFRLEdBQUdGLEdBQUcsR0FBR0MsSUFBSTtJQUMzQixJQUFJM1MsSUFBSSxDQUFDNlMsR0FBRyxDQUFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFFNUIsSUFBTUUsUUFBUSxHQUNaNVMsdUJBQXVCLEdBQ3ZCLENBQUNDLDJCQUEyQixHQUFHRCx1QkFBdUIsSUFDcERGLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDNlMsR0FBRyxDQUFDRCxRQUFRLENBQUMsR0FBR3hTLDRCQUE0QixDQUFDO0lBRWxFLElBQU0yUyxTQUFTLEdBQUdDLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBTUMsS0FBSSxHQUFHLFNBQVBBLElBQUlBLENBQUlELEdBQVcsRUFBSztNQUM1QixJQUFNRSxRQUFRLEdBQUduVCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2dULEdBQUcsR0FBR0YsU0FBUyxJQUFJRCxRQUFRLENBQUM7TUFDMUQ7TUFDQTtNQUNBLElBQU1NLEtBQUssR0FBR0QsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFBblQsSUFBQSxDQUFBcVQsR0FBQSxDQUFHLENBQUMsRUFBSyxDQUFDLEVBQUUsR0FBR0YsUUFBUSxDQUFDO01BQzVEM0IsRUFBRSxDQUFDRSxTQUFTLEdBQUdpQixJQUFJLEdBQUdDLFFBQVEsR0FBR1EsS0FBSztNQUN0QzdCLHVCQUF1QixDQUFDLENBQUM7TUFDekJwQyxnQkFBZ0IsQ0FBQ3NDLE9BQU8sR0FBRzBCLFFBQVEsR0FBRyxDQUFDLEdBQUdiLHFCQUFxQixDQUFDWSxLQUFJLENBQUMsR0FBRyxJQUFJO0lBQzlFLENBQUM7SUFDRC9ELGdCQUFnQixDQUFDc0MsT0FBTyxHQUFHYSxxQkFBcUIsQ0FBQ1ksS0FBSSxDQUFDO0VBQ3hELENBQUMsRUFDRCxDQUFDWCxnQkFBZ0IsRUFBRWhCLHVCQUF1QixDQUM1QyxDQUFDO0VBRURqVyxTQUFTLENBQUM7SUFBQSxPQUFNaVgsZ0JBQWdCO0VBQUEsR0FBRSxDQUFDQSxnQkFBZ0IsQ0FBQyxDQUFDO0VBRXJELElBQU1lLGVBQWUsR0FBR2pZLFdBQVcsQ0FBQyxVQUFDK04sSUFBWSxFQUFLO0lBQ3BELElBQUlwSixJQUFJLENBQUM2UyxHQUFHLENBQUMzRCxlQUFlLENBQUN1QyxPQUFPLEdBQUdySSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbEQ4RixlQUFlLENBQUN1QyxPQUFPLEdBQUdySSxJQUFJO0lBQzlCLElBQUk2RixXQUFXLENBQUN3QyxPQUFPLEVBQUU7TUFDdkJ4QyxXQUFXLENBQUN3QyxPQUFPLENBQUN2TixLQUFLLENBQUNxUCxNQUFNLE1BQUFqSyxNQUFBLENBQU1GLElBQUksT0FBSTtJQUNoRDtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNb0ssY0FBYyxHQUFHblksV0FBVyxDQUFDLFlBQU07SUFDdkMyVCxpQkFBaUIsQ0FBQ3lDLE9BQU8sR0FBRyxJQUFJO0lBQ2hDNkIsZUFBZSxDQUFDLENBQUMsQ0FBQztFQUNwQixDQUFDLEVBQUUsQ0FBQ0EsZUFBZSxDQUFDLENBQUM7O0VBRXJCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNRyxjQUFjLEdBQUdwWSxXQUFXLENBQUMsWUFBTTtJQUN2QyxJQUFNbVcsRUFBRSxHQUFHakQsV0FBVyxDQUFDa0QsT0FBTztJQUM5QixJQUFJLENBQUNELEVBQUUsSUFBSXRDLGVBQWUsQ0FBQ3VDLE9BQU8sSUFBSSxDQUFDLEVBQUU7SUFDekMsSUFBTWlDLFNBQVMsR0FBRzFULElBQUksQ0FBQzJULEdBQUcsQ0FBQyxDQUFDLEVBQUVuQyxFQUFFLENBQUNHLFlBQVksR0FBR0gsRUFBRSxDQUFDSSxZQUFZLEdBQUdKLEVBQUUsQ0FBQ0UsU0FBUyxDQUFDO0lBQy9FNEIsZUFBZSxDQUFDdFQsSUFBSSxDQUFDMlQsR0FBRyxDQUFDLENBQUMsRUFBRXpFLGVBQWUsQ0FBQ3VDLE9BQU8sR0FBR2lDLFNBQVMsQ0FBQyxDQUFDO0VBQ25FLENBQUMsRUFBRSxDQUFDSixlQUFlLENBQUMsQ0FBQzs7RUFFckI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU1NLGdCQUFnQixHQUFHdlksV0FBVyxDQUFDLFlBQU07SUFDekMsSUFBSSxDQUFDMlQsaUJBQWlCLENBQUN5QyxPQUFPLElBQUl2QyxlQUFlLENBQUN1QyxPQUFPLElBQUksQ0FBQyxFQUFFO0lBQ2hFekMsaUJBQWlCLENBQUN5QyxPQUFPLEdBQUcsSUFBSTtJQUNoQ2dDLGNBQWMsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsRUFBRSxDQUFDQSxjQUFjLENBQUMsQ0FBQztFQUVwQixJQUFNSSxzQkFBc0IsR0FBR3hZLFdBQVcsQ0FBQyxZQUFNO0lBQy9Da1gsZ0JBQWdCLENBQUMsQ0FBQztJQUNsQnFCLGdCQUFnQixDQUFDLENBQUM7RUFDcEIsQ0FBQyxFQUFFLENBQUNyQixnQkFBZ0IsRUFBRXFCLGdCQUFnQixDQUFDLENBQUM7RUFFeEMsSUFBTUUsV0FBVyxHQUFHelksV0FBVyxDQUFDLFVBQUM2UCxVQUFrQixFQUFLO0lBQ3RELElBQU1zRyxFQUFFLEdBQUdqRCxXQUFXLENBQUNrRCxPQUFPO0lBQzlCLElBQU1zQyxRQUFRLEdBQUc5RSxXQUFXLENBQUN3QyxPQUFPO0lBQ3BDLElBQUksQ0FBQ0QsRUFBRSxJQUFJLENBQUN1QyxRQUFRLEVBQUUsT0FBTyxJQUFJO0lBRWpDLElBQU1DLFVBQVUsR0FBR3hDLEVBQUUsQ0FBQ3lDLGFBQWEsdUJBQUEzSyxNQUFBLENBQW1DNEIsVUFBVSxRQUFJLENBQUM7SUFDckYsSUFBSSxDQUFDOEksVUFBVSxFQUFFLE9BQU8sSUFBSTtJQUU1QixJQUFNRSxZQUFZLEdBQUcxQyxFQUFFLENBQUMyQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUN6QixHQUFHO0lBQ25ELElBQU0wQixXQUFXLEdBQUdKLFVBQVUsQ0FBQ0cscUJBQXFCLENBQUMsQ0FBQyxDQUFDekIsR0FBRyxHQUFHd0IsWUFBWSxHQUFHMUMsRUFBRSxDQUFDRSxTQUFTO0lBQ3hGLElBQU0yQyxhQUFhLEdBQUdOLFFBQVEsQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQyxDQUFDekIsR0FBRyxHQUFHd0IsWUFBWSxHQUFHMUMsRUFBRSxDQUFDRSxTQUFTO0lBQ3hGLE9BQU87TUFBRUYsRUFBRSxFQUFGQSxFQUFFO01BQUU0QyxXQUFXLEVBQVhBLFdBQVc7TUFBRUUsVUFBVSxFQUFFRCxhQUFhLEdBQUdEO0lBQVksQ0FBQztFQUNyRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTUcsZ0JBQWdCLEdBQUdsWixXQUFXLENBQ2xDLFVBQUM2UCxVQUFrQixFQUFLO0lBQ3RCLElBQU1zSixRQUFRLEdBQUdWLFdBQVcsQ0FBQzVJLFVBQVUsQ0FBQztJQUN4QyxJQUFJLENBQUNzSixRQUFRLEVBQUU7SUFDZixJQUFRaEQsRUFBRSxHQUE4QmdELFFBQVEsQ0FBeENoRCxFQUFFO01BQUU0QyxXQUFXLEdBQWlCSSxRQUFRLENBQXBDSixXQUFXO01BQUVFLFVBQVUsR0FBS0UsUUFBUSxDQUF2QkYsVUFBVTs7SUFFbkM7SUFDQTtJQUNBdEYsaUJBQWlCLENBQUN5QyxPQUFPLEdBQUd2RyxVQUFVO0lBRXRDLElBQU11SixNQUFNLEdBQUczVSxnQkFBZ0IsQ0FBQzBSLEVBQUUsQ0FBQ0ksWUFBWSxDQUFDO0lBQ2hELElBQU04QyxlQUFlLEdBQUcxVSxJQUFJLENBQUMyVCxHQUFHLENBQUMsQ0FBQyxFQUFFUyxXQUFXLEdBQUdLLE1BQU0sQ0FBQztJQUN6RDtJQUNBO0lBQ0EsSUFBSUMsZUFBZSxJQUFJbEQsRUFBRSxDQUFDRSxTQUFTLEVBQUU7TUFDbkM0QixlQUFlLENBQUMsQ0FBQyxDQUFDO01BQ2xCL0IsdUJBQXVCLENBQUMsQ0FBQztNQUN6QjtJQUNGOztJQUVBO0lBQ0E7SUFDQTtJQUNBK0IsZUFBZSxDQUFDdFQsSUFBSSxDQUFDMlQsR0FBRyxDQUFDLENBQUMsRUFBRW5DLEVBQUUsQ0FBQ0ksWUFBWSxHQUFHMEMsVUFBVSxHQUFHRyxNQUFNLENBQUMsQ0FBQztJQUNuRWhDLGVBQWUsQ0FBQ2lDLGVBQWUsQ0FBQztFQUNsQyxDQUFDLEVBQ0QsQ0FBQ1osV0FBVyxFQUFFUixlQUFlLEVBQUUvQix1QkFBdUIsRUFBRWtCLGVBQWUsQ0FDekUsQ0FBQzs7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNa0MsYUFBYSxHQUFHdFosV0FBVyxDQUFDLFlBQWU7SUFDL0MsSUFBSSxDQUFDMlQsaUJBQWlCLENBQUN5QyxPQUFPLEVBQUUsT0FBTyxLQUFLO0lBQzVDLElBQUl2QyxlQUFlLENBQUN1QyxPQUFPLEdBQUcsQ0FBQyxFQUFFO01BQy9CLElBQU0rQyxRQUFRLEdBQUdWLFdBQVcsQ0FBQzlFLGlCQUFpQixDQUFDeUMsT0FBTyxDQUFDO01BQ3ZELElBQUkrQyxRQUFRLEVBQUU7UUFDWixJQUFNQyxNQUFNLEdBQUczVSxnQkFBZ0IsQ0FBQzBVLFFBQVEsQ0FBQ2hELEVBQUUsQ0FBQ0ksWUFBWSxDQUFDO1FBQ3pELElBQU1nRCxRQUFRLEdBQUc1VSxJQUFJLENBQUMyVCxHQUFHLENBQUMsQ0FBQyxFQUFFYSxRQUFRLENBQUNoRCxFQUFFLENBQUNJLFlBQVksR0FBRzRDLFFBQVEsQ0FBQ0YsVUFBVSxHQUFHRyxNQUFNLENBQUM7UUFDckZuQixlQUFlLENBQUN0VCxJQUFJLENBQUNDLEdBQUcsQ0FBQ2lQLGVBQWUsQ0FBQ3VDLE9BQU8sRUFBRW1ELFFBQVEsQ0FBQyxDQUFDO01BQzlEO0lBQ0Y7SUFDQSxPQUFPLElBQUk7RUFDYixDQUFDLEVBQUUsQ0FBQ2QsV0FBVyxFQUFFUixlQUFlLENBQUMsQ0FBQztFQUVsQyxJQUFNdUIseUJBQXlCLEdBQUd4WixXQUFXLENBQUMsWUFBTTtJQUNsRCxJQUFNbVcsRUFBRSxHQUFHakQsV0FBVyxDQUFDa0QsT0FBTztJQUM5QixJQUFJLENBQUNELEVBQUUsRUFBRTtJQUNUZ0MsY0FBYyxDQUFDLENBQUM7SUFDaEI7SUFDQWYsZUFBZSxDQUFDakIsRUFBRSxDQUFDRyxZQUFZLEdBQUdILEVBQUUsQ0FBQ0ksWUFBWSxDQUFDO0VBQ3BELENBQUMsRUFBRSxDQUFDNEIsY0FBYyxFQUFFZixlQUFlLENBQUMsQ0FBQztFQUVyQyxJQUFNcUMsb0JBQW9CLEdBQUd6WixXQUFXLENBQ3RDLFVBQUMwWixDQUFnQyxFQUFLO0lBQ3BDLElBQU1DLFNBQVMsR0FBR0QsQ0FBQyxDQUFDRSxhQUFhO0lBRWpDLElBQUlsRyxZQUFZLENBQUMwQyxPQUFPLEtBQUssSUFBSSxFQUFFO01BQ2pDZSxvQkFBb0IsQ0FBQ3pELFlBQVksQ0FBQzBDLE9BQU8sQ0FBQztJQUM1QztJQUVBMUMsWUFBWSxDQUFDMEMsT0FBTyxHQUFHYSxxQkFBcUIsQ0FBQyxZQUFNO01BQ2pEdkQsWUFBWSxDQUFDMEMsT0FBTyxHQUFHLElBQUk7TUFDM0IsSUFBUUMsU0FBUyxHQUFpQ3NELFNBQVMsQ0FBbkR0RCxTQUFTO1FBQUVDLFlBQVksR0FBbUJxRCxTQUFTLENBQXhDckQsWUFBWTtRQUFFQyxZQUFZLEdBQUtvRCxTQUFTLENBQTFCcEQsWUFBWTtNQUU3QyxJQUFNc0QsYUFBYSxHQUFHeEQsU0FBUyxHQUFHL0MsZ0JBQWdCLENBQUM4QyxPQUFPO01BRTFELElBQUl5RCxhQUFhLEVBQUU7UUFDakJ4RyxrQkFBa0IsQ0FBQytDLE9BQU8sR0FBRyxFQUFFO01BQ2pDO01BRUEsSUFBTTBELFlBQVksR0FBR3hELFlBQVksR0FBR0QsU0FBUyxHQUFHRSxZQUFZLEdBQUdsRCxrQkFBa0IsQ0FBQytDLE9BQU87TUFFekYsSUFBSTBELFlBQVksRUFBRTtRQUNoQnpHLGtCQUFrQixDQUFDK0MsT0FBTyxHQUFHLEVBQUU7TUFDakM7TUFFQTlDLGdCQUFnQixDQUFDOEMsT0FBTyxHQUFHQyxTQUFTOztNQUVwQztNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUMxQyxpQkFBaUIsQ0FBQ3lDLE9BQU8sRUFBRWdDLGNBQWMsQ0FBQyxDQUFDO01BRWhEbEMsdUJBQXVCLENBQUMsQ0FBQztNQUV6QixJQUFJNUQsYUFBYSxJQUFJK0QsU0FBUyxHQUFHLENBQUMsRUFBRTtRQUNsQyxJQUFJbkMscUJBQXFCLENBQUNrQyxPQUFPLElBQUksSUFBSSxFQUFFO1VBQ3pDN08sTUFBTSxDQUFDd1MsWUFBWSxDQUFDN0YscUJBQXFCLENBQUNrQyxPQUFPLENBQUM7UUFDcEQ7UUFDQWxDLHFCQUFxQixDQUFDa0MsT0FBTyxHQUFHN08sTUFBTSxDQUFDc0gsVUFBVSxDQUFDLFlBQU07VUFDdEQzTSxxQkFBcUIsQ0FBQ3dJLFFBQVEsQ0FBQy9ELEVBQUUsRUFBRTtZQUNqQzBQLFNBQVMsRUFBVEEsU0FBUztZQUNUMkQsZUFBZSxFQUFFMUg7VUFDbkIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUNUO01BRUEsSUFBSXdILFlBQVksSUFBSXJILGdCQUFnQixFQUFFO1FBQ3BDQSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3BCO01BRUF1RCxZQUFZLENBQUMyRCxTQUFTLENBQUM7SUFDekIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUNELENBQUNqUCxRQUFRLENBQUMvRCxFQUFFLEVBQUV5UixjQUFjLEVBQUVwQyxZQUFZLEVBQUUxRCxhQUFhLEVBQUVHLGdCQUFnQixFQUFFeUQsdUJBQXVCLENBQ3RHLENBQUM7O0VBRUQ7RUFDQSxJQUFNK0QsY0FBYyxHQUFHOVosTUFBTSxDQUFDeVYsV0FBVyxDQUFDO0VBQzFDLElBQU1zRSxpQkFBaUIsR0FBRy9aLE1BQU0sQ0FBQzhWLGNBQWMsQ0FBQztFQUNoRCxJQUFNa0UscUJBQXFCLEdBQUdoYSxNQUFNLENBQUNxUyxrQkFBa0IsQ0FBQztFQUN4RCxJQUFNNEgsbUJBQW1CLEdBQUdqYSxNQUFNLENBQ2hDLFVBQ0VrSCxPQUFlLEVBQ2YwRCxXQUE4QixFQUM5QnNQLEtBQWMsRUFDZEMsaUJBQTBCLEVBQzFCQyxRQUEyQixFQUMzQkMsS0FBYyxFQUNkQyxJQUFhO0lBQUEsT0FDVlIsY0FBYyxDQUFDN0QsT0FBTyxDQUFDL08sT0FBTyxFQUFFMEQsV0FBVyxFQUFFc1AsS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksQ0FBQztFQUFBLENBQ3BHLENBQUM7RUFDRCxJQUFNQyxzQkFBc0IsR0FBR3ZhLE1BQU0sQ0FBQztJQUFBLE9BQU0rWixpQkFBaUIsQ0FBQzlELE9BQU8sQ0FBQyxDQUFDO0VBQUEsRUFBQzs7RUFFeEU7RUFDQTZELGNBQWMsQ0FBQzdELE9BQU8sR0FBR1IsV0FBVztFQUNwQ3NFLGlCQUFpQixDQUFDOUQsT0FBTyxHQUFHSCxjQUFjO0VBQzFDa0UscUJBQXFCLENBQUMvRCxPQUFPLEdBQUc1RCxrQkFBa0I7O0VBRWxEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTW1JLGVBQWUsR0FBR3hhLE1BQU0sQ0FBQ2tWLFFBQVEsQ0FBQztFQUN4Q3NGLGVBQWUsQ0FBQ3ZFLE9BQU8sR0FBR2YsUUFBUTtFQUNsQyxJQUFNdUYsK0JBQStCLEdBQUd6YSxNQUFNLENBQUM4VSw0QkFBNEIsQ0FBQztFQUM1RTJGLCtCQUErQixDQUFDeEUsT0FBTyxHQUFHbkIsNEJBQTRCO0VBRXRFLElBQU1oTCxxQkFBcUIsR0FBR2pLLFdBQVcsQ0FDdkMsVUFBQ21ILFNBQWlCLEVBQUU2QyxVQUFrQixFQUFLO0lBQ3pDLElBQUksRUFBQ0EsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRTZRLElBQUksQ0FBQyxDQUFDLEdBQUU7SUFDekIsSUFBSUQsK0JBQStCLENBQUN4RSxPQUFPLENBQUNqUCxTQUFTLENBQUMsRUFBRTtJQUN4RCxJQUFNMlQsZUFBZSxHQUFHSCxlQUFlLENBQUN2RSxPQUFPO0lBQy9DLElBQU0yRSx3QkFBd0IsR0FBR2hhLGNBQWMsQ0FBQ2lTLEtBQUssQ0FBQztJQUN0REMsS0FBSyxDQUFDalAsTUFBTSxDQUFDZ1gscUJBQXFCLEVBQUU7TUFDbENDLFVBQVUsRUFBRUYsd0JBQXdCLEdBQUcsYUFBYSxHQUFHL0gsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU5RTtJQUNoRSxDQUFDLENBQUM7SUFDRmdILCtCQUErQixDQUFDLFVBQUFwSCxJQUFJO01BQUEsT0FBQXRJLGFBQUEsQ0FBQUEsYUFBQSxLQUFVc0ksSUFBSSxPQUFBb04sZUFBQSxLQUFHL1QsU0FBUyxFQUFHLElBQUk7SUFBQSxDQUFHLENBQUM7SUFFekUsSUFBTWdVLGFBQWEsR0FBR0wsZUFBZSxDQUFDTSxJQUFJLENBQUMsVUFBQUMsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQzFVLEVBQUUsS0FBS1EsU0FBUztJQUFBLEVBQUM7SUFDdkUsSUFBTW1VLGlCQUFpQixHQUFHLENBQUMsRUFBQ0gsYUFBYSxhQUFiQSxhQUFhLGVBQWJBLGFBQWEsQ0FBRS9SLE9BQU8sS0FBSVksVUFBVSxLQUFLNEksQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNwRixJQUFJMEksaUJBQWlCLEVBQUU7TUFDckIsSUFBTUMsZ0JBQWUsR0FBR1QsZUFBZSxDQUNwQ2xMLE1BQU0sQ0FBQyxVQUFBeUwsR0FBRztRQUFBLE9BQUlBLEdBQUcsQ0FBQ3ZRLElBQUksS0FBS2xLLGVBQWUsQ0FBQzJLLElBQUksSUFBSThQLEdBQUcsQ0FBQzVRLElBQUksQ0FBQzlELEVBQUUsS0FBSytELFFBQVEsQ0FBQy9ELEVBQUUsQ0FBQzZFLFFBQVEsQ0FBQyxDQUFDO01BQUEsRUFBQyxDQUMxRmdRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULElBQUlELGdCQUFlLGFBQWZBLGdCQUFlLGVBQWZBLGdCQUFlLENBQUVsVSxPQUFPLEVBQUU7UUFDNUIsSUFBTW9VLGdCQUFnQixHQUFHclAsS0FBSyxDQUFDQyxPQUFPLENBQUNrUCxnQkFBZSxDQUFDeFEsV0FBVyxDQUFDLEdBQy9Ed1EsZ0JBQWUsQ0FBQ3hRLFdBQVcsR0FDM0JxQixLQUFLLENBQUNDLE9BQU8sQ0FBQ2tQLGdCQUFlLENBQUMvUixPQUFPLENBQUMsR0FDcEMrUixnQkFBZSxDQUFDL1IsT0FBTyxHQUN2QixFQUFFO1FBQ1J5USxjQUFjLENBQUM3RCxPQUFPLENBQUNtRixnQkFBZSxDQUFDbFUsT0FBTyxFQUFFb1UsZ0JBQWdCLENBQUM7UUFDakU7TUFDRjtJQUNGO0lBRUF4QixjQUFjLENBQUM3RCxPQUFPLENBQUNwTSxVQUFVLENBQUM7RUFDcEMsQ0FBQyxFQUNELENBQUNpSixLQUFLLEVBQUVELEtBQUssRUFBRUosQ0FBQyxFQUFFbEksUUFBUSxDQUFDL0QsRUFBRSxDQUMvQixDQUFDO0VBRUQxRyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUlrYSxxQkFBcUIsQ0FBQy9ELE9BQU8sRUFBRTtNQUNqQytELHFCQUFxQixDQUFDL0QsT0FBTyxDQUMzQmdFLG1CQUFtQixDQUFDaEUsT0FBTyxFQUMzQnNFLHNCQUFzQixDQUFDdEUsT0FBTyxFQUM5QlosZUFBZSxFQUNmQyxTQUNGLENBQUM7SUFDSDtFQUNGLENBQUMsRUFBRSxDQUFDRCxlQUFlLEVBQUVDLFNBQVMsQ0FBQyxDQUFDO0VBRWhDeFYsU0FBUyxDQUFDLFlBQU07SUFDZG1ULGdCQUFnQixDQUFDZ0QsT0FBTyxHQUFHYixxQkFBcUI7RUFDbEQsQ0FBQyxFQUFFLENBQUNBLHFCQUFxQixDQUFDLENBQUM7RUFFM0J0VixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ2tULGtCQUFrQixDQUFDaUQsT0FBTyxFQUFFO01BQy9CakQsa0JBQWtCLENBQUNpRCxPQUFPLEdBQUcsSUFBSTtNQUNqQ0wsY0FBYyxDQUFDLENBQUM7SUFDbEI7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0VBQ0E7RUFDQTlWLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDdVYsZUFBZSxJQUFJLENBQUNDLFNBQVMsRUFBRSxPQUFPaE0sU0FBUztJQUNwRCxJQUFJLENBQUN5SixXQUFXLENBQUNrRCxPQUFPLEVBQUUsT0FBTzNNLFNBQVM7SUFFMUMsSUFBSWlTLEtBQW9CLEdBQUcsSUFBSTtJQUUvQixJQUFNQyxLQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQSxFQUFTO01BQ2pCLElBQU14RixFQUFFLEdBQUdqRCxXQUFXLENBQUNrRCxPQUFPO01BQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO1FBQ1B1RixLQUFLLEdBQUcsSUFBSTtRQUNaO01BQ0Y7TUFDQXBDLGFBQWEsQ0FBQyxDQUFDO01BQ2ZwRCx1QkFBdUIsQ0FBQyxDQUFDO01BQ3pCd0YsS0FBSyxHQUFHekUscUJBQXFCLENBQUMwRSxLQUFJLENBQUM7SUFDckMsQ0FBQztJQUVERCxLQUFLLEdBQUd6RSxxQkFBcUIsQ0FBQzBFLEtBQUksQ0FBQztJQUNuQyxPQUFPLFlBQU07TUFDWCxJQUFJRCxLQUFLLElBQUksSUFBSSxFQUFFdkUsb0JBQW9CLENBQUN1RSxLQUFLLENBQUM7SUFDaEQsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDbEcsZUFBZSxFQUFFQyxTQUFTLEVBQUU2RCxhQUFhLEVBQUVwRCx1QkFBdUIsQ0FBQyxDQUFDO0VBRXhFLElBQU0wRix1QkFBdUIsR0FBR3piLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDOztFQUUzRDtFQUNBRixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ3FWLGVBQWUsRUFBRTtJQUN0QnNHLHVCQUF1QixDQUFDeEYsT0FBTyxHQUFHLElBQUk7SUFDdEMrQixjQUFjLENBQUMsQ0FBQztFQUNsQixDQUFDLEVBQUUsQ0FBQzdDLGVBQWUsRUFBRTZDLGNBQWMsQ0FBQyxDQUFDOztFQUVyQztFQUNBbFksU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJcVYsZUFBZSxJQUFJQyxxQkFBcUIsRUFBRTtJQUU5QyxJQUFJMUYsVUFBeUIsR0FBRyxJQUFJO0lBQ3BDLEtBQUssSUFBSUksS0FBSyxHQUFHb0YsUUFBUSxDQUFDdkwsTUFBTSxHQUFHLENBQUMsRUFBRW1HLEtBQUssSUFBSSxDQUFDLEVBQUVBLEtBQUssSUFBSSxDQUFDLEVBQUU7TUFBQSxJQUFBNEwsZUFBQTtNQUM1RCxLQUFBQSxlQUFBLEdBQUl4RyxRQUFRLENBQUNwRixLQUFLLENBQUMsY0FBQTRMLGVBQUEsZ0JBQUFBLGVBQUEsR0FBZkEsZUFBQSxDQUFpQmxWLEVBQUUsY0FBQWtWLGVBQUEsZUFBbkJBLGVBQUEsQ0FBcUJyTCxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDaERYLFVBQVUsR0FBR3dGLFFBQVEsQ0FBQ3BGLEtBQUssQ0FBQyxDQUFDdEosRUFBRTtRQUMvQjtNQUNGO0lBQ0Y7SUFDQSxJQUFJLENBQUNrSixVQUFVLElBQUlBLFVBQVUsS0FBSytMLHVCQUF1QixDQUFDeEYsT0FBTyxFQUFFO0lBRW5Fd0YsdUJBQXVCLENBQUN4RixPQUFPLEdBQUd2RyxVQUFVO0lBQzVDb0gscUJBQXFCLENBQUM7TUFBQSxPQUFNaUMsZ0JBQWdCLENBQUNySixVQUFVLENBQUM7SUFBQSxFQUFDO0VBQzNELENBQUMsRUFBRSxDQUFDd0YsUUFBUSxFQUFFQyxlQUFlLEVBQUVDLHFCQUFxQixFQUFFMkQsZ0JBQWdCLENBQUMsQ0FBQzs7RUFFeEU7RUFDQTtFQUNBO0VBQ0EsSUFBTTRDLGdCQUFnQixHQUFHM2IsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDcEQsSUFBTTRiLHFCQUFxQixHQUFHNWIsTUFBTSxDQUFTLENBQUMsQ0FBQzs7RUFFL0M7RUFDQUYsU0FBUyxDQUFDLFlBQU07SUFDZDhULHFCQUFxQixDQUFDcUMsT0FBTyxHQUFHLEtBQUs7SUFDckNwQyxzQkFBc0IsQ0FBQ29DLE9BQU8sR0FBRyxJQUFJO0lBQ3JDL0Msa0JBQWtCLENBQUMrQyxPQUFPLEdBQUcsRUFBRTtJQUMvQjlDLGdCQUFnQixDQUFDOEMsT0FBTyxHQUFHLENBQUM7SUFDNUIwRixnQkFBZ0IsQ0FBQzFGLE9BQU8sR0FBRyxJQUFJO0lBQy9CMkYscUJBQXFCLENBQUMzRixPQUFPLEdBQUcsQ0FBQztFQUNuQyxDQUFDLEVBQUUsQ0FBQzlELGFBQWEsQ0FBQyxDQUFDOztFQUVuQjtFQUNBcFMsZUFBZSxDQUFDLFlBQU07SUFBQSxJQUFBOGIsWUFBQSxFQUFBQyxTQUFBO0lBQ3BCLElBQUkzRyxlQUFlLElBQUksQ0FBQ2hELGFBQWEsSUFBSStDLFFBQVEsQ0FBQ3ZMLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDaEUsSUFBSWtLLHNCQUFzQixDQUFDb0MsT0FBTyxLQUFLOUQsYUFBYSxFQUFFO0lBQ3REMEIsc0JBQXNCLENBQUNvQyxPQUFPLEdBQUc5RCxhQUFhO0lBRTlDZSxrQkFBa0IsQ0FBQytDLE9BQU8sR0FBRyxFQUFFO0lBQy9CMEYsZ0JBQWdCLENBQUMxRixPQUFPLElBQUE0RixZQUFBLElBQUFDLFNBQUEsR0FBRzVHLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdkwsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFBbVMsU0FBQSx1QkFBN0JBLFNBQUEsQ0FBK0J0VixFQUFFLGNBQUFxVixZQUFBLGNBQUFBLFlBQUEsR0FBSSxJQUFJO0lBQ3BFRCxxQkFBcUIsQ0FBQzNGLE9BQU8sR0FBR2YsUUFBUSxDQUFDdkwsTUFBTTtJQUUvQzhNLGlCQUFpQixDQUFDLENBQUM7SUFDbkJBLGlCQUFpQixDQUFDO01BQUVHLE9BQU8sRUFBRTtJQUFJLENBQUMsQ0FBQztFQUNyQyxDQUFDLEVBQUUsQ0FBQ3pFLGFBQWEsRUFBRWdELGVBQWUsRUFBRUQsUUFBUSxDQUFDdkwsTUFBTSxFQUFFdUwsUUFBUSxFQUFFdUIsaUJBQWlCLENBQUMsQ0FBQztFQUVsRjNXLFNBQVMsQ0FBQyxZQUFNO0lBQUEsSUFBQWljLGVBQUE7SUFDZCxJQUFJLENBQUNoSixXQUFXLENBQUNrRCxPQUFPLElBQUlkLGVBQWUsSUFBSUMscUJBQXFCLElBQUluQyxnQkFBZ0IsQ0FBQ2dELE9BQU8sRUFBRTtNQUNoRztJQUNGO0lBRUEsSUFBTStGLFdBQVcsR0FBRzlHLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdkwsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRCxJQUFNc1MsTUFBTSxJQUFBRixlQUFBLEdBQUdDLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFeFYsRUFBRSxjQUFBdVYsZUFBQSxjQUFBQSxlQUFBLEdBQUksSUFBSTtJQUN0QyxJQUFNRyxNQUFNLEdBQUdQLGdCQUFnQixDQUFDMUYsT0FBTztJQUN2QyxJQUFNa0csT0FBTyxHQUFHUCxxQkFBcUIsQ0FBQzNGLE9BQU87SUFDN0MwRixnQkFBZ0IsQ0FBQzFGLE9BQU8sR0FBR2dHLE1BQU07SUFDakNMLHFCQUFxQixDQUFDM0YsT0FBTyxHQUFHZixRQUFRLENBQUN2TCxNQUFNO0lBRS9DLElBQU15UyxZQUFZLEdBQUdILE1BQU0sS0FBS0MsTUFBTSxJQUFJaEgsUUFBUSxDQUFDdkwsTUFBTSxLQUFLd1MsT0FBTztJQUNyRSxJQUFJLENBQUNDLFlBQVksRUFBRTtNQUNqQnJHLHVCQUF1QixDQUFDLENBQUM7TUFDekI7SUFDRjs7SUFFQTtJQUNBO0lBQ0EsSUFBSXZDLGlCQUFpQixDQUFDeUMsT0FBTyxFQUFFO01BQzdCYSxxQkFBcUIsQ0FBQ3FDLGFBQWEsQ0FBQztNQUNwQztJQUNGOztJQUVBO0lBQ0E7SUFDQSxJQUFJOUQsZUFBZSxJQUFJQyxTQUFTLEVBQUU7TUFDaENTLHVCQUF1QixDQUFDLENBQUM7TUFDekI7SUFDRjtJQUVBLElBQU15RCxTQUFTLEdBQUd6RyxXQUFXLENBQUNrRCxPQUFPO0lBQ3JDLElBQU1vRyxVQUFVLEdBQUc3QyxTQUFTLENBQUNyRCxZQUFZLEdBQUdxRCxTQUFTLENBQUN0RCxTQUFTLElBQUlzRCxTQUFTLENBQUNwRCxZQUFZLEdBQUcsR0FBRztJQUMvRixJQUFNa0csaUJBQWlCLEdBQUdwSCxRQUFRLENBQUM1RSxJQUFJLENBQUMsVUFBQTRLLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUMxVSxFQUFFLEtBQUssc0JBQXNCO0lBQUEsRUFBQztJQUNqRixJQUFNK1YsVUFBVSxHQUFHLENBQUMsQ0FBQ1AsV0FBVyxLQUFLQSxXQUFXLENBQUN4VixFQUFFLENBQUM2SixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDMkwsV0FBVyxDQUFDOVMsUUFBUSxDQUFDO0lBQ3RHLElBQU1zVCxrQkFBa0IsR0FDdEIsQ0FBQyxDQUFDUixXQUFXLEtBQUtBLFdBQVcsQ0FBQ3hWLEVBQUUsQ0FBQzZKLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSTJMLFdBQVcsQ0FBQ3hWLEVBQUUsQ0FBQzZKLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7SUFFbkc7SUFDQSxJQUFJbU0sa0JBQWtCLElBQUlILFVBQVUsRUFBRTtNQUNwQzVGLGlCQUFpQixDQUFDLENBQUM7TUFDbkI7SUFDRjs7SUFFQTtJQUNBO0lBQ0EsSUFBSSxDQUFDK0Ysa0JBQWtCLElBQUksQ0FBQ0QsVUFBVSxJQUFJLENBQUNELGlCQUFpQixJQUFJcEgsUUFBUSxDQUFDdkwsTUFBTSxHQUFHd1MsT0FBTyxFQUFFO01BQ3pGMUYsaUJBQWlCLENBQUMsQ0FBQztNQUNuQjtJQUNGO0lBRUFWLHVCQUF1QixDQUFDLENBQUM7RUFDM0IsQ0FBQyxFQUFFLENBQ0RiLFFBQVEsRUFDUkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLGVBQWUsRUFDZkMsU0FBUyxFQUNUbUIsaUJBQWlCLEVBQ2pCMEMsYUFBYSxFQUNicEQsdUJBQXVCLENBQ3hCLENBQUM7O0VBRUY7RUFDQTtFQUNBaFcsZUFBZSxDQUFDLFlBQU07SUFBQSxJQUFBMGMsYUFBQSxFQUFBQyxVQUFBO0lBQ3BCLElBQU1DLG1CQUFtQixHQUFHL0kscUJBQXFCLENBQUNxQyxPQUFPLElBQUksQ0FBQ2QsZUFBZTtJQUM3RXZCLHFCQUFxQixDQUFDcUMsT0FBTyxHQUFHZCxlQUFlO0lBRS9DLElBQUksQ0FBQ3dILG1CQUFtQixJQUFJekgsUUFBUSxDQUFDdkwsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUVuRHVKLGtCQUFrQixDQUFDK0MsT0FBTyxHQUFHLEVBQUU7SUFDL0IwRixnQkFBZ0IsQ0FBQzFGLE9BQU8sSUFBQXdHLGFBQUEsSUFBQUMsVUFBQSxHQUFHeEgsUUFBUSxDQUFDQSxRQUFRLENBQUN2TCxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQUErUyxVQUFBLHVCQUE3QkEsVUFBQSxDQUErQmxXLEVBQUUsY0FBQWlXLGFBQUEsY0FBQUEsYUFBQSxHQUFJLElBQUk7SUFDcEViLHFCQUFxQixDQUFDM0YsT0FBTyxHQUFHZixRQUFRLENBQUN2TCxNQUFNO0lBRS9DOE0saUJBQWlCLENBQUMsQ0FBQztJQUNuQkEsaUJBQWlCLENBQUM7TUFBRUcsT0FBTyxFQUFFO0lBQUksQ0FBQyxDQUFDO0VBQ3JDLENBQUMsRUFBRSxDQUFDekIsZUFBZSxFQUFFRCxRQUFRLENBQUN2TCxNQUFNLEVBQUU4TSxpQkFBaUIsQ0FBQyxDQUFDOztFQUV6RDtFQUNBM1csU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUNxVixlQUFlLEVBQUU7TUFDcEJZLHVCQUF1QixDQUFDLENBQUM7SUFDM0I7RUFDRixDQUFDLEVBQUUsQ0FBQ1osZUFBZSxFQUFFRCxRQUFRLENBQUN2TCxNQUFNLEVBQUVvTSx1QkFBdUIsQ0FBQyxDQUFDOztFQUUvRDtFQUNBLElBQU1xRixlQUFlLEdBQUdsRyxRQUFRLENBQzdCekYsTUFBTSxDQUFDLFVBQUF5TCxHQUFHO0lBQUEsT0FBSUEsR0FBRyxDQUFDdlEsSUFBSSxLQUFLbEssZUFBZSxDQUFDMkssSUFBSSxJQUFJOFAsR0FBRyxDQUFDNVEsSUFBSSxDQUFDOUQsRUFBRSxLQUFLK0QsUUFBUSxDQUFDL0QsRUFBRSxDQUFDNkUsUUFBUSxDQUFDLENBQUM7RUFBQSxFQUFDLENBQzFGZ1EsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRVQsSUFBTXVCLGdCQUFnQixHQUNwQixDQUFDM1EsS0FBSyxDQUFDQyxPQUFPLENBQUNrUCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXhRLFdBQVcsQ0FBQyxHQUFHd1EsZUFBZSxDQUFDeFEsV0FBVyxDQUFDakIsTUFBTSxHQUFHLENBQUMsTUFDcEZzQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2tQLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFL1IsT0FBTyxDQUFDLEdBQUcrUixlQUFlLENBQUMvUixPQUFPLENBQUNNLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFFaEYsSUFBTWtULG9CQUFvQixHQUFHcGIsMkJBQTJCLENBQUM7SUFDdkRzSixjQUFjLEVBQWRBLGNBQWM7SUFDZHdLLGNBQWMsRUFBZEEsY0FBYztJQUNkQyxjQUFjLEVBQUVBLGNBQWMsSUFBSSxDQUFDLENBQUM7SUFDcENILGVBQWUsRUFBZkEsZUFBZTtJQUNmMUMsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJDLGtCQUFrQixFQUFsQkEsa0JBQWtCO0lBQ2xCa0ssY0FBYyxFQUFFcFIsT0FBTyxDQUFDa1IsZ0JBQWdCLENBQUM7SUFDekNBLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCbkssQ0FBQyxFQUFEQTtFQUNGLENBQUMsQ0FBQztFQUVGLElBQU1zSyxnQkFBZ0IsR0FBRyxDQUFDLENBQUN4TCxRQUFRO0VBRW5DelIsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUNxUyxhQUFhLEVBQUU7TUFDbEIyQix1QkFBdUIsQ0FBQ21DLE9BQU8sR0FBRyxJQUFJO01BQ3RDO0lBQ0Y7SUFDQSxJQUFNK0csT0FBTyxHQUFHaGIsb0JBQW9CLENBQUN1SSxRQUFRLENBQUMvRCxFQUFFLENBQUM7SUFDakQsSUFBSSxDQUFBd1csT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVuRCxlQUFlLE1BQUsxSCxhQUFhLElBQUksT0FBTzZLLE9BQU8sQ0FBQzlHLFNBQVMsS0FBSyxRQUFRLElBQUk4RyxPQUFPLENBQUM5RyxTQUFTLEdBQUcsQ0FBQyxFQUFFO01BQ2hIcEMsdUJBQXVCLENBQUNtQyxPQUFPLEdBQUcrRyxPQUFPLENBQUM5RyxTQUFTO0lBQ3JEO0VBQ0YsQ0FBQyxFQUFFLENBQUMzTCxRQUFRLENBQUMvRCxFQUFFLEVBQUUyTCxhQUFhLENBQUMsQ0FBQztFQUVoQ3BTLGVBQWUsQ0FBQyxZQUFNO0lBQ3BCLElBQUlvVixlQUFlLElBQUlyQix1QkFBdUIsQ0FBQ21DLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQ2xELFdBQVcsQ0FBQ2tELE9BQU8sRUFBRTtJQUN4RmxELFdBQVcsQ0FBQ2tELE9BQU8sQ0FBQ0MsU0FBUyxHQUFHcEMsdUJBQXVCLENBQUNtQyxPQUFPO0lBQy9EOUMsZ0JBQWdCLENBQUM4QyxPQUFPLEdBQUduQyx1QkFBdUIsQ0FBQ21DLE9BQU87SUFDMURuQyx1QkFBdUIsQ0FBQ21DLE9BQU8sR0FBRyxJQUFJO0VBQ3hDLENBQUMsRUFBRSxDQUFDZCxlQUFlLEVBQUVELFFBQVEsQ0FBQ3ZMLE1BQU0sQ0FBQyxDQUFDOztFQUV0QztFQUNBO0VBQ0EsSUFBTXNULFdBQVcsR0FBR2pkLE1BQU0sQ0FBQ3VSLFFBQVEsQ0FBQztFQUNwQ3hSLGVBQWUsQ0FBQyxZQUFNO0lBQ3BCLElBQUlrZCxXQUFXLENBQUNoSCxPQUFPLEtBQUsxRSxRQUFRLElBQUl3QixXQUFXLENBQUNrRCxPQUFPLEVBQUU7TUFDM0QsSUFBTWlILGNBQWMsR0FBRy9KLGdCQUFnQixDQUFDOEMsT0FBTztNQUMvQ2xELFdBQVcsQ0FBQ2tELE9BQU8sQ0FBQ0MsU0FBUyxHQUFHZ0gsY0FBYztNQUM5Q0QsV0FBVyxDQUFDaEgsT0FBTyxHQUFHMUUsUUFBUTtJQUNoQyxDQUFDLE1BQU07TUFDTDBMLFdBQVcsQ0FBQ2hILE9BQU8sR0FBRzFFLFFBQVE7SUFDaEM7RUFDRixDQUFDLEVBQUUsQ0FBQ0EsUUFBUSxDQUFDLENBQUM7RUFFZCxJQUFJNEQsZUFBZSxFQUFFO0lBQ25CLG9CQUNFbFIsSUFBQSxDQUFDbkMsSUFBSTtNQUFDcWIsSUFBSTtNQUFBblksUUFBQSxlQUNSZixJQUFBLENBQUNwQyxNQUFNLElBQUU7SUFBQyxDQUNOLENBQUM7RUFFWDtFQUVBLElBQU1tYSxXQUFXLEdBQUc5RyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3ZMLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakQsSUFBTXlULHdCQUF3QixHQUM1QixDQUFDLENBQUNwQixXQUFXLElBQUl4YSwrQkFBK0IsQ0FBQ3dhLFdBQVcsQ0FBQ3hWLEVBQUUsQ0FBQyxLQUFLNk8sZUFBZSxJQUFJQyxTQUFTLENBQUM7RUFFcEcsSUFBTStILGVBQWUsZ0JBQ25CaFosS0FBQSxDQUFBRixTQUFBO0lBQUFhLFFBQUEsR0FDR29RLHFCQUFxQixpQkFBSW5SLElBQUEsQ0FBQy9DLFdBQVc7TUFBQ29jLElBQUksRUFBRTdLLENBQUMsQ0FBQyxrQkFBa0I7SUFBRSxDQUFFLENBQUMsZUFDdEV4TyxJQUFBLENBQUFFLFNBQUE7TUFBQWEsUUFBQSxFQUNHa1EsUUFBUSxDQUFDN08sR0FBRyxDQUFDLFVBQUNhLE9BQU8sRUFBRTRJLEtBQUssRUFBSztRQUFBLElBQUF5TixvQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxXQUFBO1FBQ2hDLElBQU1DLGtCQUFrQixHQUFHelcsT0FBTyxDQUFDeUQsSUFBSSxLQUFLbEssZUFBZSxDQUFDNkssU0FBUyxJQUFJcEUsT0FBTyxDQUFDb0QsSUFBSSxDQUFDOUQsRUFBRSxLQUFLLFdBQVc7UUFDeEcsSUFBTTBELGFBQWEsR0FBRzRGLEtBQUssS0FBS29GLFFBQVEsQ0FBQ3ZMLE1BQU0sR0FBRyxDQUFDO1FBQ25ELElBQU00QixzQkFBc0IsR0FDMUJvUyxrQkFBa0IsSUFBSXpULGFBQWEsSUFBSTFJLCtCQUErQixDQUFDMEYsT0FBTyxDQUFDVixFQUFFLENBQUM7UUFDcEYsSUFBTU8sV0FBVyxHQUFHd0Usc0JBQXNCLEtBQUs4SixlQUFlLElBQUlDLFNBQVMsQ0FBQzs7UUFFNUU7UUFDQTtRQUNBLElBQ0UsQ0FBQy9KLHNCQUFzQixJQUN2QixDQUFDeEUsV0FBVyxJQUNaLEVBQUUsQ0FBQXdXLG9CQUFBLEdBQUFyVyxPQUFPLENBQUMwRCxXQUFXLGNBQUEyUyxvQkFBQSxlQUFuQkEsb0JBQUEsQ0FBcUI1VCxNQUFNLEtBQUE2VCxnQkFBQSxHQUFJdFcsT0FBTyxDQUFDbUMsT0FBTyxjQUFBbVUsZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUI3VCxNQUFNLENBQUMsSUFDekQsQ0FBQ3pDLE9BQU8sQ0FBQ0EsT0FBTyxJQUNoQixHQUFBdVcsZ0JBQUEsR0FBQ3ZXLE9BQU8sQ0FBQzBXLE9BQU8sY0FBQUgsZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUIvVyxJQUFJLEtBQ3RCLENBQUNRLE9BQU8sQ0FBQ2dDLFFBQVEsRUFFakIsT0FBTyxJQUFJO1FBRWIsSUFBTTJVLGVBQWUsR0FDbkIsQ0FBQTNXLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNFcsVUFBVSxNQUFLeFUsU0FBUyxJQUFJcEMsT0FBTyxDQUFDNFcsVUFBVSxLQUFLLElBQUksR0FDNUQsSUFBSSxHQUNKNVcsT0FBTyxDQUFDNFcsVUFBVSxHQUNoQnZhLFFBQVEsQ0FBQ3dhLFNBQVMsR0FDbEJ4YSxRQUFRLENBQUN5YSxXQUFXOztRQUU1QjtRQUNBLElBQU1DLFVBQVUsSUFBQVAsV0FBQSxHQUFHeFcsT0FBTyxDQUFDVixFQUFFLGNBQUFrWCxXQUFBLGNBQUFBLFdBQUEsVUFBQTVQLE1BQUEsQ0FBV2dDLEtBQUssQ0FBRTtRQUUvQyxJQUFNb08sTUFBTSxHQUFHeGMsa0JBQWtCLENBQUN3RixPQUFPLENBQUM7UUFDMUMsSUFBTWlYLG1CQUFtQixHQUFHeGMsdUJBQXVCLENBQUN1VCxRQUFRLEVBQUVoTyxPQUFPLENBQUM7UUFDdEUsSUFBTWtYLFFBQVEsR0FDWixDQUFDLENBQUNELG1CQUFtQixJQUNyQixDQUFDcFgsV0FBVyxJQUNaLENBQUNHLE9BQU8sQ0FBQytCLE9BQU8sSUFDaEIsQ0FBQy9CLE9BQU8sQ0FBQ2dDLFFBQVEsS0FDaEJoQyxPQUFPLENBQUNzQixtQkFBbUIsSUFBSyxDQUFDdEIsT0FBTyxDQUFDbVgsWUFBWSxJQUFJLENBQUMsQ0FBQ0gsTUFBTyxDQUFDO1FBRXRFLG9CQUNFL2QsY0FBQSxDQUFDZ0ssV0FBVyxFQUFBOUUsYUFBQSxDQUFBQSxhQUFBLEtBQ042QixPQUFPO1VBQ1hvWCxHQUFHLEVBQUVMLFVBQVc7VUFDaEIxVCxRQUFRLEVBQUVBLFFBQVM7VUFDbkIxRSxrQkFBa0IsRUFBRUEsa0JBQW1CO1VBQ3ZDMEQsY0FBYyxFQUFFQSxjQUFlO1VBQy9Ca0Isc0JBQXNCLEVBQUVBLHNCQUF1QjtVQUMvQ1gscUJBQXFCLEVBQUVBLHFCQUFzQjtVQUM3Q1ksV0FBVyxFQUFFMFQsUUFBUSxHQUFHO1lBQUEsT0FBTTFJLFlBQVksQ0FBQ3hPLE9BQU8sQ0FBQztVQUFBLElBQUdvQyxTQUFVO1VBQ2hFd0IscUJBQXFCLEVBQUUsQ0FBQyxDQUFDZ0ssNEJBQTRCLENBQUM1TixPQUFPLENBQUNWLEVBQUUsQ0FBRTtVQUNsRWlELGVBQWUsRUFBRW9VLGVBQWdCO1VBQ2pDOVcsV0FBVyxFQUFFQSxXQUFZO1VBQ3pCbUQsYUFBYSxFQUFFQSxhQUFjO1VBQzdCcUgsUUFBUSxFQUFFQSxRQUFTO1VBQ25CeEcsY0FBYyxFQUFFaEUsV0FBVyxHQUFHOFYsb0JBQW9CLEdBQUc7UUFBSyxFQUMzRCxDQUFDO01BRU4sQ0FBQztJQUFDLENBQ0YsQ0FBQyxFQUNGLENBQUNPLHdCQUF3QixJQUFJUCxvQkFBb0IsaUJBQ2hENVksSUFBQSxDQUFDYix1QkFBdUI7TUFBQTRCLFFBQUEsZUFDdEJmLElBQUEsQ0FBQzlDLHNCQUFzQjtRQUFDd1AsUUFBUSxFQUFFa007TUFBcUIsQ0FBRTtJQUFDLENBQ25DLENBQzFCLGVBR0Q1WSxJQUFBLENBQUNwQixZQUFZO01BQUMwYixHQUFHLEVBQUU5SyxXQUFZO01BQUMsZUFBWTtJQUFNLENBQUUsQ0FBQztFQUFBLENBQ3JELENBQ0g7RUFFRDtJQUFBO0lBQ0U7SUFDQTtJQUNBcFAsS0FBQSxDQUFDM0IsZUFBZTtNQUNkOGIsZUFBZSxFQUFFekIsZ0JBQWlCO01BQ2xDMEIsT0FBTyxFQUFFcEcsc0JBQXVCO01BQ2hDcUcsWUFBWSxFQUFFckcsc0JBQXVCO01BQUFyVCxRQUFBLGdCQUVyQ2YsSUFBQSxDQUFDWixxQkFBcUI7UUFBQ3NiLEtBQUssRUFBRXJLLGVBQWdCO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxFQUNuRXlJLGdCQUFnQixnQkFDZjlZLElBQUEsQ0FBQ3RCLGdCQUFnQjtRQUFDNGIsR0FBRyxFQUFFeEwsV0FBWTtRQUFDNkwsUUFBUSxFQUFFdEYsb0JBQXFCO1FBQUF0VSxRQUFBLGVBQ2pFZixJQUFBLENBQUNyQixlQUFlO1VBQUM0YixlQUFlLEVBQUV6QixnQkFBaUI7VUFBQS9YLFFBQUEsRUFBRXFZO1FBQWUsQ0FBa0I7TUFBQyxDQUN2RSxDQUFDLGdCQUVuQnBaLElBQUEsQ0FBQ3JCLGVBQWU7UUFBQzJiLEdBQUcsRUFBRXhMLFdBQVk7UUFBQzZMLFFBQVEsRUFBRXRGLG9CQUFxQjtRQUFDa0YsZUFBZSxFQUFFLEtBQU07UUFBQXhaLFFBQUEsRUFDdkZxWTtNQUFlLENBQ0QsQ0FDbEIsZUFFRHBaLElBQUEsQ0FBQ1gsd0JBQXdCO1FBQUNxYixLQUFLLEVBQUVqSyxrQkFBbUI7UUFBQyxlQUFZO01BQU0sQ0FBRSxDQUFDLEVBRXpFUixrQkFBa0IsaUJBQ2pCN1AsS0FBQSxDQUFDOUIsb0JBQW9CO1FBQUN3TCxJQUFJLEVBQUMsUUFBUTtRQUFDdEgsT0FBTyxFQUFFNFMseUJBQTBCO1FBQUFyVSxRQUFBLGdCQUNyRWYsSUFBQSxDQUFDekIsZ0JBQWdCO1VBQUNxYyxRQUFRLEVBQUV2SixTQUFVO1VBQUMsbUJBQVc7VUFBQXRRLFFBQUEsZUFDaERYLEtBQUEsQ0FBQzVCLGFBQWE7WUFBQXVDLFFBQUEsZ0JBQ1pmLElBQUEsV0FBTyxDQUFDLGVBQ1JBLElBQUEsV0FBTyxDQUFDLGVBQ1JBLElBQUEsV0FBTyxDQUFDO1VBQUEsQ0FDSztRQUFDLENBQ0EsQ0FBQyxlQUNuQkEsSUFBQSxDQUFDekIsZ0JBQWdCO1VBQUNxYyxRQUFRLEVBQUUsQ0FBQ3ZKLFNBQVU7VUFBQyxtQkFBVztVQUFBdFEsUUFBQSxlQUNqRGYsSUFBQTtZQUFLNmEsS0FBSyxFQUFDLDRCQUE0QjtZQUFDQyxLQUFLLEVBQUUsRUFBRztZQUFDaEgsTUFBTSxFQUFFLEVBQUc7WUFBQ29GLElBQUksRUFBQyxNQUFNO1lBQUFuWSxRQUFBLGVBQ3hFZixJQUFBO2NBQ0UrYSxNQUFNLEVBQUMsU0FBUztjQUNoQkMsYUFBYSxFQUFDLE9BQU87Y0FDckJDLGNBQWMsRUFBQyxPQUFPO2NBQ3RCQyxXQUFXLEVBQUUsR0FBSTtjQUNqQkMsQ0FBQyxFQUFDO1lBQW1DLENBQ3RDO1VBQUMsQ0FDQztRQUFDLENBQ1UsQ0FBQztNQUFBLENBQ0MsQ0FDdkI7SUFBQSxDQUNjO0VBQUM7QUFFdEIsQ0FBQztBQUVELE9BQU8sSUFBTUMsY0FBYyxnQkFBRzFmLEtBQUssQ0FBQ0MsSUFBSSxDQUFDb1MsbUJBQW1CLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|