.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -moz-transform: translate(0, -25%);
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -moz-transform: translate(0, 0);
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #ffffff;
  border: 1px solid #999999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 6px;
  -moz-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  background-color: #000000;
}
.modal-backdrop.fade {
  -webkit-opacity: 0;
  -moz-opacity: 0;
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  -webkit-opacity: 0.5;
  -moz-opacity: 0.5;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
  min-height: 16.42857143px;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -moz-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.close {
  float: right;
  font-size: 21px;
  font-weight: bold;
  line-height: 1;
  color: #000000;
  text-shadow: 0 1px 0 #ffffff;
  -webkit-opacity: 0.2;
  -moz-opacity: 0.2;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000000;
  text-decoration: none;
  cursor: pointer;
  -webkit-opacity: 0.5;
  -moz-opacity: 0.5;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
* {
  font-family: consolas, monospace;
}
.x-form-item,
.x-form-field {
  font-family: consolas, monospace;
}
html {
  height: 100%;
}
body {
  font: 14px consolas, monospace, Arial, sans-serif;
  margin: 0;
  padding: 0;
  height: 100%;
  display: flex;
  flex-direction: column;
}
.main-header {
  color: #5168a2;
  background-color: #f5f5f5;
  flex-shrink: 0;
}
.webfiddle-light-blue,
.sitesim-light-blue {
  color: #00b7ff;
}
.main-header_heading {
  top: 0;
  position: relative;
  padding: 10px;
  padding-top: 10px;
  font-family: consolas, Courier, monospace;
  display: inline;
  vertical-align: middle;
}
.main-content {
  min-height: 40px;
  width: 100%;
  flex: 1;
  overflow: hidden;
}
a {
  color: #5168a2;
}
a:hover {
  color: #00b7ff;
}
.code-editor {
  height: 100%;
}
.CodeMirror {
  height: 100%;
}
.CodeMirror-scroll {
  padding: 0;
}
.CodeMirror-gutters {
  height: 100% !important;
}
.header-btn {
  display: inline-block;
  vertical-align: middle;
  padding: 10px;
  width: 75px;
  position: relative;
  font-size: 16px;
  text-decoration: none;
  -moz-transition: all 0.3s ease-in;
  -webkit-transition: all 0.3s ease-in;
  -o-transition: all 0.3s ease-in;
  transition: all 0.3s ease-in;
}
.header-btn:hover,
.header-btn:focus {
  color: white;
  background-color: #5168a2;
}
.header-btn .fa {
  font-size: 23px;
}
@media (min-width: 650px) {
  .header-btn {
    width: 85px;
  }
}
.web-frame,
.web-iframe {
  width: 100%;
  height: 100%;
  border: 0;
}
.mm-sharing-btns {
  font-size: 21.66px;
  margin-top: 0;
  margin-bottom: 50px;
}
@media (min-width: 481px) {
  .mm-sharing-btns {
    font-size: 27.36px;
  }
}
@media (min-width: 641px) {
  .mm-sharing-btns {
    font-size: 29.64px;
  }
}
@media (min-width: 961px) {
  .mm-sharing-btns {
    font-size: 30.78px;
  }
}
@media (min-width: 1025px) {
  .mm-sharing-btns {
    font-size: 31.92px;
  }
}
@media (min-width: 1281px) {
  .mm-sharing-btns {
    font-size: 34.2px;
  }
}
.mm-sharing-btns a {
  text-decoration: none;
}
.mm-share-btn {
  margin-top: 10px;
  font-size: 36px;
}
.mm-share-btn--twitter {
  color: #4098fd;
}
.mm-share-btn--google-plus {
  color: #ed142e;
}
.mm-share-btn--pinterest {
  color: #ca2027;
}
.mm-share-btn--linked-in {
  color: #1a84bc;
}
.mm-share-btn--reddit {
  color: #cee3f8;
}
.mm-share-btn--stumbleupon {
  color: #ea4b24;
}
.mm-share-btn--hackernews {
  color: #f1631f;
}
.web-iframe-loading {
  height: 100%;
  width: 100%;
  text-align: center;
  display: table;
}
.web-iframe-loading .web-bigspinner {
  vertical-align: middle;
  display: table-cell;
}
.web-bigspinner {
  font-size: 30px;
}
.web-extra {
  position: absolute;
}
.webfiddle-share-link {
  width: 80%;
}
.inlet_slider {
  z-index: 9999;
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2xlc3MvbW9kYWxzLmxlc3MiLCJsZXNzaGF0Lmxlc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9sZXNzL21peGlucy92ZW5kb3ItcHJlZml4ZXMubGVzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2xlc3MvbWl4aW5zL29wYWNpdHkubGVzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2xlc3MvY2xvc2UubGVzcyIsInN0eWxlLmxlc3MiLCJtaXhpbnMubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQTtFQUNFLGdCQUFBOztBQUlGO0VBQ0UsYUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLE1BQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLE9BQUE7RUFDQSxhQUFBO0VBQ0EsaUNBQUE7RUFJQSxVQUFBOztBQUdBLE1BQUMsS0FBTTtFQ2lsRmlSLGdCQUFnQixrQkFBaEI7RUNsK0V4UixtQkFBbUIsa0JBQW5CO0VBQ0ksZUFBZSxrQkFBZjtFQUNDLGNBQWMsa0JBQWQ7RUFDRyxXQUFXLGtCQUFYO0VBa0VSLG1EQUFBO0VBQ0csNkNBQUE7RUFDRSx5Q0FBQTtFQUNHLG1DQUFBOztBRm5MUixNQUFDLEdBQUk7RUM2a0ZtUixnQkFBZ0IsZUFBaEI7RUNsK0V4UixtQkFBbUIsZUFBbkI7RUFDSSxlQUFlLGVBQWY7RUFDQyxjQUFjLGVBQWQ7RUFDRyxXQUFXLGVBQVg7O0FGNUdWLFdBQVk7RUFDVixrQkFBQTtFQUNBLGdCQUFBOztBQUlGO0VBQ0Usa0JBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTs7QUFJRjtFQUNFLGtCQUFBO0VBQ0EseUJBQUE7RUFDQSx5QkFBQTtFQUNBLG9DQUFBO0VBQ0Esa0JBQUE7RUM0dkJ3Uiw2Q0FBQTtFQy91QnhSLGdEQUFBO0VBQ1Esd0NBQUE7RUZaUiw0QkFBQTtFQUVBLFVBQUE7O0FBSUY7RUFDRSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxRQUFBO0VBQ0EsT0FBQTtFQUNBLHlCQUFBOztBQUVBLGVBQUM7RUN5bUR1UixrQkFBQTtFQUVBLGVBQUE7RUU5cUR4UixVQUFBO0VBR0Esd0JBQUE7O0FIaUVBLGVBQUM7RUN3bUR1UixvQkFBQTtFQUVBLGlCQUFBO0VFOXFEeFIsWUFBQTtFQUdBLHlCQUFBOztBSHNFRjtFQUNFLGFBQUE7RUFDQSxnQ0FBQTtFQUNBLHlCQUFBOztBQUdGLGFBQWM7RUFDWixnQkFBQTs7QUFJRjtFQUNFLFNBQUE7RUFDQSx1QkFBQTs7QUFLRjtFQUNFLGtCQUFBO0VBQ0EsYUFBQTs7QUFJRjtFQUNFLGFBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBOztBQUhGLGFBT0UsS0FBSztFQUNILGdCQUFBO0VBQ0EsZ0JBQUE7O0FBVEosYUFZRSxXQUFXLEtBQUs7RUFDZCxpQkFBQTs7QUFiSixhQWdCRSxXQUFXO0VBQ1QsY0FBQTs7QUFLSjtFQUNFLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7O0FBa0JGLFFBZG1DO0VBRWpDO0lBQ0UsWUFBQTtJQUNBLGlCQUFBOztFQUVGO0lDMHFCd1IsOENBQUE7SUMvdUJ4UixpREFBQTtJQUNRLHlDQUFBOztFRnlFUjtJQUFZLFlBQUE7OztBQU1kLFFBSG1DO0VBQ2pDO0lBQVksWUFBQTs7O0FJN0lkO0VBQ0UsWUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0EsNEJBQUE7RUhvcUR3UixvQkFBQTtFQUVBLGlCQUFBO0VFOXFEeFIsWUFBQTtFQUdBLHlCQUFBOztBQ1FBLE1BQUM7QUFDRCxNQUFDO0VBQ0MsY0FBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFSDZwRHNSLG9CQUFBO0VBRUEsaUJBQUE7RUU5cUR4UixZQUFBO0VBR0EseUJBQUE7O0FDbUJBLE1BQU07RUFDSixVQUFBO0VBQ0EsZUFBQTtFQUNBLHVCQUFBO0VBQ0EsU0FBQTtFQUNBLHdCQUFBOztBQ3RCSjtFQUNJLGdDQUFBOztBQUdKO0FBQWM7RUFDVixnQ0FBQTs7QUFHSjtFQUNJLGlEQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7O0FBR0o7RUFDSSxjQUFBO0VBQ0EseUJBQUE7O0FBR0o7RUFDSSxjQUFBOztBQUdKO0VBQ0ksU0FBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLGlCQUFBO0VBQ0EseUNBQUE7RUFDQSxlQUFBOztBQUdKO0VBQ0ksZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTs7QUFHSjtFQUNJLGNBQUE7O0FBQ0EsQ0FBQztFQUNHLGNBQUE7O0FBSVI7RUFDSSxZQUFBOztBQUdKO0VBQ0ksWUFBQTs7QUFHSjtFQUNJLFVBQUE7O0FBR0o7RUFDSSx1QkFBQTs7QUFHSjtFQUNJLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsV0FBQTtFQUVBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0VKODRFc1QsaUNBQUE7RUM3eEV4VCxvQ0FBQTtFQUNLLCtCQUFBO0VBQ0csNEJBQUE7O0FHbEhOLFdBQUM7QUFBUSxXQUFDO0VBQ04sWUFBQTtFQUNBLHlCQUFBOztBQVhSLFdBYUk7RUFDSSxlQUFBOztBQVFSLFFBSDZCO0VBRzdCO0lBRk8sV0FBQTs7O0FBSVA7QUFBWTtFQUNSLFdBQUE7RUFDQSxZQUFBO0VBQ0EsU0FBQTs7QUFHSjtFQ2xHSSxrQkFBQTtFRHVHQSxhQUFBO0VBQ0EsbUJBQUE7O0FDbkdBLFFBSHFDO0VBR3JDO0lBRkksa0JBQUE7OztBQUtKLFFBSDZDO0VBRzdDO0lBRkksa0JBQUE7OztBQUtKLFFBSDhDO0VBRzlDO0lBRkksa0JBQUE7OztBQUtKLFFBSHFDO0VBR3JDO0lBRkksa0JBQUE7OztBQUtSLFFBSHdDO0VBR3hDO0lBRlEsaUJBQUE7OztBRG1GUixnQkFFSTtFQUNJLHFCQUFBOztBQU1SO0VBQ0ksZ0JBQUE7RUFDQSxlQUFBOztBQUdKO0VBQ0ksY0FBQTs7QUFHSjtFQUNJLGNBQUE7O0FBR0o7RUFDSSxjQUFBOztBQUdKO0VBQ0ksY0FBQTs7QUFHSjtFQUNJLGNBQUE7O0FBR0o7RUFDSSxjQUFBOztBQUdKO0VBQ0ksY0FBQTs7QUFHSjtFQUNJLFlBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBOztBQUpKLG1CQUtJO0VBQ0ksc0JBQUE7RUFDQSxtQkFBQTs7QUFJUjtFQUNJLGVBQUE7O0FBR0o7RUFDSSxrQkFBQTs7QUFHSjtFQUNJLFVBQUE7O0FBR0o7RUFDSSxhQUFBIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vLyBNb2RhbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIC5tb2RhbC1vcGVuICAgICAgLSBib2R5IGNsYXNzIGZvciBraWxsaW5nIHRoZSBzY3JvbGxcbi8vIC5tb2RhbCAgICAgICAgICAgLSBjb250YWluZXIgdG8gc2Nyb2xsIHdpdGhpblxuLy8gLm1vZGFsLWRpYWxvZyAgICAtIHBvc2l0aW9uaW5nIHNoZWxsIGZvciB0aGUgYWN0dWFsIG1vZGFsXG4vLyAubW9kYWwtY29udGVudCAgIC0gYWN0dWFsIG1vZGFsIHcvIGJnIGFuZCBjb3JuZXJzIGFuZCBzaGl0XG5cbi8vIEtpbGwgdGhlIHNjcm9sbCBvbiB0aGUgYm9keVxuLm1vZGFsLW9wZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyBDb250YWluZXIgdGhhdCB0aGUgbW9kYWwgc2Nyb2xscyB3aXRoaW5cbi5tb2RhbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiBAemluZGV4LW1vZGFsO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgLy8gUHJldmVudCBDaHJvbWUgb24gV2luZG93cyBmcm9tIGFkZGluZyBhIGZvY3VzIG91dGxpbmUuIEZvciBkZXRhaWxzLCBzZWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTA5NTEuXG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gV2hlbiBmYWRpbmcgaW4gdGhlIG1vZGFsLCBhbmltYXRlIGl0IHRvIHNsaWRlIGRvd25cbiAgJi5mYWRlIC5tb2RhbC1kaWFsb2cge1xuICAgIC50cmFuc2xhdGUoMCwgLTI1JSk7XG4gICAgLnRyYW5zaXRpb24tdHJhbnNmb3JtKH5cIjAuM3MgZWFzZS1vdXRcIik7XG4gIH1cbiAgJi5pbiAubW9kYWwtZGlhbG9nIHsgLnRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEBtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjsgLy9vbGQgYnJvd3NlcnMgZmFsbGJhY2sgKGllOCBldGMpXG4gIGJvcmRlcjogMXB4IHNvbGlkIEBtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIC5ib3gtc2hhZG93KDAgM3B4IDlweCByZ2JhKDAsMCwwLC41KSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIC8vIFJlbW92ZSBmb2N1cyBvdXRsaW5lIGZyb20gb3BlbmVkIG1vZGFsXG4gIG91dGxpbmU6IDA7XG59XG5cbi8vIE1vZGFsIGJhY2tncm91bmRcbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyAub3BhY2l0eSgwKTsgfVxuICAmLmluIHsgLm9wYWNpdHkoQG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogQG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgbWluLWhlaWdodDogKEBtb2RhbC10aXRsZS1wYWRkaW5nICsgQG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcbn1cbi8vIENsb3NlIGljb25cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cblxuLy8gVGl0bGUgdGV4dCB3aXRoaW4gaGVhZGVyXG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiBAbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ7XG59XG5cbi8vIE1vZGFsIGJvZHlcbi8vIFdoZXJlIGFsbCBtb2RhbCBjb250ZW50IHJlc2lkZXMgKHNpYmxpbmcgb2YgLm1vZGFsLWhlYWRlciBhbmQgLm1vZGFsLWZvb3Rlcilcbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiBAbW9kYWwtaW5uZXItcGFkZGluZztcbn1cblxuLy8gRm9vdGVyIChmb3IgYWN0aW9ucylcbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiBAbW9kYWwtaW5uZXItcGFkZGluZztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IC8vIHJpZ2h0IGFsaWduIGJ1dHRvbnNcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yO1xuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTsgLy8gY2xlYXIgaXQgaW4gY2FzZSBmb2xrcyB1c2UgLnB1bGwtKiBjbGFzc2VzIG9uIGJ1dHRvbnNcblxuICAvLyBQcm9wZXJseSBzcGFjZSBvdXQgYnV0dG9uc1xuICAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyAvLyBhY2NvdW50IGZvciBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHdoaWNoIGdldHMgdGhlIGJvdHRvbSBtYXJnaW4gbGlrZSBhbGwgb3RoZXIgaW5wdXRzXG4gIH1cbiAgLy8gYnV0IG92ZXJyaWRlIHRoYXQgZm9yIGJ1dHRvbiBncm91cHNcbiAgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIH1cbiAgLy8gYW5kIG92ZXJyaWRlIGl0IGZvciBibG9jayBidXR0b25zIGFzIHdlbGxcbiAgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi8vIE1lYXN1cmUgc2Nyb2xsYmFyIHdpZHRoIGZvciBwYWRkaW5nIGJvZHkgZHVyaW5nIG1vZGFsIHNob3cvaGlkZVxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbi8vIFNjYWxlIHVwIHRoZSBtb2RhbFxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gIC8vIEF1dG9tYXRpY2FsbHkgc2V0IG1vZGFsJ3Mgd2lkdGggZm9yIGxhcmdlciB2aWV3cG9ydHNcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6IEBtb2RhbC1tZDtcbiAgICBtYXJnaW46IDMwcHggYXV0bztcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgLmJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogQG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogQG1vZGFsLWxnOyB9XG59XG4iLCIvLyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqIFxuLy8gIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVTU0hhdCAgICAgICAgICAgICAgICAgICAgICAgICAgPiBcbi8vICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICogXG4vL1xuLy8gTWFkZSB3aXRoIEVuZXJneSBkcmlua3MgaW4gUHJhZ3VlLCBDemVjaCBSZXB1YmxpYy5cbi8vIEhhbmRjcmFmdGVkIGJ5IFBldHIgQnJ6ZWssIGxlc3NoYXQuY29tXG4vLyBXb3JrcyBncmVhdCB3aXRoIENTUyBIYXQgY3NzaGF0LmNvbVxuXG4vLyB2ZXJzaW9uOiB2Mi4wLjE1ICgyMDE0LTAxLTMxKVxuXG4vLyBUQUJMRSBPRiBNSVhJTlM6XG5cdC8vIGFsaWduLWNvbnRlbnRcblx0Ly8gYWxpZ24taXRlbXNcblx0Ly8gYWxpZ24tc2VsZlxuXHQvLyBhbmltYXRpb25cblx0Ly8gYW5pbWF0aW9uLWRlbGF5XG5cdC8vIGFuaW1hdGlvbi1kaXJlY3Rpb25cblx0Ly8gYW5pbWF0aW9uLWR1cmF0aW9uXG5cdC8vIGFuaW1hdGlvbi1maWxsLW1vZGVcblx0Ly8gYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFxuXHQvLyBhbmltYXRpb24tbmFtZVxuXHQvLyBhbmltYXRpb24tcGxheS1zdGF0ZVxuXHQvLyBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uXG5cdC8vIGFwcGVhcmFuY2Vcblx0Ly8gYmFja2ZhY2UtdmlzaWJpbGl0eVxuXHQvLyBiYWNrZ3JvdW5kLWNsaXBcblx0Ly8gYmFja2dyb3VuZC1pbWFnZVxuXHQvLyBiYWNrZ3JvdW5kLW9yaWdpblxuXHQvLyBiYWNrZ3JvdW5kLXNpemVcblx0Ly8gYmx1clxuXHQvLyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXG5cdC8vIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzXG5cdC8vIGJvcmRlci1pbWFnZVxuXHQvLyBib3JkZXItcmFkaXVzXG5cdC8vIGJvcmRlci10b3AtbGVmdC1yYWRpdXNcblx0Ly8gYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcblx0Ly8gYm94LXNoYWRvd1xuXHQvLyBib3gtc2l6aW5nXG5cdC8vIGJyaWdodG5lc3Ncblx0Ly8gY2FsY1xuXHQvLyBjb2x1bW4tY291bnRcblx0Ly8gY29sdW1uLWdhcFxuXHQvLyBjb2x1bW4tcnVsZVxuXHQvLyBjb2x1bW4td2lkdGhcblx0Ly8gY29sdW1uc1xuXHQvLyBjb250cmFzdFxuXHQvLyBkaXNwbGF5XG5cdC8vIGRyb3Atc2hhZG93XG5cdC8vIGZpbHRlclxuXHQvLyBmbGV4XG5cdC8vIGZsZXgtYmFzaXNcblx0Ly8gZmxleC1kaXJlY3Rpb25cblx0Ly8gZmxleC1ncm93XG5cdC8vIGZsZXgtc2hyaW5rXG5cdC8vIGZsZXgtd3JhcFxuXHQvLyBmb250LWZhY2Vcblx0Ly8gZ3JheXNjYWxlXG5cdC8vIGh1ZS1yb3RhdGVcblx0Ly8gaHlwaGVuc1xuXHQvLyBpbnZlcnRcblx0Ly8ganVzdGlmeS1jb250ZW50XG5cdC8vIGtleWZyYW1lc1xuXHQvLyBvcGFjaXR5XG5cdC8vIG9yZGVyXG5cdC8vIHBlcnNwZWN0aXZlXG5cdC8vIHBlcnNwZWN0aXZlLW9yaWdpblxuXHQvLyBwbGFjZWhvbGRlclxuXHQvLyByb3RhdGVcblx0Ly8gcm90YXRlM2Rcblx0Ly8gcm90YXRlWFxuXHQvLyByb3RhdGVZXG5cdC8vIHJvdGF0ZVpcblx0Ly8gc2F0dXJhdGVcblx0Ly8gc2NhbGVcblx0Ly8gc2NhbGUzZFxuXHQvLyBzY2FsZVhcblx0Ly8gc2NhbGVZXG5cdC8vIHNjYWxlWlxuXHQvLyBzZWxlY3Rpb25cblx0Ly8gc2VwaWFcblx0Ly8gc2l6ZVxuXHQvLyBza2V3XG5cdC8vIHNrZXdYXG5cdC8vIHNrZXdZXG5cdC8vIHRyYW5zZm9ybVxuXHQvLyB0cmFuc2Zvcm0tb3JpZ2luXG5cdC8vIHRyYW5zZm9ybS1zdHlsZVxuXHQvLyB0cmFuc2l0aW9uXG5cdC8vIHRyYW5zaXRpb24tZGVsYXlcblx0Ly8gdHJhbnNpdGlvbi1kdXJhdGlvblxuXHQvLyB0cmFuc2l0aW9uLXByb3BlcnR5XG5cdC8vIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uXG5cdC8vIHRyYW5zbGF0ZVxuXHQvLyB0cmFuc2xhdGUzZFxuXHQvLyB0cmFuc2xhdGVYXG5cdC8vIHRyYW5zbGF0ZVlcblx0Ly8gdHJhbnNsYXRlWlxuXHQvLyB1c2VyLXNlbGVjdFxuXG4vLyBDb25maWcgc3VwcG9ydGVkIGJyb3dzZXJzIGZvciB5b3VyIHByb2plY3RcbkB3ZWJraXQ6IHRydWU7XG5AbW96OiB0cnVlO1xuQG9wZXJhOiB0cnVlO1xuQG1zOiB0cnVlO1xuQHczYzogdHJ1ZTtcblxuLmFsaWduLWNvbnRlbnQoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcInN0cmV0Y2hcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3NfbXM6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwic3RyZXRjaFwiLFwiZmxleC1zdGFydFwiPT12YWx1ZT92YWx1ZT1cInN0YXJ0XCI6XCJmbGV4LWVuZFwiPT12YWx1ZT92YWx1ZT1cImVuZFwiOlwic3BhY2UtYmV0d2VlblwiPT12YWx1ZT92YWx1ZT1cImp1c3RpZnlcIjpcInNwYWNlLWFyb3VuZFwiPT12YWx1ZSYmKHZhbHVlPVwiZGlzdHJpYnV0ZVwiKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtYWxpZ24tY29udGVudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkgeyAtbXMtZmxleC1saW5lLXBhY2s6IEBwcm9jZXNzX21zOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYWxpZ24tY29udGVudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYWxpZ24taXRlbXMoLi4uKSB7XG5cbiAgQG9sZGVyd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3Nfb2xkZXJ3ZWJraXQ6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwic3RyZXRjaFwiLFwiZmxleC1zdGFydFwiPT12YWx1ZT92YWx1ZT1cInN0YXJ0XCI6XCJmbGV4LWVuZFwiPT12YWx1ZSYmKHZhbHVlPVwiZW5kXCIpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19tb3o6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwic3RyZXRjaFwiLFwiZmxleC1zdGFydFwiPT12YWx1ZT92YWx1ZT1cInN0YXJ0XCI6XCJmbGV4LWVuZFwiPT12YWx1ZSYmKHZhbHVlPVwiZW5kXCIpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJzdHJldGNoXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21zOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcInN0cmV0Y2hcIixcImZsZXgtc3RhcnRcIj09dmFsdWU/dmFsdWU9XCJzdGFydFwiOlwiZmxleC1lbmRcIj09dmFsdWUmJih2YWx1ZT1cImVuZFwiKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSB7IC13ZWJraXQtYm94LWFsaWduOiBAcHJvY2Vzc19vbGRlcndlYmtpdDsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHsgLW1vei1ib3gtYWxpZ246IEBwcm9jZXNzX21vejsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1hbGlnbi1pdGVtczogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkgeyAtbXMtZmxleC1hbGlnbjogQHByb2Nlc3NfbXM7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBhbGlnbi1pdGVtczogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIHRydWUsIEBvbGRlcndlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5hbGlnbi1zZWxmKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJhdXRvXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21zOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcImF1dG9cIixcImZsZXgtc3RhcnRcIj09dmFsdWU/dmFsdWU9XCJzdGFydFwiOlwiZmxleC1lbmRcIj09dmFsdWUmJih2YWx1ZT1cImVuZFwiKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtYWxpZ24tc2VsZjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkgeyAtbXMtYWxpZ24tc2VsZjogQHByb2Nlc3NfbXM7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBhbGlnbi1zZWxmOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5hbmltYXRpb24oLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIm5vbmVcIiwvXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWFuaW1hdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby1hbmltYXRpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5hbmltYXRpb24tZGVsYXkoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciB2YWx1ZVJlZ2V4PS8oPzpcXGQpKD86bXN8cykvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiB2YWx1ZVJlZ2V4LnRlc3QodmFsdWUpfHxcIjBcIj09PXZhbHVlfHwodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaCs9cGFyc2VGbG9hdChtYXRjaCwxMCk+MTA/XCJtc1wiOlwic1wifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1hbmltYXRpb24tZGVsYXk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tYW5pbWF0aW9uLWRlbGF5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGFuaW1hdGlvbi1kZWxheTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYW5pbWF0aW9uLWRpcmVjdGlvbiguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWV8fFwibm9ybWFsXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1hbmltYXRpb24tZGlyZWN0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLWFuaW1hdGlvbi1kaXJlY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uLWRpcmVjdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYW5pbWF0aW9uLWR1cmF0aW9uKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgdmFsdWVSZWdleD0vbXN8cy9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIHZhbHVlUmVnZXgudGVzdCh2YWx1ZSl8fFwiMFwiPT09dmFsdWV8fCh2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIG1hdGNoKz1wYXJzZUZsb2F0KG1hdGNoLDEwKT4xMD9cIm1zXCI6XCJzXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWFuaW1hdGlvbi1kdXJhdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby1hbmltYXRpb24tZHVyYXRpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uLWR1cmF0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5hbmltYXRpb24tZmlsbC1tb2RlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZXx8XCJub25lXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLWFuaW1hdGlvbi1maWxsLW1vZGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uLWZpbGwtbW9kZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWV8fFwiMFwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmFuaW1hdGlvbi1uYW1lKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZXx8XCJub25lXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYW5pbWF0aW9uLW5hbWU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tYW5pbWF0aW9uLW5hbWU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uLW5hbWU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmFuaW1hdGlvbi1wbGF5LXN0YXRlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZXx8XCJydW5uaW5nXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYW5pbWF0aW9uLXBsYXktc3RhdGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tYW5pbWF0aW9uLXBsYXktc3RhdGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYW5pbWF0aW9uLXBsYXktc3RhdGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlfHxcImVhc2VcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5hcHBlYXJhbmNlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWV8fFwibm9uZVwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1hcHBlYXJhbmNlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYXBwZWFyYW5jZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBhcHBlYXJhbmNlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmJhY2tmYWNlLXZpc2liaWxpdHkoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWV8fFwidmlzaWJsZVwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYmFja2ZhY2UtdmlzaWJpbGl0eTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby1iYWNrZmFjZS12aXNpYmlsaXR5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1iYWNrZmFjZS12aXNpYmlsaXR5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJhY2tmYWNlLXZpc2liaWxpdHk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5iYWNrZ3JvdW5kLWNsaXAoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZXx8XCJib3JkZXItYm94XCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWJhY2tncm91bmQtY2xpcDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBiYWNrZ3JvdW5kLWNsaXA6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYmFja2dyb3VuZC1pbWFnZSguLi4pIHtcblxuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2Vzc19tczogfmAoZnVuY3Rpb24odmFsdWUpe2Z1bmN0aW9uIGJhc2U2NF9lbmNvZGUoZGF0YSl7dmFyIG8xLG8yLG8zLGgxLGgyLGgzLGg0LGJpdHMsYjY0PVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixpPTAsYWM9MCxlbmM9XCJcIix0bXBfYXJyPVtdO2lmKCFkYXRhKXJldHVybiBkYXRhO2RvIG8xPWRhdGEuY2hhckNvZGVBdChpKyspLG8yPWRhdGEuY2hhckNvZGVBdChpKyspLG8zPWRhdGEuY2hhckNvZGVBdChpKyspLGJpdHM9bzE8PDE2fG8yPDw4fG8zLGgxPTYzJmJpdHM+PjE4LGgyPTYzJmJpdHM+PjEyLGgzPTYzJmJpdHM+PjYsaDQ9NjMmYml0cyx0bXBfYXJyW2FjKytdPWI2NC5jaGFyQXQoaDEpK2I2NC5jaGFyQXQoaDIpK2I2NC5jaGFyQXQoaDMpK2I2NC5jaGFyQXQoaDQpO3doaWxlKGk8ZGF0YS5sZW5ndGgpO2VuYz10bXBfYXJyLmpvaW4oXCJcIik7dmFyIHI9ZGF0YS5sZW5ndGglMztyZXR1cm4ocj9lbmMuc2xpY2UoMCxyLTMpOmVuYykrXCI9PT1cIi5zbGljZShyfHwzKX1pZih2YWx1ZT12YWx1ZXx8ODEyMTk5MSw4MTIxOTkxPT12YWx1ZSlyZXR1cm4gdmFsdWU7dmFyIGdyYWRpZW50cz0vbGluZWFyfHJhZGlhbC9nLnRlc3QodmFsdWUpJiZ2YWx1ZS5zcGxpdCgvLCg/PVxccyooPzpsaW5lYXJ8cmFkaWFsfHVybCkpL2cpLHN2Z19ncmFkaWVudHM9W10sdmFsdWVzPXtcInRvIGJvdHRvbVwiOid4MT1cIjAlXCIgeTE9XCIwJVwiIHgyPVwiMCVcIiB5Mj1cIjEwMCVcIicsXCJ0byBsZWZ0XCI6J3gxPVwiMTAwJVwiIHkxPVwiMCVcIiB4Mj1cIjAlXCIgeTI9XCIwJVwiJyxcInRvIHRvcFwiOid4MT1cIjAlXCIgeTE9XCIxMDAlXCIgeDI9XCIwJVwiIHkyPVwiMCVcIicsXCJ0byByaWdodFwiOid4MT1cIjAlXCIgeTE9XCIwJVwiIHgyPVwiMTAwJVwiIHkyPVwiMCVcIicsZ2V0XCJ0b3BcIigpe3JldHVybiB0aGlzW1widG8gYm90dG9tXCJdfSxnZXRcIjE4MGRlZ1wiKCl7cmV0dXJuIHRoaXNbXCJ0byBib3R0b21cIl19LGdldFwicmlnaHRcIigpe3JldHVybiB0aGlzW1widG8gbGVmdFwiXX0sZ2V0XCIyNzBkZWdcIigpe3JldHVybiB0aGlzW1widG8gbGVmdFwiXX0sZ2V0XCJib3R0b21cIigpe3JldHVybiB0aGlzW1widG8gdG9wXCJdfSxnZXRcIjBkZWdcIigpe3JldHVybiB0aGlzW1widG8gdG9wXCJdfSxnZXRcImxlZnRcIigpe3JldHVybiB0aGlzW1widG8gcmlnaHRcIl19LGdldFwiOTBkZWdcIigpe3JldHVybiB0aGlzW1widG8gcmlnaHRcIl19LFwiLTQ1ZGVnXCI6J3gxPVwiMCVcIiB5MT1cIjAlXCIgeDI9XCIxMDAlXCIgeTI9XCIxMDAlXCInLFwiNDVkZWdcIjoneDE9XCIwJVwiIHkxPVwiMTAwJVwiIHgyPVwiMTAwJVwiIHkyPVwiMCVcIicsXCJlbGxpcHNlIGF0IGNlbnRlclwiOidjeD1cIjUwJVwiIGN5PVwiNTAlXCIgcj1cIjc1JVwiJ30sc3ZnPXt1cmlfZGF0YTpcInVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFwiLHhtbDonPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+Jyxzdmdfc3RhcnQ6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDEgMVwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+JyxsaW5lYXJfZ3JhZGllbnRfc3RhcnQ6JzxsaW5lYXJHcmFkaWVudCBpZD1cImxlc3NoYXQtZ2VuZXJhdGVkXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCInLHJhZGlhbF9ncmFkaWVudF9zdGFydDonPHJhZGlhbEdyYWRpZW50IGlkPVwibGVzc2hhdC1nZW5lcmF0ZWRcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIicsbGluZWFyX2dyYWRpZW50X2VuZDpcIjwvbGluZWFyR3JhZGllbnQ+XCIscmFkaWFsX2dyYWRpZW50X2VuZDpcIjwvcmFkaWFsR3JhZGllbnQ+XCIscmVjdF9saW5lYXI6JzxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cInVybCgjbGVzc2hhdC1nZW5lcmF0ZWQpXCIgLz4nLHJlY3RfcmFkaWFsOic8cmVjdCB4PVwiLTUwXCIgeT1cIi01MFwiIHdpZHRoPVwiMTAxXCIgaGVpZ2h0PVwiMTAxXCIgZmlsbD1cInVybCgjbGVzc2hhdC1nZW5lcmF0ZWQpXCIgLz4nLHN2Z19lbmQ6XCI8L3N2Zz5cIn07aWYoZ3JhZGllbnRzLmxlbmd0aCl7Z3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24oZ3JhZGllbnQpe3ZhciBvYmo9e307aWYoT2JqZWN0LmtleXModmFsdWVzKS5zb21lKGZ1bmN0aW9uKGlubmVyX3ZhbCl7cmV0dXJuIGdyYWRpZW50LmluZGV4T2YoaW5uZXJfdmFsKT49MD8ob2JqLnN2Z19kaXJlY3Rpb249dmFsdWVzW2lubmVyX3ZhbF0sITApOihvYmouc3ZnX2RpcmVjdGlvbj0hMSx2b2lkIDApfSksL2xpbmVhci8udGVzdChncmFkaWVudCkpb2JqLnN2Z190eXBlPVwibGluZWFyXCI7ZWxzZSBpZigvcmFkaWFsLy50ZXN0KGdyYWRpZW50KSlvYmouc3ZnX3R5cGU9XCJyYWRpYWxcIjtlbHNlIGlmKCEvbGluZWFyLy50ZXN0KGdyYWRpZW50KSYmIS9yYWRpYWwvLnRlc3QoZ3JhZGllbnQpKXJldHVybiBvYmoudXJsPWdyYWRpZW50LnRyaW0oKSxvYmouc3ZnX3R5cGU9XCJ1cmxcIixvYmouc3ZnX2RpcmVjdGlvbj0hMCxzdmdfZ3JhZGllbnRzLnB1c2gob2JqKSwhMTt2YXIgY29sb3JzX2NvdW50PWdyYWRpZW50Lm1hdGNoKC9yZ2J8I1thLXpBLVowLTldfGhzbC9nKS5sZW5ndGg7aWYob2JqLnN2Z19zdG9wcz1bXSxncmFkaWVudC5tYXRjaCgvI1thLXpBLVowLTldL2cpJiZncmFkaWVudC5tYXRjaCgvI1thLXpBLVowLTldL2cpLmxlbmd0aD09Y29sb3JzX2NvdW50KWlmKGdyYWRpZW50Lm1hdGNoKC8jW2EtekEtWjAtOV0rXFxzKyhcXGQrJSkvZykmJmdyYWRpZW50Lm1hdGNoKC8jW2EtekEtWjAtOV0rXFxzKyhcXGQrJSkvZykubGVuZ3RoPT1jb2xvcnNfY291bnQpZ3JhZGllbnQubWF0Y2goLyNbYS16QS1aMC05XStcXHMrKFxcZCslKS9nKS5mb3JFYWNoKGZ1bmN0aW9uKGlubmVyX3ZhbCl7aW5uZXJfdmFsPWlubmVyX3ZhbC5zcGxpdChcIiBcIiksb2JqLnN2Z19zdG9wcy5wdXNoKCc8c3RvcCBvZmZzZXQ9XCInK2lubmVyX3ZhbFsxXSsnXCIgc3RvcC1jb2xvcj1cIicraW5uZXJfdmFsWzBdKydcIiBzdG9wLW9wYWNpdHk9XCIxXCIvPicpfSk7ZWxzZXt2YXIgc2hhcmVzPU1hdGguZmxvb3IoMTAwLyhncmFkaWVudC5tYXRjaCgvI1thLXpBLVowLTldL2cpLmxlbmd0aC0xKSk7Z3JhZGllbnQubWF0Y2goLyNbYS16QS1aMC05XSsvZykuZm9yRWFjaChmdW5jdGlvbihpbm5lcl92YWwsaW5kZXgpe29iai5zdmdfc3RvcHMucHVzaCgnPHN0b3Agb2Zmc2V0PVwiJytzaGFyZXMqaW5kZXgrJyVcIiBzdG9wLWNvbG9yPVwiJytpbm5lcl92YWwrJ1wiIHN0b3Atb3BhY2l0eT1cIjFcIi8+Jyl9KX1pZihncmFkaWVudC5tYXRjaCgvcmdiYT9cXChcXGQrLFxccypcXGQrLFxccypcXGQrKD86LFxccyooMHwxfFxcLlxcZCt8MFxcLlxcZCspKT9cXCkvZykmJmdyYWRpZW50Lm1hdGNoKC8oPzpyZ2J8cmdiYSk/XFwoXFxkKyxcXHMqXFxkKyxcXHMqXFxkKyg/OixcXHMqKDB8MXxcXC5cXGQrfDBcXC5cXGQrKSk/XFwpL2cpLmxlbmd0aD09Y29sb3JzX2NvdW50KWlmKGdyYWRpZW50Lm1hdGNoKC9yZ2JhP1xcKFxcZCssXFxzKlxcZCssXFxzKlxcZCsoPzosXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKykpP1xcKVxccytcXGQrJSsvZykmJmdyYWRpZW50Lm1hdGNoKC9yZ2JhP1xcKFxcZCssXFxzKlxcZCssXFxzKlxcZCsoPzosXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKykpP1xcKVxccytcXGQrJSsvZykubGVuZ3RoPT1jb2xvcnNfY291bnQpZ3JhZGllbnQucmVwbGFjZSgvcmdiYT9cXCgoXFxkKyxcXHMqXFxkKyxcXHMqXFxkKykoPzosXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKykpP1xcKVxccysoXFxkKyUpKy9nLGZ1bmN0aW9uKG1hdGNoLHN1YixzdWJfMixzdWJfMyl7b2JqLnN2Z19zdG9wcy5wdXNoKCc8c3RvcCBvZmZzZXQ9XCInK3N1Yl8zKydcIiBzdG9wLWNvbG9yPVwicmdiKCcrc3ViKycpXCIgc3RvcC1vcGFjaXR5PVwiJysoc3ViXzJ8fDEpKydcIi8+Jyl9KTtlbHNle3ZhciBzaGFyZXM9TWF0aC5mbG9vcigxMDAvKGdyYWRpZW50Lm1hdGNoKC8ocmdifHJnYmEpXFwoL2cpLmxlbmd0aC0xKSk7Z3JhZGllbnQubWF0Y2goL3JnYmE/XFwoKFxcZCssXFxzKlxcZCssXFxzKlxcZCspKD86LFxccyooMHwxfFxcLlxcZCt8MFxcLlxcZCspKT9cXCkvZykuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50LGluZGV4KXtlbGVtZW50LnJlcGxhY2UoL3JnYmE/XFwoKFxcZCssXFxzKlxcZCssXFxzKlxcZCspKD86LFxccyooMHwxfFxcLlxcZCt8MFxcLlxcZCspKT9cXCkvZyxmdW5jdGlvbihtYXRjaCxzdWIsc3ViXzIpe29iai5zdmdfc3RvcHMucHVzaCgnPHN0b3Agb2Zmc2V0PVwiJytzaGFyZXMqaW5kZXgrJyVcIiBzdG9wLWNvbG9yPVwicmdiKCcrc3ViKycpXCIgc3RvcC1vcGFjaXR5PVwiJysoc3ViXzJ8fDEpKydcIi8+Jyl9KX0pfWlmKGdyYWRpZW50Lm1hdGNoKC9oc2xhP1xcKChcXGQrLFxccypcXGQrJSxcXHMqXFxkKyUpLFxccyooMHwxfFxcLlxcZCt8MFxcLlxcZCspXFwpL2cpJiZncmFkaWVudC5tYXRjaCgvaHNsYT9cXCgoXFxkKyxcXHMqXFxkKyUsXFxzKlxcZCslKSxcXHMqKDB8MXxcXC5cXGQrfDBcXC5cXGQrKVxcKS9nKS5sZW5ndGg9PWNvbG9yc19jb3VudClpZihncmFkaWVudC5tYXRjaCgvaHNsYT9cXCgoXFxkKyxcXHMqXFxkKyUsXFxzKlxcZCslKSxcXHMqKDB8MXxcXC5cXGQrfDBcXC5cXGQrKVxcKVxccyooXFxkKyUpKy9nKSYmZ3JhZGllbnQubWF0Y2goL2hzbGE/XFwoKFxcZCssXFxzKlxcZCslLFxccypcXGQrJSksXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKylcXClcXHMqKFxcZCslKSsvZykubGVuZ3RoPT1jb2xvcnNfY291bnQpZ3JhZGllbnQucmVwbGFjZSgvaHNsYT9cXCgoXFxkKyxcXHMqXFxkKyUsXFxzKlxcZCslKSxcXHMqKDB8MXxcXC5cXGQrfDBcXC5cXGQrKVxcKVxccyooXFxkKyUpKy9nLGZ1bmN0aW9uKG1hdGNoLHN1YixzdWJfMixzdWJfMyl7b2JqLnN2Z19zdG9wcy5wdXNoKCc8c3RvcCBvZmZzZXQ9XCInK3N1Yl8zKydcIiBzdG9wLWNvbG9yPVwiaHNsKCcrc3ViKycpXCIgc3RvcC1vcGFjaXR5PVwiJysoc3ViXzJ8fDEpKydcIi8+Jyl9KTtlbHNle3ZhciBzaGFyZXM9TWF0aC5mbG9vcigxMDAvKGdyYWRpZW50Lm1hdGNoKC8oaHNsfGhzbGEpXFwoL2cpLmxlbmd0aC0xKSk7Z3JhZGllbnQubWF0Y2goL2hzbGE/XFwoKFxcZCssXFxzKlxcZCslLFxccypcXGQrJSksXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKylcXCkvZykuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50LGluZGV4KXtlbGVtZW50LnJlcGxhY2UoL2hzbGE/XFwoKFxcZCssXFxzKlxcZCslLFxccypcXGQrJSksXFxzKigwfDF8XFwuXFxkK3wwXFwuXFxkKylcXCkvZyxmdW5jdGlvbihtYXRjaCxzdWIsc3ViXzIpe29iai5zdmdfc3RvcHMucHVzaCgnPHN0b3Agb2Zmc2V0PVwiJytzaGFyZXMqaW5kZXgrJyVcIiBzdG9wLWNvbG9yPVwiaHNsKCcrc3ViKycpXCIgc3RvcC1vcGFjaXR5PVwiJysoc3ViXzJ8fDEpKydcIi8+Jyl9KX0pfXN2Z19ncmFkaWVudHMucHVzaChvYmopfSk7dmFyIHN5bnRheD1bXSxwYXNzZWQ9c3ZnX2dyYWRpZW50cy5ldmVyeShmdW5jdGlvbihlbGVtZW50KXtmb3IodmFyIGkgaW4gZWxlbWVudClpZigwPT1lbGVtZW50W2ldfHwwPT1lbGVtZW50W2ldLmxlbmd0aClyZXR1cm4hMTtyZXR1cm4hMH0pO2lmKCFwYXNzZWQpcmV0dXJuIDgxMjE5OTE7c3ZnX2dyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQsaW5kZXgpeyhcImxpbmVhclwiPT1lbGVtZW50LnN2Z190eXBlfHxcInJhZGlhbFwiPT1lbGVtZW50LnN2Z190eXBlKSYmKHN5bnRheFtpbmRleF09c3ZnLnhtbCtzdmcuc3ZnX3N0YXJ0KSxcImxpbmVhclwiPT1lbGVtZW50LnN2Z190eXBlPyhzeW50YXhbaW5kZXhdKz1zdmcubGluZWFyX2dyYWRpZW50X3N0YXJ0K1wiIFwiK2VsZW1lbnQuc3ZnX2RpcmVjdGlvbitcIj5cIixlbGVtZW50LnN2Z19zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtzeW50YXhbaW5kZXhdKz12YWx1ZX0pLHN5bnRheFtpbmRleF0rPXN2Zy5saW5lYXJfZ3JhZGllbnRfZW5kLHN5bnRheFtpbmRleF0rPXN2Zy5yZWN0X2xpbmVhcixzeW50YXhbaW5kZXhdKz1zdmcuc3ZnX2VuZCk6XCJyYWRpYWxcIj09ZWxlbWVudC5zdmdfdHlwZT8oc3ludGF4W2luZGV4XSs9c3ZnLnJhZGlhbF9ncmFkaWVudF9zdGFydCtcIiBcIitlbGVtZW50LnN2Z19kaXJlY3Rpb24rXCI+XCIsZWxlbWVudC5zdmdfc3RvcHMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7c3ludGF4W2luZGV4XSs9dmFsdWV9KSxzeW50YXhbaW5kZXhdKz1zdmcucmFkaWFsX2dyYWRpZW50X2VuZCxzeW50YXhbaW5kZXhdKz1zdmcucmVjdF9yYWRpYWwsc3ludGF4W2luZGV4XSs9c3ZnLnN2Z19lbmQpOlwidXJsXCI9PWVsZW1lbnQuc3ZnX3R5cGUmJihzeW50YXhbaW5kZXhdPWVsZW1lbnQudXJsKX0pLHN5bnRheC5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQsaW5kZXgpey88XFw/eG1sIHZlcnNpb249XCIxLjBcIiBcXD8+L2cudGVzdChlbGVtZW50KSYmKHN5bnRheFtpbmRleF09c3ZnLnVyaV9kYXRhK2Jhc2U2NF9lbmNvZGUoZWxlbWVudCkrXCIpXCIpfSksdmFsdWU9c3ludGF4LmpvaW4oXCIsXCIpfXJldHVybiB2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3Nfd2Via2l0OiB+YChmdW5jdGlvbih2YWx1ZSl7aWYodmFsdWU9dmFsdWV8fDgxMjE5OTEsODEyMTk5MT09dmFsdWUpcmV0dXJuIHZhbHVlO3ZhciB2YWx1ZXM9e1widG8gYm90dG9tXCI6XCJ0b3BcIixcInRvIGxlZnRcIjpcInJpZ2h0XCIsXCJ0byB0b3BcIjpcImJvdHRvbVwiLFwidG8gcmlnaHRcIjpcImxlZnRcIixcImVsbGlwc2UgYXQgY2VudGVyXCI6XCJjZW50ZXIsIGVsbGlwc2UgY292ZXJcIixcImNpcmNsZSBjbG9zZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGNpcmNsZSBjb250YWluXCIsXCJjaXJjbGUgZmFydGhlc3QtY29ybmVyXCI6XCJjZW50ZXIgY2VudGVyLCBjaXJjbGUgY292ZXJcIixcImNpcmNsZSBmYXJ0aGVzdC1zaWRlXCI6XCJjZW50ZXIgY2VudGVyLCBjaXJjbGUgY292ZXJcIixcImVsbGlwc2UgY2xvc2VzdC1zaWRlXCI6XCJjZW50ZXIgY2VudGVyLCBlbGxpcHNlIGNvbnRhaW5cIixcImVsbGlwc2UgZmFydGhlc3QtY29ybmVyXCI6XCJjZW50ZXIgY2VudGVyLCBlbGxpcHNlIGNvdmVyXCIsXCJlbGxpcHNlIGZhcnRoZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGVsbGlwc2UgY292ZXJcIn0scmFkaWFsX3JlZ2V4cD0vKHJhZGlhbC1ncmFkaWVudFxcKCkoW2Etei0gXSspYXRcXHMrKFxcdyspXFxzKihcXHcqKS9nLHZhbHVlc19rZXlzPU9iamVjdC5rZXlzKHZhbHVlcyk7cmV0dXJuIHZhbHVlc19rZXlzLnNvbWUoZnVuY3Rpb24oZWwpe3JldHVybiB2YWx1ZS5pbmRleE9mKGVsKT49MD8odmFsdWU9dmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGVsK1wiKD8hWyBhLXowLTldKVwiLFwiZ1wiKSx2YWx1ZXNbZWxdKSwhMCk6KHJhZGlhbF9yZWdleHAudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKHJhZGlhbF9yZWdleHAsZnVuY3Rpb24obWF0Y2gsc3ViLHN1YjIsc3ViMyxzdWI0KXtyZXR1cm4gc3ViLnRyaW0oKStzdWIzLnRyaW0oKStcIiBcIitzdWI0LnRyaW0oKStcIixcIitzdWIyLnJlcGxhY2UoL2Nsb3Nlc3Qtc2lkZS9nLFwiY29udGFpblwiKS5yZXBsYWNlKC9mYXJ0aGVzdC1jb3JuZXIvZyxcImNvdmVyXCIpLnRyaW0oKX0pKSx2b2lkIDApfSksdmFsdWU9dmFsdWUucmVwbGFjZSgvKFxcZCspXFxzKmRlZy9nLGZ1bmN0aW9uKG1hdGNoLHN1Yil7cmV0dXJuIDkwLXN1YitcImRlZ1wifSkucmVwbGFjZSgvKGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50L2csXCItd2Via2l0LSQxLWdyYWRpZW50XCIpfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19tb3o6IH5gKGZ1bmN0aW9uKHZhbHVlKXtpZih2YWx1ZT12YWx1ZXx8ODEyMTk5MSw4MTIxOTkxPT12YWx1ZSlyZXR1cm4gdmFsdWU7dmFyIHZhbHVlcz17XCJ0byBib3R0b21cIjpcInRvcFwiLFwidG8gbGVmdFwiOlwicmlnaHRcIixcInRvIHRvcFwiOlwiYm90dG9tXCIsXCJ0byByaWdodFwiOlwibGVmdFwiLFwiZWxsaXBzZSBhdCBjZW50ZXJcIjpcImNlbnRlciwgZWxsaXBzZSBjb3ZlclwiLFwiY2lyY2xlIGNsb3Nlc3Qtc2lkZVwiOlwiY2VudGVyIGNlbnRlciwgY2lyY2xlIGNvbnRhaW5cIixcImNpcmNsZSBmYXJ0aGVzdC1jb3JuZXJcIjpcImNlbnRlciBjZW50ZXIsIGNpcmNsZSBjb3ZlclwiLFwiY2lyY2xlIGZhcnRoZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGNpcmNsZSBjb3ZlclwiLFwiZWxsaXBzZSBjbG9zZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGVsbGlwc2UgY29udGFpblwiLFwiZWxsaXBzZSBmYXJ0aGVzdC1jb3JuZXJcIjpcImNlbnRlciBjZW50ZXIsIGVsbGlwc2UgY292ZXJcIixcImVsbGlwc2UgZmFydGhlc3Qtc2lkZVwiOlwiY2VudGVyIGNlbnRlciwgZWxsaXBzZSBjb3ZlclwifSxyYWRpYWxfcmVnZXhwPS8ocmFkaWFsLWdyYWRpZW50XFwoKShbYS16LSBdKylhdFxccysoXFx3KylcXHMqKFxcdyopL2csdmFsdWVzX2tleXM9T2JqZWN0LmtleXModmFsdWVzKTtyZXR1cm4gdmFsdWVzX2tleXMuc29tZShmdW5jdGlvbihlbCl7cmV0dXJuIHZhbHVlLmluZGV4T2YoZWwpPj0wPyh2YWx1ZT12YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoZWwrXCIoPyFbIGEtejAtOV0pXCIsXCJnXCIpLHZhbHVlc1tlbF0pLCEwKToocmFkaWFsX3JlZ2V4cC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UocmFkaWFsX3JlZ2V4cCxmdW5jdGlvbihtYXRjaCxzdWIsc3ViMixzdWIzLHN1YjQpe3JldHVybiBzdWIudHJpbSgpK3N1YjMudHJpbSgpK1wiIFwiK3N1YjQudHJpbSgpK1wiLFwiK3N1YjIucmVwbGFjZSgvY2xvc2VzdC1zaWRlL2csXCJjb250YWluXCIpLnJlcGxhY2UoL2ZhcnRoZXN0LWNvcm5lci9nLFwiY292ZXJcIikudHJpbSgpfSkpLHZvaWQgMCl9KSx2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oXFxkKylcXHMqZGVnL2csZnVuY3Rpb24obWF0Y2gsc3ViKXtyZXR1cm4gOTAtc3ViK1wiZGVnXCJ9KS5yZXBsYWNlKC8obGluZWFyfHJhZGlhbCktZ3JhZGllbnQvZyxcIi1tb3otJDEtZ3JhZGllbnRcIil9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX29wZXJhOiB+YChmdW5jdGlvbih2YWx1ZSl7aWYodmFsdWU9dmFsdWV8fDgxMjE5OTEsODEyMTk5MT09dmFsdWUpcmV0dXJuIHZhbHVlO3ZhciB2YWx1ZXM9e1widG8gYm90dG9tXCI6XCJ0b3BcIixcInRvIGxlZnRcIjpcInJpZ2h0XCIsXCJ0byB0b3BcIjpcImJvdHRvbVwiLFwidG8gcmlnaHRcIjpcImxlZnRcIixcImVsbGlwc2UgYXQgY2VudGVyXCI6XCJjZW50ZXIsIGVsbGlwc2UgY292ZXJcIixcImNpcmNsZSBjbG9zZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGNpcmNsZSBjb250YWluXCIsXCJjaXJjbGUgZmFydGhlc3QtY29ybmVyXCI6XCJjZW50ZXIgY2VudGVyLCBjaXJjbGUgY292ZXJcIixcImNpcmNsZSBmYXJ0aGVzdC1zaWRlXCI6XCJjZW50ZXIgY2VudGVyLCBjaXJjbGUgY292ZXJcIixcImVsbGlwc2UgY2xvc2VzdC1zaWRlXCI6XCJjZW50ZXIgY2VudGVyLCBlbGxpcHNlIGNvbnRhaW5cIixcImVsbGlwc2UgZmFydGhlc3QtY29ybmVyXCI6XCJjZW50ZXIgY2VudGVyLCBlbGxpcHNlIGNvdmVyXCIsXCJlbGxpcHNlIGZhcnRoZXN0LXNpZGVcIjpcImNlbnRlciBjZW50ZXIsIGVsbGlwc2UgY292ZXJcIn0scmFkaWFsX3JlZ2V4cD0vKHJhZGlhbC1ncmFkaWVudFxcKCkoW2Etei0gXSspYXRcXHMrKFxcdyspXFxzKihcXHcqKS9nLHZhbHVlc19rZXlzPU9iamVjdC5rZXlzKHZhbHVlcyk7cmV0dXJuIHZhbHVlc19rZXlzLnNvbWUoZnVuY3Rpb24oZWwpe3JldHVybiB2YWx1ZS5pbmRleE9mKGVsKT49MD8odmFsdWU9dmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGVsK1wiKD8hWyBhLXowLTldKVwiLFwiZ1wiKSx2YWx1ZXNbZWxdKSwhMCk6KHJhZGlhbF9yZWdleHAudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKHJhZGlhbF9yZWdleHAsZnVuY3Rpb24obWF0Y2gsc3ViLHN1YjIsc3ViMyxzdWI0KXtyZXR1cm4gc3ViLnRyaW0oKStzdWIzLnRyaW0oKStcIiBcIitzdWI0LnRyaW0oKStcIixcIitzdWIyLnJlcGxhY2UoL2Nsb3Nlc3Qtc2lkZS9nLFwiY29udGFpblwiKS5yZXBsYWNlKC9mYXJ0aGVzdC1jb3JuZXIvZyxcImNvdmVyXCIpLnRyaW0oKX0pKSx2b2lkIDApfSksdmFsdWU9dmFsdWUucmVwbGFjZSgvKFxcZCspXFxzKmRlZy9nLGZ1bmN0aW9uKG1hdGNoLHN1Yil7cmV0dXJuIDkwLXN1YitcImRlZ1wifSkucmVwbGFjZSgvKGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50L2csXCItby0kMS1ncmFkaWVudFwiKX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtpZih2YWx1ZT12YWx1ZXx8ODEyMTk5MSw4MTIxOTkxPT12YWx1ZSlyZXR1cm4gdmFsdWU7dmFyIHZhbHVlcz17dG9wOlwidG8gYm90dG9tXCIscmlnaHQ6XCJ0byBsZWZ0XCIsYm90dG9tOlwidG8gdG9wXCIsbGVmdDpcInRvIHJpZ2h0XCJ9LHZhbHVlc19rZXlzPU9iamVjdC5rZXlzKHZhbHVlcyk7cmV0dXJuIHZhbHVlc19rZXlzLnNvbWUoZnVuY3Rpb24oZWwpe3JldHVybiB2YWx1ZS5pbmRleE9mKGVsKT49MCYmIW5ldyBSZWdFeHAoXCJ0b1xcXFxzK1wiK2VsLFwiZ1wiKS50ZXN0KHZhbHVlKT8odmFsdWU9dmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGVsKSx2YWx1ZXNbZWxdKSwhMCk6dm9pZCAwfSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkgeyBiYWNrZ3JvdW5kLWltYWdlOiBAcHJvY2Vzc19tczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbXMpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX3dlYmtpdCkpIHsgYmFja2dyb3VuZC1pbWFnZTogQHByb2Nlc3Nfd2Via2l0OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfd2Via2l0KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7IGJhY2tncm91bmQtaW1hZ2U6IEBwcm9jZXNzX21vejsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19vcGVyYSkpIHsgYmFja2dyb3VuZC1pbWFnZTogQHByb2Nlc3Nfb3BlcmE7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29wZXJhKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBiYWNrZ3JvdW5kLWltYWdlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYmFja2dyb3VuZC1vcmlnaW4oLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZXx8XCJwYWRkaW5nLWJveFwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1iYWNrZ3JvdW5kLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJhY2tncm91bmQtb3JpZ2luOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmJhY2tncm91bmQtc2l6ZSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiYXV0byBhdXRvXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWJhY2tncm91bmQtc2l6ZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBiYWNrZ3JvdW5kLXNpemU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYmx1ciguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWZpbHRlcjogYmx1cihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWZpbHRlcjogYmx1cihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtZmlsdGVyOiBibHVyKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZpbHRlcjogYmx1cihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4vXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBAcHJvY2VzczsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiBAcHJvY2VzczsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmc7ICB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQHByb2Nlc3M7IGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7ICB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuL15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpLG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wicHhcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IEBwcm9jZXNzOyAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7ICB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiBAcHJvY2VzczsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmc7ICB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IEBwcm9jZXNzOyBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmJvcmRlci1pbWFnZSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fDgxMjE5OTEsL15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1ib3JkZXItaW1hZ2U6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tYm9yZGVyLWltYWdlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJvcmRlci1pbWFnZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYm9yZGVyLXJhZGl1cyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4vXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiBAcHJvY2VzczsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYm9yZGVyLXJhZGl1czogQHByb2Nlc3M7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJvcmRlci1yYWRpdXM6IEBwcm9jZXNzOyBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmJvcmRlci10b3AtbGVmdC1yYWRpdXMoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuL15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpLG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wicHhcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogQHByb2Nlc3M7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsgIH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogQHByb2Nlc3M7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IEBwcm9jZXNzOyBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmJvcmRlci10b3AtcmlnaHQtcmFkaXVzKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBAcHJvY2VzczsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogQHByb2Nlc3M7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOyAgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBAcHJvY2VzczsgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsgIH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5ib3gtc2hhZG93KC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJveC1zaGFkb3c6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1ib3gtc2hhZG93OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJveC1zaGFkb3c6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYm94LXNpemluZyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcImNvbnRlbnQtYm94XCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJveC1zaXppbmc6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1ib3gtc2l6aW5nOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGJveC1zaXppbmc6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uYnJpZ2h0bmVzcyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwiMVwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1maWx0ZXI6IGJyaWdodG5lc3MoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLWZpbHRlcjogYnJpZ2h0bmVzcyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmNhbGMoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe2Z1bmN0aW9uIHN5bnRheChwcm9wZXJ0eSxzdGFydCl7dmFyIGVuZD1cIik7XFxuXCIsZGVmaW5pdGlvbj12YWx1ZV90ZW1wLnNwbGl0KFwiLFwiKSxzeW50YXg9ZGVmaW5pdGlvblswXStcIjpcIitwcm9wZXJ0eStcIihcIisoZGVmaW5pdGlvblsxXS50cmltKCl8fDApK2VuZDtcInN0YXJ0XCI9PXN0YXJ0P3ZhbHVlPVwiMDtcXG5cIitzeW50YXg6dmFsdWUrPXN5bnRheH12YWx1ZT12YWx1ZXx8ODEyMTk5MTt2YXIgc3RhdGU9XCJAe3N0YXRlfVwiLHZhbHVlX3RlbXA9dmFsdWU7aWYoODEyMTk5MT09dmFsdWUpcmV0dXJuIHZhbHVlO3N3aXRjaChzdGF0ZSl7Y2FzZVwiMVwiOnN5bnRheChcIi13ZWJraXQtY2FsY1wiLFwic3RhcnRcIiksc3ludGF4KFwiLW1vei1jYWxjXCIpLHN5bnRheChcImNhbGNcIik7YnJlYWs7Y2FzZVwiMlwiOnN5bnRheChcIi13ZWJraXQtY2FsY1wiLFwic3RhcnRcIiksc3ludGF4KFwiLW1vei1jYWxjXCIpO2JyZWFrO2Nhc2VcIjNcIjpzeW50YXgoXCItd2Via2l0LWNhbGNcIixcInN0YXJ0XCIpLHN5bnRheChcImNhbGNcIik7YnJlYWs7Y2FzZVwiNFwiOnN5bnRheChcIi13ZWJraXQtY2FsY1wiLFwic3RhcnRcIik7YnJlYWs7Y2FzZVwiNVwiOnN5bnRheChcIi1tb3otY2FsY1wiLFwic3RhcnRcIiksc3ludGF4KFwiY2FsY1wiKTticmVhaztjYXNlXCI2XCI6c3ludGF4KFwiLW1vei1jYWxjXCIsXCJzdGFydFwiKTticmVhaztjYXNlXCI3XCI6c3ludGF4KFwiY2FsY1wiLFwic3RhcnRcIil9cmV0dXJuIHZhbHVlPXZhbHVlLnJlcGxhY2UoLzskL2csXCJcIil9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgQHN0YXRlOiA2OTsgLy8gWWVhaCB0b3RhbGx5IHJhbmRvbSBudW1iZXJcblxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IEBzdGF0ZTogMTsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kICAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOiAyOyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIGNyb3NzXG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6IDI7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogMzsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyBjcm9zc1xuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOiAzOyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOiA0OyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyBjcm9zc1xuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogNDsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6IDQ7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6IDU7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gY3Jvc3NcbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogNTsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogNjsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gY3Jvc3NcbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6IDY7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOiA2OyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogNzsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gY3Jvc3NcbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6IDc7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOiA3OyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkge31cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkge31cbiAgLmluY2VwdGlvbihAYXJndW1lbnRzKTtcblxuXG59XG5cbi5jb2x1bW4tY291bnQoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJhdXRvXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWNvbHVtbi1jb3VudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWNvbHVtbi1jb3VudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBjb2x1bW4tY291bnQ6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uY29sdW1uLWdhcCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwibm9ybWFsXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWNvbHVtbi1nYXA6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1jb2x1bW4tZ2FwOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGNvbHVtbi1nYXA6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uY29sdW1uLXJ1bGUoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIm1lZGl1bSBub25lIGJsYWNrXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWNvbHVtbi1ydWxlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otY29sdW1uLXJ1bGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgY29sdW1uLXJ1bGU6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uY29sdW1uLXdpZHRoKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCJhdXRvXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWNvbHVtbi13aWR0aDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWNvbHVtbi13aWR0aDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBjb2x1bW4td2lkdGg6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uY29sdW1ucyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiYXV0byBhdXRvXCI7dmFyIG51bVJlZ2V4PS9eXFxkKyQvO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpLHZhbHVlPXZhbHVlLnNwbGl0KFwiIFwiKSksbnVtUmVnZXgudGVzdCh2YWx1ZVswXSkmJih2YWx1ZVswXT12YWx1ZVswXStcInB4XCIpLHZhbHVlLmpvaW4oXCIgXCIpfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1jb2x1bW5zOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otY29sdW1uczogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBjb2x1bW5zOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmNvbnRyYXN0KC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjEwMCVcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiJVwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1maWx0ZXI6IH5cImNvbnRyYXN0KEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWZpbHRlcjogflwiY29udHJhc3QoQHtwcm9jZXNzfSlcIjsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1maWx0ZXI6IH5cImNvbnRyYXN0KEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmaWx0ZXI6IH5cImNvbnRyYXN0KEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZGlzcGxheSguLi4pIHtcblxuICBAb2xkd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3Nfb2xkd2Via2l0OiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPVwiZmxleFwiPT12YWx1ZXx8XCJpbmxpbmUtZmxleFwiPT12YWx1ZT9cIi13ZWJraXQtYm94XCI6ODEyMTk5MX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3NfbW96OiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPVwiZmxleFwiPT12YWx1ZXx8XCJpbmxpbmUtZmxleFwiPT12YWx1ZT9cIi1tb3otYm94XCI6ODEyMTk5MX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3Nfd2Via2l0OiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPVwiZmxleFwiPT12YWx1ZXx8XCJpbmxpbmUtZmxleFwiPT12YWx1ZT9cIi13ZWJraXQtXCIrdmFsdWU6ODEyMTk5MX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3NfbXM6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9XCJmbGV4XCI9PXZhbHVlP1wiLW1zLWZsZXhib3hcIjpcImlubGluZS1mbGV4XCI9PXZhbHVlP1wiLW1zLWlubGluZS1mbGV4Ym94XCI6ODEyMTk5MX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm5cImZsZXhcIiE9dmFsdWUmJlwiaW5saW5lLWZsZXhcIiE9dmFsdWUmJih2YWx1ZT04MTIxOTkxKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19vbGR3ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGR3ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vbGR3ZWJraXQpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGR3ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29sZHdlYmtpdCkpIHsgZGlzcGxheTogQHByb2Nlc3Nfb2xkd2Via2l0OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb2xkd2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb2xkd2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29sZHdlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkd2Via2l0KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7IGRpc3BsYXk6IEBwcm9jZXNzX21vejsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfd2Via2l0KSkgeyBkaXNwbGF5OiBAcHJvY2Vzc193ZWJraXQ7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc193ZWJraXQpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbXMpKSB7IGRpc3BsYXk6IEBwcm9jZXNzX21zOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgZGlzcGxheTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIHRydWUsIEBvbGR3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZHJvcC1zaGFkb3coLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7aWYodmFsdWU9dmFsdWV8fDgxMjE5OTEsODEyMTk5MT09dmFsdWUpcmV0dXJuIHZhbHVlO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4vXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otZmlsdGVyOiBkcm9wLXNoYWRvdyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtZmlsdGVyOiBkcm9wLXNoYWRvdyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmaWx0ZXI6IGRyb3Atc2hhZG93KEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5maWx0ZXIoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIm5vbmVcIiwvXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWZpbHRlcjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWZpbHRlcjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtZmlsdGVyOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZpbHRlcjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZmxleCguLi4pIHtcblxuICBAb2xkZXJ3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2Vzc19vbGRlcndlYmtpdDogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZS5tYXRjaCgvXlxcZCsvKVswXXx8XCIwXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21vejogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZS5tYXRjaCgvXlxcZCsvKVswXXx8XCIwXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjAgMSBhdXRvXCIsL15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19vbGRlcndlYmtpdCkpIHsgLXdlYmtpdC1ib3gtZmxleDogQHByb2Nlc3Nfb2xkZXJ3ZWJraXQ7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29sZGVyd2Via2l0KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7IC1tb3otYm94LWZsZXg6IEBwcm9jZXNzX21vejsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1mbGV4OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1mbGV4OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZsZXg6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCB0cnVlLCBAb2xkZXJ3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZmxleC1iYXNpcyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiYXV0b1wiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1mbGV4LWJhc2lzOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZsZXgtYmFzaXM6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZmxleC1kaXJlY3Rpb24oLi4uKSB7XG5cbiAgQG9sZGVzdHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG9sZGVybW96X2xvY2FsOiB0cnVlO1xuICBAb2xkZXJ3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2Vzc19vbGRlc3R3ZWJraXQ6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9XCJyb3dcIj09dmFsdWV8fFwiY29sdW1uXCI9PXZhbHVlP1wibm9ybWFsXCI6XCJyb3ctcmV2ZXJzZVwiPT12YWx1ZXx8XCJjb2x1bW4tcmV2ZXJzZVwiPT12YWx1ZT9cInJldmVyc2VcIjo4MTIxOTkxfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19vbGRlcm1vejogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT1cInJvd1wiPT12YWx1ZXx8XCJjb2x1bW5cIj09dmFsdWU/XCJub3JtYWxcIjpcInJvdy1yZXZlcnNlXCI9PXZhbHVlfHxcImNvbHVtbi1yZXZlcnNlXCI9PXZhbHVlP1wicmV2ZXJzZVwiOjgxMjE5OTF9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX29sZGVyd2Via2l0OiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPVwicm93XCI9PXZhbHVlfHxcInJvdy1yZXZlcnNlXCI9PXZhbHVlP1wiaG9yaXpvbnRhbFwiOlwiY29sdW1uXCI9PXZhbHVlfHxcImNvbHVtbi1yZXZlcnNlXCI9PXZhbHVlP1widmVydGljYWxcIjo4MTIxOTkxfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19tb3o6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9XCJyb3dcIj09dmFsdWV8fFwicm93LXJldmVyc2VcIj09dmFsdWU/XCJob3Jpem9udGFsXCI6XCJjb2x1bW5cIj09dmFsdWV8fFwiY29sdW1uLXJldmVyc2VcIj09dmFsdWU/XCJ2ZXJ0aWNhbFwiOjgxMjE5OTF9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcInJvd1wifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkZXN0d2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb2xkZXN0d2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb2xkZXN0d2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkZXN0d2Via2l0KSkgeyAtd2Via2l0LWJveC1kaXJlY3Rpb246IEBwcm9jZXNzX29sZGVzdHdlYmtpdDsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19vbGRlc3R3ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGRlc3R3ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vbGRlc3R3ZWJraXQpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGRlc3R3ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29sZGVzdHdlYmtpdCkpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfb2xkZXJtb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19vbGRlcm1veikpIHsgLW1vei1ib3gtZGlyZWN0aW9uOiBAcHJvY2Vzc19vbGRlcm1vejsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkZXJtb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZGVybW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGRlcm1veikpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkZXJtb3opKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSB7IC13ZWJraXQtYm94LW9yaWVudDogQHByb2Nlc3Nfb2xkZXJ3ZWJraXQ7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29sZGVyd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vbGRlcndlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfb2xkZXJ3ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29sZGVyd2Via2l0KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7IC1tb3otYm94LW9yaWVudDogQHByb2Nlc3NfbW96OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbW96KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1mbGV4LWRpcmVjdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDcpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmbGV4LWRpcmVjdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIHRydWUsIEBvbGRlc3R3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIHRydWUsIEBvbGRlcm1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgdHJ1ZSwgQG9sZGVyd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA2LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmZsZXgtZ3JvdyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjBcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtZmxleC1ncm93OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZsZXgtZ3JvdzogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5mbGV4LXNocmluayguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjFcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtZmxleC1zaHJpbms6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgZmxleC1zaHJpbms6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uZmxleC13cmFwKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJub3dyYXBcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtZmxleC13cmFwOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1mbGV4LXdyYXA6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgZmxleC13cmFwOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5mb250LWZhY2UoQGZvbnRuYW1lLCBAZm9udGZpbGUsIEBmb250d2VpZ2h0Om5vcm1hbCwgQGZvbnRzdHlsZTpub3JtYWwpIHtcblxuICBmb250LWZhbWlseTogXCJAe2ZvbnRuYW1lfVwiO1xuICBzcmM6IHVybChcIkB7Zm9udGZpbGV9LmVvdFwiKTtcbiAgc3JjOiB1cmwoXCJAe2ZvbnRmaWxlfS5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLFxuICAgICAgIHVybChcIkB7Zm9udGZpbGV9LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSxcbiAgICAgICB1cmwoXCJAe2ZvbnRmaWxlfS50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIiksXG4gICAgICAgdXJsKFwiQHtmb250ZmlsZX0uc3ZnI0B7Zm9udG5hbWV9XCIpIGZvcm1hdChcInN2Z1wiKTtcbiAgZm9udC13ZWlnaHQ6IEBmb250d2VpZ2h0O1xuICBmb250LXN0eWxlOiBAZm9udHN0eWxlO1xuICBcbn1cblxuLmdyYXlzY2FsZSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcIiVcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1maWx0ZXI6IGdyYXlzY2FsZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtZmlsdGVyOiBncmF5c2NhbGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgZmlsdGVyOiBncmF5c2NhbGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLmh1ZS1yb3RhdGUoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJkZWdcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otZmlsdGVyOiBodWUtcm90YXRlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1maWx0ZXI6IGh1ZS1yb3RhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgZmlsdGVyOiBodWUtcm90YXRlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5oeXBoZW5zKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJtYW51YWxcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtaHlwaGVuczogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWh5cGhlbnM6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLWh5cGhlbnM6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgaHlwaGVuczogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uaW52ZXJ0KC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjEwMCVcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiJVwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1maWx0ZXI6IGludmVydChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWZpbHRlcjogaW52ZXJ0KEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1maWx0ZXI6IGludmVydChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmaWx0ZXI6IGludmVydChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uanVzdGlmeS1jb250ZW50KC4uLikge1xuXG4gIEBvbGRlc3R3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJmbGV4LXN0YXJ0XCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21vejogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJzdGFydFwiLFwiZmxleC1zdGFydFwiPT12YWx1ZT92YWx1ZT1cInN0YXJ0XCI6XCJmbGV4LWVuZFwiPT12YWx1ZT92YWx1ZT1cImVuZFwiOihcInNwYWNlLWJldHdlZW5cIj09dmFsdWV8fFwic3BhY2UtYXJvdW5kXCI9PXZhbHVlKSYmKHZhbHVlPVwianVzdGlmeVwiKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3NfbXM6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwic3RhcnRcIixcImZsZXgtc3RhcnRcIj09dmFsdWU/dmFsdWU9XCJzdGFydFwiOlwiZmxleC1lbmRcIj09dmFsdWU/dmFsdWU9XCJlbmRcIjpcInNwYWNlLWJldHdlZW5cIj09dmFsdWU/dmFsdWU9XCJqdXN0aWZ5XCI6XCJzcGFjZS1hcm91bmRcIj09dmFsdWUmJih2YWx1ZT1cImRpc3RyaWJ1dGVcIiksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJveC1wYWNrOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHsgLW1vei1ib3gtcGFjazogQHByb2Nlc3NfbW96OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbW96KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkgeyAtd2Via2l0LWp1c3RpZnktY29udGVudDogQHByb2Nlc3NfbXM7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21zKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtZmxleC1wYWNrOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGp1c3RpZnktY29udGVudDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIHRydWUsIEBvbGRlc3R3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4ua2V5ZnJhbWVzKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe2Z1bmN0aW9uIHN5bnRheChzdGFydCxzZWxlY3RvcixwcmVmaXgpe3ZhciBlbmQ9XCJ9XFxuXCIsZGVmaW5pdGlvbj12YWx1ZV90ZW1wLnNwbGl0KC8oXlthLXpBLVowLTktXSspLC9nKSxrZXlmcmFtZXM9c2VsZWN0b3IrXCIgXCIrZGVmaW5pdGlvblsxXStcIntcIixwcmVmaXhlcz1bXCItd2Via2l0LVwiLFwiLW1vei1cIixcIi1tcy1cIixcIlwiXTtwcmVmaXg/cHJlZml4ZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpey0xIT09dmFsdWUuaW5kZXhPZihwcm9wZXJ0eSkmJihkZWZpbml0aW9uWzJdPWRlZmluaXRpb25bMl0ucmVwbGFjZShuZXcgUmVnRXhwKHByb3BlcnR5LFwiZ1wiKSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHByZWZpeCttYXRjaH0pKX0pOmRlZmluaXRpb25bMl09ZGVmaW5pdGlvblsyXS5yZXBsYWNlKC97KFtefV0rKX0vZyxmdW5jdGlvbihtYXRjaCxzdWIpe3ZhciBzdWJTcGxpdD1zdWIuc3BsaXQoXCI7XCIpO3N1YlNwbGl0LmZvckVhY2goZnVuY3Rpb24oY3NzLGluZGV4KXtwcmVmaXhlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7LTEhPT1jc3MuaW5kZXhPZihwcm9wZXJ0eSkmJihzdWJTcGxpdFtpbmRleF09XCJcIixwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHZlbmRvcil7c3ViU3BsaXRbaW5kZXhdKz1jc3MudHJpbSgpLnJlcGxhY2UobmV3IFJlZ0V4cChwcm9wZXJ0eSxcImdcIiksZnVuY3Rpb24obWF0Y2gpe3JldHVybiB2ZW5kb3IrbWF0Y2h9KStcIjtcIn0pKX0pfSk7dmFyIHRlbXA9c3ViU3BsaXQuam9pbihcIjtcIikucmVwbGFjZSgvOzsvZyxcIjtcIik7cmV0dXJuIG1hdGNoLnJlcGxhY2Uoc3ViLHRlbXApfSksa2V5ZnJhbWVzKz1kZWZpbml0aW9uWzJdK2VuZCxcInN0YXJ0XCI9PXN0YXJ0P3ZhbHVlPVwiMDsgfSBcXG5cIitrZXlmcmFtZXM6XCJzdGFydGVuZFwiPT1zdGFydD92YWx1ZT1cIjA7IH0gXFxuXCIra2V5ZnJhbWVzLnJlcGxhY2UoZW5kLFwiXCIpOnZhbHVlKz1cImVuZFwiPT1zdGFydD9rZXlmcmFtZXMucmVwbGFjZShlbmQsXCJcIik6a2V5ZnJhbWVzfXZhbHVlPXZhbHVlfHw4MTIxOTkxO3ZhciBzdGF0ZT1cIkB7c3RhdGV9XCIsdmFsdWVfdGVtcD12YWx1ZTtpZig4MTIxOTkxPT12YWx1ZSlyZXR1cm4gdmFsdWU7dmFyIHByZWZpeGVkUHJvcGVydGllcz1bXCJhbmltYXRpb25cIixcInRyYW5zZm9ybVwiLFwiZmlsdGVyXCJdO3N3aXRjaChzdGF0ZSl7Y2FzZVwiMVwiOnN5bnRheChcInN0YXJ0XCIsXCJALXdlYmtpdC1rZXlmcmFtZXNcIixcIi13ZWJraXQtXCIpLHN5bnRheChudWxsLFwiQC1tb3ota2V5ZnJhbWVzXCIsXCItbW96LVwiKSxzeW50YXgobnVsbCxcIkAtby1rZXlmcmFtZXNcIixcIi1vLVwiKSxzeW50YXgoXCJlbmRcIixcIkBrZXlmcmFtZXNcIik7YnJlYWs7Y2FzZVwiMlwiOnN5bnRheChcInN0YXJ0XCIsXCJALXdlYmtpdC1rZXlmcmFtZXNcIixcIi13ZWJraXQtXCIpLHN5bnRheChudWxsLFwiQC1tb3ota2V5ZnJhbWVzXCIsXCItbW96LVwiKSxzeW50YXgoXCJlbmRcIixcIkBrZXlmcmFtZXNcIik7YnJlYWs7Y2FzZVwiM1wiOnN5bnRheChcInN0YXJ0XCIsXCJALXdlYmtpdC1rZXlmcmFtZXNcIixcIi13ZWJraXQtXCIpLHN5bnRheChudWxsLFwiQC1tb3ota2V5ZnJhbWVzXCIsXCItbW96LVwiKSxzeW50YXgoXCJlbmRcIixcIkAtby1rZXlmcmFtZXNcIixcIi1vLVwiKTticmVhaztjYXNlXCI0XCI6c3ludGF4KFwic3RhcnRcIixcIkAtd2Via2l0LWtleWZyYW1lc1wiLFwiLXdlYmtpdC1cIiksc3ludGF4KG51bGwsXCJALW8ta2V5ZnJhbWVzXCIsXCItby1cIiksc3ludGF4KFwiZW5kXCIsXCJAa2V5ZnJhbWVzXCIpO2JyZWFrO2Nhc2VcIjVcIjpzeW50YXgoXCJzdGFydFwiLFwiQC13ZWJraXQta2V5ZnJhbWVzXCIsXCItd2Via2l0LVwiKSxzeW50YXgoXCJlbmRcIixcIkAtbW96LWtleWZyYW1lc1wiLFwiLW1vei1cIik7YnJlYWs7Y2FzZVwiNlwiOnN5bnRheChcInN0YXJ0XCIsXCJALXdlYmtpdC1rZXlmcmFtZXNcIixcIi13ZWJraXQtXCIpLHN5bnRheChcImVuZFwiLFwiQC1vLWtleWZyYW1lc1wiLFwiLW8tXCIpO2JyZWFrO2Nhc2VcIjdcIjpzeW50YXgoXCJzdGFydFwiLFwiQC13ZWJraXQta2V5ZnJhbWVzXCIsXCItd2Via2l0LVwiKSxzeW50YXgoXCJlbmRcIixcIkBrZXlmcmFtZXNcIik7YnJlYWs7Y2FzZVwiOFwiOnN5bnRheChcInN0YXJ0ZW5kXCIsXCJALXdlYmtpdC1rZXlmcmFtZXNcIixcIi13ZWJraXQtXCIpO2JyZWFrO2Nhc2VcIjlcIjpzeW50YXgoXCJzdGFydFwiLFwiQC1tb3ota2V5ZnJhbWVzXCIsXCItbW96LVwiKSxzeW50YXgobnVsbCxcIkAtby1rZXlmcmFtZXNcIixcIi1vLVwiKSxzeW50YXgoXCJlbmRcIixcIkBrZXlmcmFtZXNcIik7YnJlYWs7Y2FzZVwiMTBcIjpzeW50YXgoXCJzdGFydFwiLFwiQC1tb3ota2V5ZnJhbWVzXCIsXCItbW96LVwiKSxzeW50YXgoXCJlbmRcIixcIkAtby1rZXlmcmFtZXNcIixcIi1vLVwiKTticmVhaztjYXNlXCIxMVwiOnN5bnRheChcInN0YXJ0XCIsXCJALW1vei1rZXlmcmFtZXNcIixcIi1tb3otXCIpLHN5bnRheChcImVuZFwiLFwiQGtleWZyYW1lc1wiKTticmVhaztjYXNlXCIxMlwiOnN5bnRheChcInN0YXJ0ZW5kXCIsXCJALW1vei1rZXlmcmFtZXNcIixcIi1tb3otXCIpO2JyZWFrO2Nhc2VcIjEzXCI6c3ludGF4KFwic3RhcnRcIixcIkAtby1rZXlmcmFtZXNcIixcIi1vLVwiKSxzeW50YXgoXCJlbmRcIixcIkBrZXlmcmFtZXNcIik7YnJlYWs7Y2FzZVwiMTRcIjpzeW50YXgoXCJzdGFydGVuZFwiLFwiQC1vLWtleWZyYW1lc1wiLFwiLW8tXCIpO2JyZWFrO2Nhc2VcIjE1XCI6c3ludGF4KFwic3RhcnRlbmRcIixcIkBrZXlmcmFtZXNcIil9cmV0dXJuIHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIEBzdGF0ZTogMTsgLy8gRGVmYXVsdCBzdGF0ZSAxIG1lYW5zIGFsbCBwcmVmaXhlc1xuXG4gIGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9XG5cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogMTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToyOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MjsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjM7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjM7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjQ7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjQ7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC8vIGNyb3NzXG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6NTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6NTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo2OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjY7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAvLyBjcm9zc1xuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6NjsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo2OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjc7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjc7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLy8gY3Jvc3NcbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjc7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjc7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo4OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjg7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC8vIGNyb3NzXG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6ODsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6ODsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6ODsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6ODsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6ODsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTo4OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6OTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6OTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjEwOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjEwOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLy8gY3Jvc3NcbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjEwOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjEwOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjExOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxMTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAvLyBjcm9zc1xuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTE7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjExOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC8vIGNyb3NzXG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxMzsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxMzsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC8vIGNyb3NzXG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxMzsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxMzsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTQ7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxNDsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAvLyBjcm9zc1xuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE0OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTQ7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxNDsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE0OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTQ7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZToxNDsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAvLyBjcm9zc1xuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTU7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTU7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTU7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MTU7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjE1OyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAb3BlcmFfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIChAb3BlcmEgPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAd2Via2l0X2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEBvcGVyYV9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHczY19sb2NhbCA9IHRydWUpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQHdlYmtpdCA9IHRydWUpIGFuZCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEB3ZWJraXQgPSB0cnVlKSBhbmQgbm90IChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSAge31cbiAgLy8gLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQHdlYmtpdCA9IHRydWUpIGFuZCBub3QgKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAb3BlcmEgPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQHdlYmtpdF9sb2NhbCA9IHRydWUpICB7fVxuICAvLyAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAd2Via2l0ID0gdHJ1ZSkgYW5kIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQG9wZXJhID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3ZWJraXRfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgIHt9XG4gIC8vIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gbm90IChAd2Via2l0ID0gdHJ1ZSkgYW5kIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEBvcGVyYSA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSAge31cblxuICAvLy5pbmNlcHRpb24oQGFyZ3VtZW50cyk7XG5cblxuXG5cbn1cblxuLm9wYWNpdHkoLi4uKSB7XG5cbiAgQG1zX2xvY2FsOiBmYWxzZTtcbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2Vzc19tczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MTAwKVwiLFwiYWxwaGEob3BhY2l0eT1cIitNYXRoLmZsb29yKDEwMCp2YWx1ZSkrXCIpXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjFcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbXMpKSB7ICB6b29tOiAxOyBmaWx0ZXI6IEBwcm9jZXNzX21zOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbXMpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21zKSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1vcGFjaXR5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otb3BhY2l0eTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBvcGFjaXR5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5vcmRlciguLi4pIHtcblxuICBAb2xkZXJ3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCIwXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otYm94LW9yZGluYWwtZ3JvdXA6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLWZsZXgtb3JkZXI6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1vcmRlcjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBvcmRlcjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIHRydWUsIEBvbGRlcndlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5wZXJzcGVjdGl2ZSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwibm9uZVwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1wZXJzcGVjdGl2ZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXBlcnNwZWN0aXZlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHBlcnNwZWN0aXZlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnBlcnNwZWN0aXZlLW9yaWdpbiguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiNTAlIDUwJVwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4vXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSksbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCIlXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXBlcnNwZWN0aXZlLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBwZXJzcGVjdGl2ZS1vcmlnaW46IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4ucGxhY2Vob2xkZXIoQGNvbG9yOmhvdHBpbmssIEBlbGVtZW50OiAwODEyMTk5MSkge1xuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQGVsZW1lbnQgPSAwODEyMTk5MSkge1xuICAgIEB7ZWxlbWVudH06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgIGNvbG9yOiBAY29sb3I7XG4gICAgfSBcbiAgICBAe2VsZW1lbnR9Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgICAgIGNvbG9yOiBAY29sb3I7ICBcbiAgICB9XG4gICAgQHtlbGVtZW50fTo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgICAgY29sb3I6IEBjb2xvcjsgIFxuICAgIH1cbiAgICBAe2VsZW1lbnR9Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICAgY29sb3I6IEBjb2xvcjsgIFxuICAgIH1cbiAgfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAZWxlbWVudCA9IDA4MTIxOTkxKSB7XG4gICAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICAgY29sb3I6IEBjb2xvcjtcbiAgICB9XG4gICAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICAgICBjb2xvcjogQGNvbG9yOyAgXG4gICAgfVxuICAgICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgICAgIGNvbG9yOiBAY29sb3I7ICBcbiAgICB9XG4gICAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAgXG4gICAgICAgY29sb3I6IEBjb2xvcjsgIFxuICAgIH1cbiAgfVxuICAuaW5jZXB0aW9uKEBhcmd1bWVudHMpO1xufVxuXG4ucm90YXRlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJkZWdcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHJvdGF0ZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHJvdGF0ZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiByb3RhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiByb3RhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5yb3RhdGUzZCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCIwLCAwLCAwLCAwXCIsdmFsdWU9dmFsdWUucmVwbGFjZSgvLFxccypcXGQrJC8sZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaCtcImRlZ1wifSl9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHJvdGF0ZTNkKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogcm90YXRlM2QoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogcm90YXRlM2QoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiByb3RhdGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnJvdGF0ZVgoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcImRlZ1wifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVgoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHJvdGF0ZVgoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtOiByb3RhdGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy10cmFuc2Zvcm06IHJvdGF0ZVgoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiByb3RhdGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4ucm90YXRlWSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiZGVnXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogcm90YXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHJvdGF0ZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogcm90YXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5yb3RhdGVaKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJkZWdcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogcm90YXRlWihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiByb3RhdGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybTogcm90YXRlWihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnNhdHVyYXRlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjEwMCVcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiJVwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC1maWx0ZXI6IH5cInNhdHVyYXRlKEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LWZpbHRlcjogflwic2F0dXJhdGUoQHtwcm9jZXNzfSlcIjsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1maWx0ZXI6IH5cInNhdHVyYXRlKEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyBmaWx0ZXI6IH5cInNhdHVyYXRlKEB7cHJvY2Vzc30pXCI7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uc2NhbGUoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwiMVwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtOiBzY2FsZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHNjYWxlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy10cmFuc2Zvcm06IHNjYWxlKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybTogc2NhbGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5zY2FsZTNkKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjEsIDEsIDFcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtOiBzY2FsZTNkKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogc2NhbGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiBzY2FsZTNkKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybTogc2NhbGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnNjYWxlWCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCIxXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtOiBzY2FsZVgoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtOiBzY2FsZVgoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogc2NhbGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybTogc2NhbGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4uc2NhbGVZKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcIjFcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHNjYWxlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHNjYWxlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiBzY2FsZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5zY2FsZVooLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9dmFsdWV8fFwiMVwifSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogc2NhbGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogc2NhbGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy10cmFuc2Zvcm06IHNjYWxlWihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHNjYWxlWihAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnNlbGVjdGlvbiguLi4pIHtcblxuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7ZnVuY3Rpb24gc3ludGF4KHN0YXJ0LHNlbGVjdG9yKXt2YXIgZW5kPVwifVxcblwiLGRlZmluaXRpb249dmFsdWVfdGVtcC5zcGxpdChcIixcIiksc3ludGF4PShkZWZpbml0aW9uWzFdfHxcIlwiKStzZWxlY3RvcitcIntcIitkZWZpbml0aW9uWzBdK2VuZDtcInN0YXJ0XCI9PXN0YXJ0P3ZhbHVlPVwiMDsgfSBcXG5cIitzeW50YXg6XCJzdGFydGVuZFwiPT1zdGFydD92YWx1ZT1cIjA7IH0gXFxuXCIrc3ludGF4LnJlcGxhY2UoZW5kLFwiXCIpOnZhbHVlKz1cImVuZFwiPT1zdGFydD9zeW50YXgucmVwbGFjZShlbmQsXCJcIik6c3ludGF4fXZhbHVlPXZhbHVlfHw4MTIxOTkxO3ZhciBzdGF0ZT1cIkB7c3RhdGV9XCIsdmFsdWVfdGVtcD12YWx1ZTtpZig4MTIxOTkxPT12YWx1ZSlyZXR1cm4gdmFsdWU7c3dpdGNoKHN0YXRlKXtjYXNlXCIxXCI6c3ludGF4KFwic3RhcnRcIixcIjo6c2VsZWN0aW9uXCIpLHN5bnRheChcImVuZFwiLFwiOjotbW96LXNlbGVjdGlvblwiKTticmVhaztjYXNlXCIyXCI6c3ludGF4KFwic3RhcnRlbmRcIixcIjo6c2VsZWN0aW9uXCIpO2JyZWFrO2Nhc2VcIjNcIjpzeW50YXgoXCJzdGFydGVuZFwiLFwiOjotbW96LXNlbGVjdGlvblwiKX1yZXR1cm4gdmFsdWU9dmFsdWUucmVwbGFjZSgvOyQvZyxcIlwiKX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICBAc3RhdGU6IDY5OyAvLyBZZWFoIHRvdGFsbHkgcmFuZG9tIG51bWJlclxuXG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTogMTsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgbm90IChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MjsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAvLyBjcm9zc1xuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQHczY19sb2NhbCA9IHRydWUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHsgQHN0YXRlOjI7IGxlc3NoYXQtc2VsZWN0b3IgeyAtbGgtcHJvcGVydHk6IEBwcm9jZXNzOyB9IH1cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiBub3QgKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAge31cbiAgLmluY2VwdGlvbiAoQGFyZ3VtZW50cykgd2hlbiAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7IEBzdGF0ZTozOyBsZXNzaGF0LXNlbGVjdG9yIHsgLWxoLXByb3BlcnR5OiBAcHJvY2VzczsgfSB9XG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEBtb3ogPSB0cnVlKSBhbmQgKEB3M2MgPSB0cnVlKSBhbmQgKEBtb3pfbG9jYWwgPSB0cnVlKSBhbmQgbm90IChAdzNjX2xvY2FsID0gdHJ1ZSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgIHt9XG4gIC8vIGNyb3NzXG4gIC5pbmNlcHRpb24gKEBhcmd1bWVudHMpIHdoZW4gKEBtb3ogPSB0cnVlKSBhbmQgbm90IChAdzNjID0gdHJ1ZSkgYW5kIChAbW96X2xvY2FsID0gdHJ1ZSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSAgeyBAc3RhdGU6MzsgbGVzc2hhdC1zZWxlY3RvciB7IC1saC1wcm9wZXJ0eTogQHByb2Nlc3M7IH0gfVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpICB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAbW96ID0gdHJ1ZSkgYW5kIChAdzNjID0gdHJ1ZSkgYW5kIG5vdCAoQG1vel9sb2NhbCA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQG1veiA9IHRydWUpIGFuZCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEB3M2NfbG9jYWwgPSB0cnVlKSB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIChAbW96ID0gdHJ1ZSkgYW5kIG5vdCAoQHczYyA9IHRydWUpIGFuZCBub3QgKEBtb3pfbG9jYWwgPSB0cnVlKSB7fVxuICAuaW5jZXB0aW9uIChAYXJndW1lbnRzKSB3aGVuIG5vdCAoQG1veiA9IHRydWUpIGFuZCBub3QgKEB3M2MgPSB0cnVlKSB7fVxuXG4gIC5pbmNlcHRpb24oQGFyZ3VtZW50cyk7XG5cblxufVxuXG4uc2VwaWEoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMTAwJVwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCIlXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LWZpbHRlcjogc2VwaWEoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei1maWx0ZXI6IHNlcGlhKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy1maWx0ZXI6IHNlcGlhKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IGZpbHRlcjogc2VwaWEoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnNpemUoQHNxdWFyZSkge1xuICBAdW5pdDogJ3B4JztcbiAgLnByb2Nlc3MoQHNxdWFyZSkgd2hlbiAoaXNwaXhlbChAc3F1YXJlKSksIChpc2VtKEBzcXVhcmUpKSwgKGlzcGVyY2VudGFnZShAc3F1YXJlKSksIChpc2tleXdvcmQoQHNxdWFyZSkpIHtcbiAgICB3aWR0aDogQHNxdWFyZTtcbiAgICBoZWlnaHQ6IEBzcXVhcmU7XG4gIH1cblxuICAucHJvY2VzcyhAc3F1YXJlKSB3aGVuIG5vdCAoaXNwaXhlbChAc3F1YXJlKSkgYW5kIG5vdCAoaXNlbShAc3F1YXJlKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBzcXVhcmUpKSBhbmQgbm90IChpc3N0cmluZyhAc3F1YXJlKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBzcXVhcmUpKSB7XG4gICAgd2lkdGg6IH5gQHtzcXVhcmV9ICsgQHt1bml0fWA7XG4gICAgaGVpZ2h0OiB+YEB7c3F1YXJlfSArIEB7dW5pdH1gO1xuICB9XG5cbiAgLnByb2Nlc3MoQHNxdWFyZSk7XG5cbn1cblxuLnNpemUoQHdpZHRoLCBAaGVpZ2h0KSB7XG4gIEB1bml0OiAncHgnO1xuICAucHJvY2VzcyhAd2lkdGgsIEBoZWlnaHQpIHdoZW4gKGlzcGl4ZWwoQHdpZHRoKSksIChpc2VtKEB3aWR0aCkpLCAoaXNwZXJjZW50YWdlKEB3aWR0aCkpLCAoaXNrZXl3b3JkKEB3aWR0aCkpIHtcbiAgICAua2l0dGVucyhAaGVpZ2h0KSB3aGVuIChpc3BpeGVsKEBoZWlnaHQpKSwgKGlzZW0oQGhlaWdodCkpLCAoaXNwZXJjZW50YWdlKEBoZWlnaHQpKSwgKGlza2V5d29yZChAaGVpZ2h0KSkge1xuICAgICAgd2lkdGg6IEB3aWR0aDtcbiAgICAgIGhlaWdodDogQGhlaWdodDtcbiAgICB9XG4gICAgLmtpdHRlbnMoQGhlaWdodCkgd2hlbiBub3QgKGlzcGl4ZWwoQGhlaWdodCkpIGFuZCBub3QgKGlzZW0oQGhlaWdodCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAaGVpZ2h0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBoZWlnaHQpKSB7XG4gICAgICB3aWR0aDogQHdpZHRoO1xuICAgICAgaGVpZ2h0OiB+YEB7aGVpZ2h0fSArIEB7dW5pdH1gO1xuICAgIH1cbiAgICAua2l0dGVucyhAaGVpZ2h0KTtcbiAgfVxuXG4gIC5wcm9jZXNzKEB3aWR0aCwgQGhlaWdodCkgd2hlbiAoaXNwaXhlbChAaGVpZ2h0KSksIChpc2VtKEBoZWlnaHQpKSwgKGlzcGVyY2VudGFnZShAaGVpZ2h0KSksIChpc2tleXdvcmQoQGhlaWdodCkpIHtcbiAgICAua2l0dGVucyhAd2lkdGgpIHdoZW4gKGlzcGl4ZWwoQHdpZHRoKSksIChpc2VtKEB3aWR0aCkpLCAoaXNwZXJjZW50YWdlKEB3aWR0aCkpLCAoaXNrZXl3b3JkKEB3aWR0aCkpIHt9XG4gICAgLmtpdHRlbnMoQHdpZHRoKSB3aGVuIG5vdCAoaXNwaXhlbChAd2lkdGgpKSBhbmQgbm90IChpc2VtKEB3aWR0aCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAd2lkdGgpKSBhbmQgbm90IChpc2tleXdvcmQoQHdpZHRoKSkge1xuICAgICAgd2lkdGg6IH5gQHt3aWR0aH0gKyBAe3VuaXR9YDtcbiAgICAgIGhlaWdodDogQGhlaWdodDtcbiAgICB9XG4gICAgLmtpdHRlbnMoQHdpZHRoKTtcbiAgfVxuXG4gIC5wcm9jZXNzKEB3aWR0aCwgQGhlaWdodCkgd2hlbiBub3QgKGlzcGl4ZWwoQHdpZHRoKSkgYW5kIG5vdCAoaXNlbShAd2lkdGgpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHdpZHRoKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEB3aWR0aCkpIGFuZCBub3QgKGlzcGl4ZWwoQGhlaWdodCkpIGFuZCBub3QgKGlzZW0oQGhlaWdodCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAaGVpZ2h0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBoZWlnaHQpKSAge1xuICAgIHdpZHRoOiB+YEB7d2lkdGh9ICsgQHt1bml0fWA7XG4gICAgaGVpZ2h0OiB+YEB7aGVpZ2h0fSArIEB7dW5pdH1gO1xuICB9XG5cbiAgLnByb2Nlc3MoQHdpZHRoLCBAaGVpZ2h0KTtcblxufVxuXG4uc2tldyguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiZGVnXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogc2tldyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogc2tldyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHNrZXcoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogc2tldyhAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHNrZXcoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi5za2V3WCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wiZGVnXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogc2tld1goQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHNrZXdYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogc2tld1goQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogc2tld1goQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiBza2V3WChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnNrZXdZKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJkZWdcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiBza2V3WShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogc2tld1koQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtOiBza2V3WShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiBza2V3WShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHNrZXdZKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udHJhbnNmb3JtKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwibm9uZVwiO3ZhciBmdW5jdGlvbnM9e3RyYW5zbGF0ZTpcInB4XCIscm90YXRlOlwiZGVnXCIscm90YXRlM2Q6XCJkZWdcIixza2V3OlwiZGVnXCJ9Oy9eXFx3KlxcKD9bYS16MC05Ll0qXFwpPy8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKTtmb3IodmFyIGkgaW4gZnVuY3Rpb25zKXZhbHVlLmluZGV4T2YoaSk+PTAmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoaStcIltcXFxcd10/XFxcXChbYS16MC05LCAlXSpcXFxcKVwiKSxmdW5jdGlvbihtYXRjaCl7dmFyIHJlZ2V4PS8oXFxkK1xcLj9cXGQqKSg/IVxcd3wlKS9nO3JldHVyblwicm90YXRlM2RcIj09aSYmKHJlZ2V4PS8sXFxzKlxcZCskLyksbWF0Y2gucmVwbGFjZShyZWdleCxmdW5jdGlvbihpbm5lck1hdGNoKXtyZXR1cm4gaW5uZXJNYXRjaCtmdW5jdGlvbnNbaV19KX0pKTtyZXR1cm4gdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi50cmFuc2Zvcm0tb3JpZ2luKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiNTAlIDUwJSAwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcIiVcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybS1vcmlnaW46IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtLW9yaWdpbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm0tb3JpZ2luOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udHJhbnNmb3JtLXN0eWxlKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcImZsYXRcIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtLXN0eWxlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybS1zdHlsZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtLXN0eWxlOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybS1zdHlsZTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnRyYW5zaXRpb24oLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzX3dlYmtpdDogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbCAwIGVhc2UgMFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1wiYmFja2dyb3VuZC1zaXplXCIsXCJib3JkZXItcmFkaXVzXCIsXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCIsXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLFwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1c1wiLFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIixcImJveC1zaGFkb3dcIixcImNvbHVtblwiLFwidHJhbnNmb3JtXCIsXCJmaWx0ZXJcIl0scHJlZml4PVwiLXdlYmtpdC1cIix2YWx1ZVJlZ2V4PS8oPzpcXGQpKD86bXN8cykvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JSkvZ2k7cmV0dXJuL15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpLHByZWZpeGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KXstMSE9PXZhbHVlLmluZGV4T2YocHJvcGVydHkpJiYodmFsdWU9dmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHByb3BlcnR5LFwiZ1wiKSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHByZWZpeCttYXRjaH0pKX0pLHZhbHVlUmVnZXgudGVzdCh2YWx1ZSl8fFwiMFwiPT09dmFsdWV8fCh2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIG1hdGNoKz1wYXJzZUZsb2F0KG1hdGNoLDEwKT4xMD9cIm1zXCI6XCJzXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21vejogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbCAwIGVhc2UgMFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1wiYmFja2dyb3VuZC1zaXplXCIsXCJib3gtc2hhZG93XCIsXCJjb2x1bW5cIixcInRyYW5zZm9ybVwiLFwiZmlsdGVyXCJdLHByZWZpeD1cIi1tb3otXCIsdmFsdWVSZWdleD0vKD86XFxkKSg/Om1zfHMpL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCUpL2dpO3JldHVybi9eW14sIF0qLC8udGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKC8oPzosKSg/IVteKF0qXFwpKS9nLFwiXCIpKSxwcmVmaXhlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7LTEhPT12YWx1ZS5pbmRleE9mKHByb3BlcnR5KSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChwcm9wZXJ0eSxcImdcIiksZnVuY3Rpb24obWF0Y2gpe3JldHVybiBwcmVmaXgrbWF0Y2h9KSl9KSx2YWx1ZVJlZ2V4LnRlc3QodmFsdWUpfHxcIjBcIj09PXZhbHVlfHwodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaCs9cGFyc2VGbG9hdChtYXRjaCwxMCk+MTA/XCJtc1wiOlwic1wifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19vcGVyYTogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbCAwIGVhc2UgMFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1widHJhbnNmb3JtXCJdLHByZWZpeD1cIi1vLVwiLHZhbHVlUmVnZXg9Lyg/OlxcZCkoPzptc3xzKS9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlKS9naTtyZXR1cm4vXlteLCBdKiwvLnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZSgvKD86LCkoPyFbXihdKlxcKSkvZyxcIlwiKSkscHJlZml4ZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpey0xIT09dmFsdWUuaW5kZXhPZihwcm9wZXJ0eSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAocHJvcGVydHksXCJnXCIpLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gcHJlZml4K21hdGNofSkpfSksdmFsdWVSZWdleC50ZXN0KHZhbHVlKXx8XCIwXCI9PT12YWx1ZXx8KHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbWF0Y2grPXBhcnNlRmxvYXQobWF0Y2gsMTApPjEwP1wibXNcIjpcInNcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCJhbGwgMCBlYXNlIDBcIjt2YXIgcHJlZml4ZXM9W1wiLXdlYmtpdC1cIixcIi1tb3otXCIsXCItby1cIixcIlwiXSxwcmVmaXhlZFByb3BlcnRpZXM9W1wiY29sdW1uXCIsXCJ0cmFuc2Zvcm1cIixcImZpbHRlclwiXSx2YWx1ZVJlZ2V4PS8oPzpcXGQpKD86bXN8cykvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JSkvZ2k7L15bXiwgXSosLy50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UoLyg/OiwpKD8hW14oXSpcXCkpL2csXCJcIikpO3ZhciBzdWJTcGxpdD12YWx1ZS5zcGxpdCgvKD86LCkoPyFbXihdKlxcKSkvZyk7cmV0dXJuIHN1YlNwbGl0LmZvckVhY2goZnVuY3Rpb24oY3NzLGluZGV4KXtwcmVmaXhlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7LTEhPT1jc3MuaW5kZXhPZihwcm9wZXJ0eSkmJihzdWJTcGxpdFtpbmRleF09XCJcIixwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHZlbmRvcixpKXtzdWJTcGxpdFtpbmRleF0rPWNzcy50cmltKCkucmVwbGFjZShuZXcgUmVnRXhwKHByb3BlcnR5LFwiZ1wiKSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHZlbmRvcittYXRjaH0pLGk8cHJlZml4ZXMubGVuZ3RoLTEmJihzdWJTcGxpdFtpbmRleF0rPVwiLFwiKX0pKX0pfSksdmFsdWU9c3ViU3BsaXQuam9pbihcIixcIiksdmFsdWVSZWdleC50ZXN0KHZhbHVlKXx8XCIwXCI9PT12YWx1ZXx8KHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbWF0Y2grPXBhcnNlRmxvYXQobWF0Y2gsMTApPjEwP1wibXNcIjpcInNcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX3dlYmtpdCkpIHsgLXdlYmtpdC10cmFuc2l0aW9uOiBAcHJvY2Vzc193ZWJraXQ7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc193ZWJraXQpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX21veikpIHsgLW1vei10cmFuc2l0aW9uOiBAcHJvY2Vzc19tb3o7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb3BlcmEpKSB7IC1vLXRyYW5zaXRpb246IEBwcm9jZXNzX29wZXJhOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19vcGVyYSkpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNpdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udHJhbnNpdGlvbi1kZWxheSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIHZhbHVlUmVnZXg9Lyg/OlxcZCkoPzptc3xzKS9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIHZhbHVlUmVnZXgudGVzdCh2YWx1ZSl8fFwiMFwiPT09dmFsdWV8fCh2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIG1hdGNoKz1wYXJzZUZsb2F0KG1hdGNoLDEwKT4xMD9cIm1zXCI6XCJzXCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2l0aW9uLWRlbGF5OiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zaXRpb24tZGVsYXk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNpdGlvbi1kZWxheTogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udHJhbnNpdGlvbi1kdXJhdGlvbiguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIHZhbHVlUmVnZXg9L21zfHMvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiB2YWx1ZVJlZ2V4LnRlc3QodmFsdWUpfHxcIjBcIj09PXZhbHVlfHwodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaCs9cGFyc2VGbG9hdChtYXRjaCwxMCk+MTA/XCJtc1wiOlwic1wifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNpdGlvbi1kdXJhdGlvbjogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2l0aW9uLWR1cmF0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zaXRpb24tZHVyYXRpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnRyYW5zaXRpb24tcHJvcGVydHkoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzX3dlYmtpdDogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1wiYmFja2dyb3VuZC1zaXplXCIsXCJib3JkZXItcmFkaXVzXCIsXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCIsXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLFwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1c1wiLFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIixcImJveC1zaGFkb3dcIixcImNvbHVtblwiLFwidHJhbnNmb3JtXCIsXCJmaWx0ZXJcIl0scHJlZml4PVwiLXdlYmtpdC1cIjtyZXR1cm4gcHJlZml4ZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpey0xIT09dmFsdWUuaW5kZXhPZihwcm9wZXJ0eSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAocHJvcGVydHksXCJnXCIpLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gcHJlZml4K21hdGNofSkpfSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG4gIEBwcm9jZXNzX21vejogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1wiYmFja2dyb3VuZC1zaXplXCIsXCJib3gtc2hhZG93XCIsXCJjb2x1bW5cIixcInRyYW5zZm9ybVwiLFwiZmlsdGVyXCJdLHByZWZpeD1cIi1tb3otXCI7cmV0dXJuIHByZWZpeGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KXstMSE9PXZhbHVlLmluZGV4T2YocHJvcGVydHkpJiYodmFsdWU9dmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHByb3BlcnR5LFwiZ1wiKSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHByZWZpeCttYXRjaH0pKX0pLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuICBAcHJvY2Vzc19vcGVyYTogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcImFsbFwiO3ZhciBwcmVmaXhlZFByb3BlcnRpZXM9W1widHJhbnNmb3JtXCJdLHByZWZpeD1cIi1vLVwiO3JldHVybiBwcmVmaXhlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7LTEhPT12YWx1ZS5pbmRleE9mKHByb3BlcnR5KSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChwcm9wZXJ0eSxcImdcIiksZnVuY3Rpb24obWF0Y2gpe3JldHVybiBwcmVmaXgrbWF0Y2h9KSl9KSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCJhbGxcIjt2YXIgcHJlZml4ZXM9W1wiLXdlYmtpdC1cIixcIi1tb3otXCIsXCItby1cIixcIlwiXSxwcmVmaXhlZFByb3BlcnRpZXM9W1wiY29sdW1uXCIsXCJ0cmFuc2Zvcm1cIixcImZpbHRlclwiXSxzdWJTcGxpdD12YWx1ZS5zcGxpdCgvKD86LCkoPyFbXihdKlxcKSkvZyk7cmV0dXJuIHN1YlNwbGl0LmZvckVhY2goZnVuY3Rpb24oY3NzLGluZGV4KXtwcmVmaXhlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7LTEhPT1jc3MuaW5kZXhPZihwcm9wZXJ0eSkmJihzdWJTcGxpdFtpbmRleF09XCJcIixwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHZlbmRvcixpKXtzdWJTcGxpdFtpbmRleF0rPWNzcy50cmltKCkucmVwbGFjZShuZXcgUmVnRXhwKHByb3BlcnR5LFwiZ1wiKSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHZlbmRvcittYXRjaH0pLGk8cHJlZml4ZXMubGVuZ3RoLTEmJihzdWJTcGxpdFtpbmRleF0rPVwiLFwiKX0pKX0pfSksdmFsdWU9c3ViU3BsaXQuam9pbihcIixcIil9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc193ZWJraXQpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc193ZWJraXQpKSB7IC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogQHByb2Nlc3Nfd2Via2l0OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfd2Via2l0KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX3dlYmtpdCkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfd2Via2l0KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19tb3opKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNlbShAcHJvY2Vzc19tb3opKSB7IC1tb3otdHJhbnNpdGlvbi1wcm9wZXJ0eTogQHByb2Nlc3NfbW96OyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3NfbW96KSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzX21veikpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3NfbW96KSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3VybChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzX29wZXJhKSkgeyAtby10cmFuc2l0aW9uLXByb3BlcnR5OiBAcHJvY2Vzc19vcGVyYTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3Nfb3BlcmEpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzX29wZXJhKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2Vzc19vcGVyYSkpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3Nfb3BlcmEpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zaXRpb24tcHJvcGVydHk6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT12YWx1ZXx8XCJlYXNlXCJ9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAcHJvY2VzczsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnRyYW5zbGF0ZSguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wicHhcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi50cmFuc2xhdGUzZCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjAsIDAsIDBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wicHhcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udHJhbnNsYXRlWCguLi4pIHtcblxuICBAd2Via2l0X2xvY2FsOiB0cnVlO1xuICBAbW96X2xvY2FsOiB0cnVlO1xuICBAb3BlcmFfbG9jYWw6IHRydWU7XG4gIEBtc19sb2NhbDogdHJ1ZTtcbiAgQHczY19sb2NhbDogdHJ1ZTtcblxuICBAcHJvY2VzczogfmAoZnVuY3Rpb24odmFsdWUpe3ZhbHVlPXZhbHVlfHxcIjBcIjt2YXIgbnVtUmVnZXg9L1xcZC9naSxudW1XaXRob3V0VmFsdWU9Lyg/Olxcc3xeKShcXC4/XFxkK1xcLj9cXGQqKSg/IVteKF0qXFwpfFxcd3wlfFxcLikvZ2k7cmV0dXJuIG51bVJlZ2V4LnRlc3QodmFsdWUpJiYodmFsdWU9dmFsdWUucmVwbGFjZShudW1XaXRob3V0VmFsdWUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiAwPT1tYXRjaCYmbWF0Y2h8fG1hdGNoK1wicHhcIn0pKSx2YWx1ZX0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMykgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWChAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbihAc2lnbmFsLCBAYXJndW1lbnRzKTtcbiAgfVxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gbm90IChAYm9vbGVhbiA9IHRydWUpLCBub3QgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge31cblxuICAucmVzdWx0KEBhcmd1bWVudHMsIDEsIEB3ZWJraXQsIEB3ZWJraXRfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDIsIEBtb3osIEBtb3pfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDMsIEBvcGVyYSwgQG9wZXJhX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA0LCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNSwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLnRyYW5zbGF0ZVkoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG9wZXJhX2xvY2FsOiB0cnVlO1xuICBAbXNfbG9jYWw6IHRydWU7XG4gIEB3M2NfbG9jYWw6IHRydWU7XG5cbiAgQHByb2Nlc3M6IH5gKGZ1bmN0aW9uKHZhbHVlKXt2YWx1ZT12YWx1ZXx8XCIwXCI7dmFyIG51bVJlZ2V4PS9cXGQvZ2ksbnVtV2l0aG91dFZhbHVlPS8oPzpcXHN8XikoXFwuP1xcZCtcXC4/XFxkKikoPyFbXihdKlxcKXxcXHd8JXxcXC4pL2dpO3JldHVybiBudW1SZWdleC50ZXN0KHZhbHVlKSYmKHZhbHVlPXZhbHVlLnJlcGxhY2UobnVtV2l0aG91dFZhbHVlLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gMD09bWF0Y2gmJm1hdGNofHxtYXRjaCtcInB4XCJ9KSksdmFsdWV9KSgoZnVuY3Rpb24oKXt2YXIgYXJncz1cIkB7YXJndW1lbnRzfVwiO3JldHVybiBhcmdzPWFyZ3MucmVwbGFjZSgvXlxcW3xcXF0kL2csXCJcIil9KSgpKWA7XG5cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIChAYm9vbGVhbiA9IHRydWUpIGFuZCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7XG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWShAcHJvY2Vzcyk7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDUpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAb3BlcmEsIEBvcGVyYV9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQG1zLCBAbXNfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDUsIEB3M2MsIEB3M2NfbG9jYWwpO1xuXG59XG5cbi50cmFuc2xhdGVaKC4uLikge1xuXG4gIEB3ZWJraXRfbG9jYWw6IHRydWU7XG4gIEBtb3pfbG9jYWw6IHRydWU7XG4gIEBvcGVyYV9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7dmFsdWU9dmFsdWV8fFwiMFwiO3ZhciBudW1SZWdleD0vXFxkL2dpLG51bVdpdGhvdXRWYWx1ZT0vKD86XFxzfF4pKFxcLj9cXGQrXFwuP1xcZCopKD8hW14oXSpcXCl8XFx3fCV8XFwuKS9naTtyZXR1cm4gbnVtUmVnZXgudGVzdCh2YWx1ZSkmJih2YWx1ZT12YWx1ZS5yZXBsYWNlKG51bVdpdGhvdXRWYWx1ZSxmdW5jdGlvbihtYXRjaCl7cmV0dXJuIDA9PW1hdGNoJiZtYXRjaHx8bWF0Y2grXCJweFwifSkpLHZhbHVlfSkoKGZ1bmN0aW9uKCl7dmFyIGFyZ3M9XCJAe2FyZ3VtZW50c31cIjtyZXR1cm4gYXJncz1hcmdzLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfSkoKSlgO1xuXG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiAoQGJvb2xlYW4gPSB0cnVlKSBhbmQgKEBsb2NhbF9ib29sZWFuID0gdHJ1ZSkge1xuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAxKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVooQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDIpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAzKSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gNCkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVooQHByb2Nlc3MpOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKEBwcm9jZXNzKTsgfVxuXHRcdC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA1KSBhbmQgbm90IChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7fSBcbiAgICAuaW5jZXB0aW9uKEBzaWduYWwsIEBhcmd1bWVudHMpO1xuICB9XG4gIC5yZXN1bHQgKEBhcmd1bWVudHMsIEBzaWduYWwsIEBib29sZWFuLCBAbG9jYWxfYm9vbGVhbikgd2hlbiBub3QgKEBib29sZWFuID0gdHJ1ZSksIG5vdCAoQGxvY2FsX2Jvb2xlYW4gPSB0cnVlKSB7fVxuXG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMSwgQHdlYmtpdCwgQHdlYmtpdF9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMiwgQG1veiwgQG1vel9sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgMywgQG9wZXJhLCBAb3BlcmFfbG9jYWwpO1xuICAucmVzdWx0KEBhcmd1bWVudHMsIDQsIEBtcywgQG1zX2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCA1LCBAdzNjLCBAdzNjX2xvY2FsKTtcblxufVxuXG4udXNlci1zZWxlY3QoLi4uKSB7XG5cbiAgQHdlYmtpdF9sb2NhbDogdHJ1ZTtcbiAgQG1vel9sb2NhbDogdHJ1ZTtcbiAgQG1zX2xvY2FsOiB0cnVlO1xuICBAdzNjX2xvY2FsOiB0cnVlO1xuXG4gIEBwcm9jZXNzOiB+YChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPXZhbHVlfHxcImF1dG9cIn0pKChmdW5jdGlvbigpe3ZhciBhcmdzPVwiQHthcmd1bWVudHN9XCI7cmV0dXJuIGFyZ3M9YXJncy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX0pKCkpYDtcblxuICAucmVzdWx0IChAYXJndW1lbnRzLCBAc2lnbmFsLCBAYm9vbGVhbiwgQGxvY2FsX2Jvb2xlYW4pIHdoZW4gKEBib29sZWFuID0gdHJ1ZSkgYW5kIChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHtcbiAgICAuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMSkgYW5kIChpc3N0cmluZyhAcHJvY2VzcykpIGFuZCBub3QgKGlzY29sb3IoQHByb2Nlc3MpKSBhbmQgbm90IChpc251bWJlcihAcHJvY2VzcykpIGFuZCBub3QgKGlza2V5d29yZChAcHJvY2VzcykpIGFuZCBub3QgKGlzdXJsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwaXhlbChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGVyY2VudGFnZShAcHJvY2VzcykpIGFuZCBub3QgKGlzZW0oQHByb2Nlc3MpKSB7IC13ZWJraXQtdXNlci1zZWxlY3Q6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDEpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSAyKSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgLW1vei11c2VyLXNlbGVjdDogQHByb2Nlc3M7IH1cblx0XHQuaW5jZXB0aW9uIChAc2lnbmFsLCBAYXJndW1lbnRzKSB3aGVuIChAc2lnbmFsID0gMikgYW5kIG5vdCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkge30gXG4gICAgLmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCAoaXNzdHJpbmcoQHByb2Nlc3MpKSBhbmQgbm90IChpc2NvbG9yKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNudW1iZXIoQHByb2Nlc3MpKSBhbmQgbm90IChpc2tleXdvcmQoQHByb2Nlc3MpKSBhbmQgbm90IChpc3VybChAcHJvY2VzcykpIGFuZCBub3QgKGlzcGl4ZWwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BlcmNlbnRhZ2UoQHByb2Nlc3MpKSBhbmQgbm90IChpc2VtKEBwcm9jZXNzKSkgeyAtbXMtdXNlci1zZWxlY3Q6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDMpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24gKEBzaWduYWwsIEBhcmd1bWVudHMpIHdoZW4gKEBzaWduYWwgPSA0KSBhbmQgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHsgdXNlci1zZWxlY3Q6IEBwcm9jZXNzOyB9XG5cdFx0LmluY2VwdGlvbiAoQHNpZ25hbCwgQGFyZ3VtZW50cykgd2hlbiAoQHNpZ25hbCA9IDQpIGFuZCBub3QgKGlzc3RyaW5nKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNjb2xvcihAcHJvY2VzcykpIGFuZCBub3QgKGlzbnVtYmVyKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNrZXl3b3JkKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXN1cmwoQHByb2Nlc3MpKSBhbmQgbm90IChpc3BpeGVsKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNwZXJjZW50YWdlKEBwcm9jZXNzKSkgYW5kIG5vdCAoaXNlbShAcHJvY2VzcykpIHt9IFxuICAgIC5pbmNlcHRpb24oQHNpZ25hbCwgQGFyZ3VtZW50cyk7XG4gIH1cbiAgLnJlc3VsdCAoQGFyZ3VtZW50cywgQHNpZ25hbCwgQGJvb2xlYW4sIEBsb2NhbF9ib29sZWFuKSB3aGVuIG5vdCAoQGJvb2xlYW4gPSB0cnVlKSwgbm90IChAbG9jYWxfYm9vbGVhbiA9IHRydWUpIHt9XG5cbiAgLnJlc3VsdChAYXJndW1lbnRzLCAxLCBAd2Via2l0LCBAd2Via2l0X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAyLCBAbW96LCBAbW96X2xvY2FsKTtcbiAgLnJlc3VsdChAYXJndW1lbnRzLCAzLCBAbXMsIEBtc19sb2NhbCk7XG4gIC5yZXN1bHQoQGFyZ3VtZW50cywgNCwgQHczYywgQHczY19sb2NhbCk7XG5cbn1cblxuLy8gVGhpcyBpcyB0aGUgbmljZSBwbGFjZSBmb3Igc29tZSBraW5kIG9mIHN0b3J5IG9yIHNvbWV0aGluZy4uLiBNYXliZSBpbiBuZXh0IHZlcnNpb24gOilcbiIsIi8vIFZlbmRvciBQcmVmaXhlc1xuLy9cbi8vIEFsbCB2ZW5kb3IgbWl4aW5zIGFyZSBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZlxuLy8gQXV0b3ByZWZpeGVyIGluIG91ciBHcnVudGZpbGUuIFRoZXkgd2lsbCBiZSByZW1vdmVkIGluIHY0LlxuXG4vLyAtIEFuaW1hdGlvbnNcbi8vIC0gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gLSBCb3ggc2hhZG93XG4vLyAtIEJveCBzaXppbmdcbi8vIC0gQ29udGVudCBjb2x1bW5zXG4vLyAtIEh5cGhlbnNcbi8vIC0gUGxhY2Vob2xkZXIgdGV4dFxuLy8gLSBUcmFuc2Zvcm1hdGlvbnNcbi8vIC0gVHJhbnNpdGlvbnNcbi8vIC0gVXNlciBTZWxlY3RcblxuXG4vLyBBbmltYXRpb25zXG4uYW5pbWF0aW9uKEBhbmltYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IEBhbmltYXRpb247XG4gICAgICAgLW8tYW5pbWF0aW9uOiBAYW5pbWF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbjogQGFuaW1hdGlvbjtcbn1cbi5hbmltYXRpb24tbmFtZShAbmFtZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBAbmFtZTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogQG5hbWU7XG59XG4uYW5pbWF0aW9uLWR1cmF0aW9uKEBkdXJhdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogQGR1cmF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogQGR1cmF0aW9uO1xufVxuLmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oQHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRpbWluZy1mdW5jdGlvbjtcbn1cbi5hbmltYXRpb24tZGVsYXkoQGRlbGF5KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiBAZGVsYXk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiBAZGVsYXk7XG59XG4uYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudChAaXRlcmF0aW9uLWNvdW50KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogQGl0ZXJhdGlvbi1jb3VudDtcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBAaXRlcmF0aW9uLWNvdW50O1xufVxuLmFuaW1hdGlvbi1kaXJlY3Rpb24oQGRpcmVjdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IEBkaXJlY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogQGRpcmVjdGlvbjtcbn1cbi5hbmltYXRpb24tZmlsbC1tb2RlKEBmaWxsLW1vZGUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBAZmlsbC1tb2RlO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IEBmaWxsLW1vZGU7XG59XG5cbi8vIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBmbGlja2VyaW5nIHdoZW4gdXNpbmcgQ1NTIDNEIHRyYW5zZm9ybXMuXG4vLyBEZWZhdWx0IHZhbHVlIGlzIGB2aXNpYmxlYCwgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGBoaWRkZW5gXG5cbi5iYWNrZmFjZS12aXNpYmlsaXR5KEB2aXNpYmlsaXR5KXtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbiAgICAgLW1vei1iYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbn1cblxuLy8gRHJvcCBzaGFkb3dzXG4vL1xuLy8gTm90ZTogRGVwcmVjYXRlZCBgLmJveC1zaGFkb3coKWAgYXMgb2YgdjMuMS4wIHNpbmNlIGFsbCBvZiBCb290c3RyYXAnc1xuLy8gc3VwcG9ydGVkIGJyb3dzZXJzIHRoYXQgaGF2ZSBib3ggc2hhZG93IGNhcGFiaWxpdGllcyBub3cgc3VwcG9ydCBpdC5cblxuLmJveC1zaGFkb3coQHNoYWRvdykge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IEBzaGFkb3c7IC8vIGlPUyA8NC4zICYgQW5kcm9pZCA8NC4xXG4gICAgICAgICAgYm94LXNoYWRvdzogQHNoYWRvdztcbn1cblxuLy8gQm94IHNpemluZ1xuLmJveC1zaXppbmcoQGJveG1vZGVsKSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogQGJveG1vZGVsO1xuICAgICAtbW96LWJveC1zaXppbmc6IEBib3htb2RlbDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBAYm94bW9kZWw7XG59XG5cbi8vIENTUzMgQ29udGVudCBDb2x1bW5zXG4uY29udGVudC1jb2x1bW5zKEBjb2x1bW4tY291bnQ7IEBjb2x1bW4tZ2FwOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XG4gICAgIC1tb3otY29sdW1uLWNvdW50OiBAY29sdW1uLWNvdW50O1xuICAgICAgICAgIGNvbHVtbi1jb3VudDogQGNvbHVtbi1jb3VudDtcbiAgLXdlYmtpdC1jb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbiAgICAgLW1vei1jb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbiAgICAgICAgICBjb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbn1cblxuLy8gT3B0aW9uYWwgaHlwaGVuYXRpb25cbi5oeXBoZW5zKEBtb2RlOiBhdXRvKSB7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiBAbW9kZTtcbiAgICAgLW1vei1oeXBoZW5zOiBAbW9kZTtcbiAgICAgIC1tcy1oeXBoZW5zOiBAbW9kZTsgLy8gSUUxMCtcbiAgICAgICAtby1oeXBoZW5zOiBAbW9kZTtcbiAgICAgICAgICBoeXBoZW5zOiBAbW9kZTtcbn1cblxuLy8gUGxhY2Vob2xkZXIgdGV4dFxuLnBsYWNlaG9sZGVyKEBjb2xvcjogQGlucHV0LWNvbG9yLXBsYWNlaG9sZGVyKSB7XG4gIC8vIEZpcmVmb3hcbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IEBjb2xvcjtcbiAgICBvcGFjaXR5OiAxOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjZcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IGNvbG9yOiBAY29sb3I7IH0gLy8gSW50ZXJuZXQgRXhwbG9yZXIgMTArXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgIHsgY29sb3I6IEBjb2xvcjsgfSAvLyBTYWZhcmkgYW5kIENocm9tZVxufVxuXG4vLyBUcmFuc2Zvcm1hdGlvbnNcbi5zY2FsZShAcmF0aW8pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKEByYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKEByYXRpbyk7XG59XG4uc2NhbGUoQHJhdGlvWDsgQHJhdGlvWSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvWCwgQHJhdGlvWSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW9YLCBAcmF0aW9ZKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoQHJhdGlvWCwgQHJhdGlvWSk7XG59XG4uc2NhbGVYKEByYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKEByYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVgoQHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKEByYXRpbyk7XG59XG4uc2NhbGVZKEByYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVZKEByYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoQHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKEByYXRpbyk7XG59XG4uc2tldyhAeDsgQHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy80ODg1OyBJRTkrXG4gICAgICAgLW8tdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2tld1goQHgpIHNrZXdZKEB5KTtcbn1cbi50cmFuc2xhdGUoQHg7IEB5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHgsIEB5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZShAeCwgQHkpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHgsIEB5KTtcbn1cbi50cmFuc2xhdGUzZChAeDsgQHk7IEB6KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZChAeCwgQHksIEB6KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKEB4LCBAeSwgQHopO1xufVxuLnJvdGF0ZShAZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZShAZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoQGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcbn1cbi5yb3RhdGVYKEBkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVgoQGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWChAZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTtcbn1cbi5yb3RhdGVZKEBkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVkoQGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWShAZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTtcbn1cbi5wZXJzcGVjdGl2ZShAcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogQHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlOiBAcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmU6IEBwZXJzcGVjdGl2ZTtcbn1cbi5wZXJzcGVjdGl2ZS1vcmlnaW4oQHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luOiBAcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmUtb3JpZ2luOiBAcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiBAcGVyc3BlY3RpdmU7XG59XG4udHJhbnNmb3JtLW9yaWdpbihAb3JpZ2luKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogQG9yaWdpbjtcbiAgICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luO1xuICAgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IEBvcmlnaW47IC8vIElFOSBvbmx5XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogQG9yaWdpbjtcbn1cblxuXG4vLyBUcmFuc2l0aW9uc1xuXG4udHJhbnNpdGlvbihAdHJhbnNpdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb246IEB0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246IEB0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246IEB0cmFuc2l0aW9uO1xufVxuLnRyYW5zaXRpb24tcHJvcGVydHkoQHRyYW5zaXRpb24tcHJvcGVydHkpIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBAdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBAdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbn1cbi50cmFuc2l0aW9uLWRlbGF5KEB0cmFuc2l0aW9uLWRlbGF5KSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogQHRyYW5zaXRpb24tZGVsYXk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogQHRyYW5zaXRpb24tZGVsYXk7XG59XG4udHJhbnNpdGlvbi1kdXJhdGlvbihAdHJhbnNpdGlvbi1kdXJhdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IEB0cmFuc2l0aW9uLWR1cmF0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IEB0cmFuc2l0aW9uLWR1cmF0aW9uO1xufVxuLnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKEB0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRpbWluZy1mdW5jdGlvbjtcbn1cbi50cmFuc2l0aW9uLXRyYW5zZm9ybShAdHJhbnNpdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xuICAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSBAdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gQHRyYW5zaXRpb247XG59XG5cblxuLy8gVXNlciBzZWxlY3Rcbi8vIEZvciBzZWxlY3RpbmcgdGV4dCBvbiB0aGUgcGFnZVxuXG4udXNlci1zZWxlY3QoQHNlbGVjdCkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBAc2VsZWN0O1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBAc2VsZWN0O1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBAc2VsZWN0OyAvLyBJRTEwK1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBAc2VsZWN0O1xufVxuIiwiLy8gT3BhY2l0eVxuXG4ub3BhY2l0eShAb3BhY2l0eSkge1xuICBvcGFjaXR5OiBAb3BhY2l0eTtcbiAgLy8gSUU4IGZpbHRlclxuICBAb3BhY2l0eS1pZTogKEBvcGFjaXR5ICogMTAwKTtcbiAgZmlsdGVyOiB+XCJhbHBoYShvcGFjaXR5PUB7b3BhY2l0eS1pZX0pXCI7XG59XG4iLCIvL1xuLy8gQ2xvc2UgaWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLmNsb3NlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6IChAZm9udC1zaXplLWJhc2UgKiAxLjUpO1xuICBmb250LXdlaWdodDogQGNsb3NlLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6IEBjbG9zZS1jb2xvcjtcbiAgdGV4dC1zaGFkb3c6IEBjbG9zZS10ZXh0LXNoYWRvdztcbiAgLm9wYWNpdHkoLjIpO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiBAY2xvc2UtY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAub3BhY2l0eSguNSk7XG4gIH1cblxuICAvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGJ1dHRvbiB2ZXJzaW9uXG4gIC8vIGlPUyByZXF1aXJlcyB0aGUgYnV0dG9uIGVsZW1lbnQgaW5zdGVhZCBvZiBhbiBhbmNob3IgdGFnLlxuICAvLyBJZiB5b3Ugd2FudCB0aGUgYW5jaG9yIHZlcnNpb24sIGl0IHJlcXVpcmVzIGBocmVmPVwiI1wiYC5cbiAgYnV0dG9uJiB7XG4gICAgcGFkZGluZzogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuIiwiQGltcG9ydCBcImxlc3NoYXRcIjtcbkBpbXBvcnQgXCIuLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9sZXNzL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcIi4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwL2xlc3MvbWl4aW5zXCI7XG5AaW1wb3J0IFwiLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAvbGVzcy9tb2RhbHNcIjtcbkBpbXBvcnQgXCIuLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9sZXNzL2Nsb3NlXCI7XG5AaW1wb3J0IFwidmFyaWFibGVzXCI7XG5AaW1wb3J0IFwibWl4aW5zXCI7XG5cbioge1xuICAgIGZvbnQtZmFtaWx5OiBjb25zb2xhcywgbW9ub3NwYWNlXG59XG5cbi54LWZvcm0taXRlbSwgLngtZm9ybS1maWVsZCB7XG4gICAgZm9udC1mYW1pbHk6IGNvbnNvbGFzLCBtb25vc3BhY2Vcbn1cblxuYm9keSB7XG4gICAgZm9udDogMTRweCBjb25zb2xhcywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLm1haW4taGVhZGVyIHtcbiAgICBjb2xvcjogQHdlYmZpZGRsZS1ibHVlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbi53ZWJmaWRkbGUtbGlnaHQtYmx1ZSB7XG4gICAgY29sb3I6IEB3ZWJmaWRkbGUtbGlnaHQtYmx1ZTtcbn1cblxuLm1haW4taGVhZGVyX2hlYWRpbmcge1xuICAgIHRvcDogMTBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBwYWRkaW5nLXRvcDogNTBweDtcbiAgICBmb250LWZhbWlseTogY29uc29sYXMsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5tYWluLWNvbnRlbnQge1xuICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAzMDBweDtcbn1cblxuYSB7XG4gICAgY29sb3I6IEB3ZWJmaWRkbGUtYmx1ZTtcbiAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IEB3ZWJmaWRkbGUtbGlnaHQtYmx1ZTtcbiAgICB9XG59XG5cbi5jb2RlLWVkaXRvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uQ29kZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uQ29kZU1pcnJvci1zY3JvbGwge1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5Db2RlTWlycm9yLWd1dHRlcnMge1xuICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuXG4uaGVhZGVyLWJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgcGFkZGluZzogMThweDtcbiAgICB3aWR0aDogNzVweDtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZWJmaWRkbGUtYmx1ZTtcbiAgICB9XG4gICAgLmZhIHtcbiAgICAgICAgZm9udC1zaXplOiAyM3B4O1xuICAgIH1cblxuICAgIC50cmFuc2l0aW9uKGFsbCAwLjNzIGVhc2UtaW4pO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6NjUwcHgpIHtcbiAgICAgICB3aWR0aDogODVweDtcbiAgICB9XG59XG5cbi53ZWItZnJhbWUsIC53ZWItaWZyYW1lIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4ubW0tc2hhcmluZy1idG5zIHtcbiAgICAuZm9udC1zaXplKDEuOSk7XG4gICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xufVxuXG4ubW0tc2hhcmUtYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGZvbnQtc2l6ZTogQGJhc2UtZm9udC1zaXplICoyO1xufVxuXG4ubW0tc2hhcmUtYnRuLS10d2l0dGVyIHtcbiAgICBjb2xvcjogQHR3aXR0ZXItYmx1ZTtcbn1cblxuLm1tLXNoYXJlLWJ0bi0tZ29vZ2xlLXBsdXMge1xuICAgIGNvbG9yOiBAZ29vZ2xlLXBsdXMtcmVkO1xufVxuXG4ubW0tc2hhcmUtYnRuLS1waW50ZXJlc3Qge1xuICAgIGNvbG9yOiBAcGludGVyZXN0LXJlZDtcbn1cblxuLm1tLXNoYXJlLWJ0bi0tbGlua2VkLWluIHtcbiAgICBjb2xvcjogQGxpbmtlZC1pbi1ibHVlO1xufVxuXG4ubW0tc2hhcmUtYnRuLS1yZWRkaXQge1xuICAgIGNvbG9yOiBAcmVkZGl0LWJsdWU7XG59XG5cbi5tbS1zaGFyZS1idG4tLXN0dW1ibGV1cG9uIHtcbiAgICBjb2xvcjogQHN0dW1ibGUtdXBvbi1vcmFuZ2U7XG59XG5cbi5tbS1zaGFyZS1idG4tLWhhY2tlcm5ld3Mge1xuICAgIGNvbG9yOiBAeWNvbWJpbmF0b3Itb3JhbmdlO1xufVxuXG4ud2ViLWlmcmFtZS1sb2FkaW5nIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIC53ZWItYmlnc3Bpbm5lciB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgfVxufVxuXG4ud2ViLWJpZ3NwaW5uZXIge1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbn1cblxuLndlYi1leHRyYSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4ud2ViZmlkZGxlLXNoYXJlLWxpbmsge1xuICAgIHdpZHRoOiA4MCU7XG59XG5cbi5pbmxldF9zbGlkZXIge1xuICAgIHotaW5kZXg6IDk5OTk7XG59XG4iLCIuZm9udC1zaXplKEBzaXplKSB7XG4gICAgZm9udC1zaXplOiBAYmFzZS1mb250LXNpemUgKiBAc2l6ZSAvICgzLzEuOSk7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogQHNtYWxsLW1pbi13aWR0aCkge1xuICAgICAgICBmb250LXNpemU6IEBiYXNlLWZvbnQtc2l6ZSAqIEBzaXplIC8gKDMvMi40KTtcbiAgICB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBpcGFkLXBvcnRyYWl0LW1pbi13aWR0aCkge1xuICAgICAgICBmb250LXNpemU6IEBiYXNlLWZvbnQtc2l6ZSAqIEBzaXplIC8gKDMvMi42KTtcbiAgICB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBpcGFkLWxhbmRzY2FwZS1taW4td2lkdGgpIHtcbiAgICAgICAgZm9udC1zaXplOiBAYmFzZS1mb250LXNpemUgKiBAc2l6ZSAvICgzLzIuNyk7XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiBAbGFyZ2UtbWluLXdpZHRoKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogQGJhc2UtZm9udC1zaXplICogQHNpemUgLyAoMy8yLjgpO1xuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogQGh1Z2UtbWluLXdpZHRoKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogQGJhc2UtZm9udC1zaXplICogQHNpemU7XG4gICAgfVxufVxuXG4uZm9udC1zaXplLXNtYWxsZXIoQHNpemUpIHtcbiAgICBmb250LXNpemU6IEBiYXNlLWZvbnQtc2l6ZSAqIEBzaXplIC8gKDMvMi4zKTtcblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiBAc21hbGwtbWluLXdpZHRoKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogQGJhc2UtZm9udC1zaXplICogQHNpemUgLyAoMy8yLjUpO1xuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogQGlwYWQtcG9ydHJhaXQtbWluLXdpZHRoKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogQGJhc2UtZm9udC1zaXplICogQHNpemUgLyAoMy8yLjYpO1xuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogQGlwYWQtbGFuZHNjYXBlLW1pbi13aWR0aCkge1xuICAgICAgICBmb250LXNpemU6IEBiYXNlLWZvbnQtc2l6ZSAqIEBzaXplIC8gKDMvMi43KTtcbiAgICB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBsYXJnZS1taW4td2lkdGgpIHtcbiAgICAgICAgZm9udC1zaXplOiBAYmFzZS1mb250LXNpemUgKiBAc2l6ZSAvICgzLzIuOCk7XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiBAaHVnZS1taW4td2lkdGgpIHtcbiAgICAgICAgZm9udC1zaXplOiBAYmFzZS1mb250LXNpemUgKiBAc2l6ZTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */